Expenses
Per-event expense tracking and aggregate reports
Expenses are line items attached to an event. They roll up into reports for financial summaries.
Resource overview
GET
/api/expenses/{id}API key · SessionPATCH
/api/expenses/{id}API key · SessionDELETE
/api/expenses/{id}API key · SessionGET
/api/expenses/reportsAPI key · SessionExpenses are created via the event sub-resource: POST /api/events/{id} /expenses. Top-level GET /api/expenses is not
exposed; query through events.
Get expense
GET
/api/expenses/{id}API key · Session200
{
"id": "expense-uuid",
"eventId": "event-uuid",
"category": "transportation",
"amount": "1250.00",
"currency": "USD",
"incurredAt": "2026-06-15T14:00:00Z",
"description": "Coach rental",
"createdBy": "user-uuid"
}Update expense
PATCH
/api/expenses/{id}API key · Session| Name | Type | Required | Description |
|---|---|---|---|
category | string | Optional | One of the configured expense categories. |
amount | string (decimal) | Optional | Amount in major units, as a string to avoid float loss. |
currency | string (ISO 4217) | Optional | 3-letter currency code. |
incurredAt | string (ISO 8601) | Optional | When the expense was incurred. |
description | string | Optional | Free-form description. |
Delete expense
DELETE
/api/expenses/{id}API key · SessionReports
GET
/api/expenses/reportsAPI key · Session| Name | Type | Required | Description |
|---|---|---|---|
from | string (ISO 8601) | Optional | Inclusive lower bound on `incurredAt`. |
to | string (ISO 8601) | Optional | Inclusive upper bound on `incurredAt`. |
groupBy | string | Optional | `event`, `category`, or `month`. |
tourId | string | Optional | Limit to a specific tour. |
200
{
"totals": { "amount": "12450.00", "currency": "USD", "count": 47 },
"groups": [
{ "key": "transportation", "amount": "8200.00", "count": 18 },
{ "key": "catering", "amount": "3100.00", "count": 22 }
]
}