Financials
Retrieve Event Costs #
|
Sample Object
{
"id": 12345,
"cost_type_id": 6,
"cost_type": "Miscellaneous Expense/Credit",
"cost_subtype": null,
"details": "Sample expense",
"amount": 125.5,
"amount_cost_center_breakdown": [
{
"cost_center_id": null,
"cost_center": "Not Specified",
"charge": 125.5
}
],
"payment_due_date": "",
"payment_status": {
"id": 0,
"name": "Not Specified"
},
"next_partial_payment_due_date": "",
"payment_notes": "",
"event": {
"id": 12345,
"exhibitday_url": "https://www.exhibitday.com/Workspace/Event/98765?eid=12345",
"name": "Sample Event",
"start_date": "2026-12-12",
"end_date": "2026-12-14",
"participation_type_id": 1,
"participation_type": "Committed",
"format_id": 1,
"format": "In-Person",
"event_created_timestamp": "2026-11-12T17:00:00Z",
"event_last_update_timestamp": "2026-11-12T17:00:00Z"
}
} |
If a specific Event Id is passed in (using the "filter_by_event_id" parameter), then only the costs for that event are returned. Otherwise, all costs for all events are returned. The "cost_subtype" property contains the selected Booth Service type or the Event Activity type. Other Booth Services use "Other"; Other activities use their category name, including "Presentation (Other)". General activities and other cost types return null. The subtype is separate from "details", which describes the item.
Parameters
| Name | Type | Required? | Details | Description |
| api_key | String | Yes |
|
|
| filter_by_event_id | Number | No |
Id of a specific event that you would like to retrieve costs for.
|
|
| filter_by_event_start_date_greater_than_or_equal_to | Date | No |
Only include costs for events that have their start date greater than or equal to the value passed in for this filter parameter. Use this date format: YYYY-MM-DD
|
|
| filter_by_event_start_date_smaller_than_or_equal_to | Date | No |
Only include costs for events that have their start date smaller than or equal to the value passed in for this filter parameter. Use this date format: YYYY-MM-DD
|
|
| filter_by_event_end_date_greater_than_or_equal_to | Date | No |
Only include costs for events that have their end date greater than or equal to the value passed in for this filter parameter. Use this date format: YYYY-MM-DD
|
|
| filter_by_event_end_date_smaller_than_or_equal_to | Date | No |
Only include costs for events that have their end date smaller than or equal to the value passed in for this filter parameter. Use this date format: YYYY-MM-DD
|
|
| filter_by_event_start_date_category | String | No |
Only include the costs of the events in one category: "all" (all events), "upcoming" (events that end today or later, including events that are in progress), "past" (events that ended before today), or a year such as "2026" (events that start in that year). "Today" is based on your workspace's time zone. When you pass in one of these values, the event date filters are ignored. To get the list of categories for your workspace, use /v1/references/event_start_date_categories. Any other value is rejected with an error.
|
|
| $limit | Number | No |
The most cost records to return (a whole number of 1 or more). Use it with $offset to read a long list in pages: total_records in the response counts every matching cost record and has_more is true while more pages follow (the X-Total-Count header carries the total too). Without $limit, every matching cost record is returned.
|
|
| $offset | Number | No |
How many cost records to skip before the first one returned (a whole number; 0 by default). For the next page, add the number of cost records you received to $offset.
|
|
| $result_format | String | No |
Pass in "array" to get the results as a plain JSON array (without records_found, total_records, has_more and list_type; the X-Total-Count header still gives the total), or "wrapped_in_array" to get the usual response inside a JSON array.
|
|
| $on_error_return_empty_result | Boolean | No |
default: false
|
For this endpoint's ID, date-filter or paging validation errors, including a referenced event not found, return HTTP 200 with no matching records in the selected result format. Authentication, rate-limit and unexpected server errors keep their normal HTTP status.
|
Code Samples
curl -X GET "https://api.exhibitday.com/v1/financials/event_costs" -H "api_key: YOUR_API_KEY"
const response = await fetch("https://api.exhibitday.com/v1/financials/event_costs", {
method: "GET",
headers: { "api_key": "YOUR_API_KEY" }
});
const data = await response.json();
console.log(response.status, data);
import requests
response = requests.get(
"https://api.exhibitday.com/v1/financials/event_costs",
headers={"api_key": "YOUR_API_KEY"},
)
print(response.status_code, response.json())
using System;
using System.Net.Http;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("api_key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.exhibitday.com/v1/financials/event_costs");
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ExhibitDayExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.exhibitday.com/v1/financials/event_costs"))
.header("api_key", "YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}
<?php
$curl = curl_init('https://api.exhibitday.com/v1/financials/event_costs');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['api_key: YOUR_API_KEY'],
]);
$response = curl_exec($curl);
if ($response === false) {
throw new RuntimeException(curl_error($curl));
}
echo curl_getinfo($curl, CURLINFO_HTTP_CODE) . PHP_EOL . $response;
curl_close($curl);
require 'net/http'
require 'uri'
uri = URI('https://api.exhibitday.com/v1/financials/event_costs')
request = Net::HTTP::Get.new(uri)
request['api_key'] = 'YOUR_API_KEY'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
puts "#{response.code} #{response.body}"
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.exhibitday.com/v1/financials/event_costs", nil)
if err != nil { log.Fatal(err) }
request.Header.Set("api_key", "YOUR_API_KEY")
response, err := (&http.Client{}).Do(request)
if err != nil { log.Fatal(err) }
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil { log.Fatal(err) }
fmt.Printf("%d %s\n", response.StatusCode, body)
}
Example HTTP response body (JSON)
GET /v1/financials/event_costs - HTTP 200
{
"records_found": 1,
"total_records": 1,
"has_more": false,
"list_type": "event_cost",
"list_data": [
{
"id": 12345,
"cost_type_id": 6,
"cost_type": "Miscellaneous Expense/Credit",
"cost_subtype": null,
"details": "Sample expense",
"amount": 125.50,
"amount_cost_center_breakdown": [
{
"cost_center_id": null,
"cost_center": "Not Specified",
"charge": 125.50
}
],
"payment_due_date": "",
"payment_status": {
"id": 0,
"name": "Not Specified"
},
"next_partial_payment_due_date": "",
"payment_notes": "",
"event": {
"id": 12345,
"exhibitday_url": "https://www.exhibitday.com/Workspace/Event/98765?eid=12345",
"name": "Sample Event",
"start_date": "2026-12-12",
"end_date": "2026-12-14",
"participation_type_id": 1,
"participation_type": "Committed",
"format_id": 1,
"format": "In-Person",
"event_created_timestamp": "2026-11-12T17:00:00Z",
"event_last_update_timestamp": "2026-11-12T17:00:00Z"
}
}
]
}
Note: Illustrative response. Assume the identified records exist in an illustrative workspace and the request succeeds. Generated IDs, related records and timestamps are illustrative. Item links use illustrative workspace 98765 and the DTO's configured application host (an illustrative production-host fallback is used only if absent). Timestamps are illustrative values formatted by the current API serializer; they do not establish the timezone semantics of stored timestamps. The default response representation is shown; documented options can select another shape. Reference labels are illustrative; assume the workspace uses the standard participation types with no custom choices. No query/body parameters are sent (the API key remains a header).
Retrieve Miscellaneous Annual Expense Costs #
|
Sample Object
{
"id": 12345,
"budget_year": 2026,
"description": "Sample annual expense",
"planned_amount": 150.0,
"actual_amount": 125.5,
"actual_amount_cost_center_breakdown": [
{
"cost_center_id": null,
"cost_center": "Not Specified",
"charge": 125.5
}
]
} |
If a specific Budget Year is passed in (using the "budget_year" parameter, e.g. 2026), then only the miscellaneous annual expense costs for that budget year are returned. Otherwise, all miscellaneous annual expense costs for all budget years are returned. Every miscellaneous annual expense is listed, including one with a planned amount and no cost recorded yet (its actual_amount is 0 and its actual_amount_cost_center_breakdown is empty).
Parameters
| Name | Type | Required? | Details | Description |
| api_key | String | Yes |
|
|
| budget_year | Number | No |
The specific budget year that you would like to retrieve miscellaneous annual expense costs for (e.g., 2026).
|
|
| $limit | Number | No |
The most cost records to return (a whole number of 1 or more). Use it with $offset to read a long list in pages: total_records in the response counts every matching cost record and has_more is true while more pages follow (the X-Total-Count header carries the total too). Without $limit, every matching cost record is returned.
|
|
| $offset | Number | No |
How many cost records to skip before the first one returned (a whole number; 0 by default). For the next page, add the number of cost records you received to $offset.
|
|
| $result_format | String | No |
Pass in "array" to get the results as a plain JSON array (without records_found, total_records, has_more and list_type; the X-Total-Count header still gives the total), or "wrapped_in_array" to get the usual response inside a JSON array.
|
|
| $on_error_return_empty_result | Boolean | No |
default: false
|
For invalid budget_year or paging values, return HTTP 200 with no matching records in the selected result format. Authentication, rate-limit and unexpected server errors keep their normal HTTP status.
|
Code Samples
curl -X GET "https://api.exhibitday.com/v1/financials/misc_annual_expense_costs" -H "api_key: YOUR_API_KEY"
const response = await fetch("https://api.exhibitday.com/v1/financials/misc_annual_expense_costs", {
method: "GET",
headers: { "api_key": "YOUR_API_KEY" }
});
const data = await response.json();
console.log(response.status, data);
import requests
response = requests.get(
"https://api.exhibitday.com/v1/financials/misc_annual_expense_costs",
headers={"api_key": "YOUR_API_KEY"},
)
print(response.status_code, response.json())
using System;
using System.Net.Http;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("api_key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.exhibitday.com/v1/financials/misc_annual_expense_costs");
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ExhibitDayExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.exhibitday.com/v1/financials/misc_annual_expense_costs"))
.header("api_key", "YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}
<?php
$curl = curl_init('https://api.exhibitday.com/v1/financials/misc_annual_expense_costs');
curl_setopt_array($curl, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['api_key: YOUR_API_KEY'],
]);
$response = curl_exec($curl);
if ($response === false) {
throw new RuntimeException(curl_error($curl));
}
echo curl_getinfo($curl, CURLINFO_HTTP_CODE) . PHP_EOL . $response;
curl_close($curl);
require 'net/http'
require 'uri'
uri = URI('https://api.exhibitday.com/v1/financials/misc_annual_expense_costs')
request = Net::HTTP::Get.new(uri)
request['api_key'] = 'YOUR_API_KEY'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
http.request(request)
end
puts "#{response.code} #{response.body}"
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
request, err := http.NewRequest("GET", "https://api.exhibitday.com/v1/financials/misc_annual_expense_costs", nil)
if err != nil { log.Fatal(err) }
request.Header.Set("api_key", "YOUR_API_KEY")
response, err := (&http.Client{}).Do(request)
if err != nil { log.Fatal(err) }
defer response.Body.Close()
body, err := io.ReadAll(response.Body)
if err != nil { log.Fatal(err) }
fmt.Printf("%d %s\n", response.StatusCode, body)
}
Example HTTP response body (JSON)
GET /v1/financials/misc_annual_expense_costs - HTTP 200
{
"records_found": 1,
"total_records": 1,
"has_more": false,
"list_type": "misc_annual_expense_cost",
"list_data": [
{
"id": 12345,
"budget_year": 2026,
"description": "Sample annual expense",
"planned_amount": 150.00,
"actual_amount": 125.50,
"actual_amount_cost_center_breakdown": [
{
"cost_center_id": null,
"cost_center": "Not Specified",
"charge": 125.50
}
]
}
]
}
Note: Illustrative response. Assume the identified records exist in an illustrative workspace and the request succeeds. Generated IDs, related records and timestamps are illustrative. Item links use illustrative workspace 98765 and the DTO's configured application host (an illustrative production-host fallback is used only if absent). Timestamps are illustrative values formatted by the current API serializer; they do not establish the timezone semantics of stored timestamps. The default response representation is shown; documented options can select another shape. Reference labels are illustrative; assume the workspace uses the standard participation types with no custom choices. No query/body parameters are sent (the API key remains a header).