Skip to main content

Conventions

Pagination​

List endpoints return:

{
"results": [ ... ],
"count": 42
}

Use the page query parameter. Default page size is 20 (config/publicApi.default_page_size).

GET /api/v1/events?page=2

Money amounts​

ContextFormat
Ticket price and booking_fee on create/updateIntegers in minor units (pence, cents, etc.)
Cart and order totalsStrings (JSON has no exact decimal type)

Example: £25.00 ticket → "price": 2500

Date and time​

All datetimes in the Storefront API use UTC.

Request bodies (write)​

FieldFormatExample
Event start, endY-m-d H:i:s string (UTC, no offset)2026-07-01 18:00:00
Discount start, endISO 8601 string (UTC)2026-07-01T18:00:00Z
Device PIN expires_atISO 8601 string (UTC)2026-12-31T23:59:59Z
Cart expires_atUnix timestamp (integer, UTC)1718467200

Event create/update does not accept ISO 8601 or timezone offsets for start/end — use the fixed Y-m-d H:i:s format above. Values are interpreted as UTC (the application default timezone).

Responses (read)​

FieldFormat
Event start, endUnix timestamp (integer, UTC)
Event timezoneIANA display timezone (e.g. Europe/London) — for presentation only
Cart expires_at, created_atUnix timestamp (integer, UTC)
Discount start, endISO 8601 string (UTC)
Device PIN expires_atUnix timestamp (integer, UTC) or null
created_at, updated_at on most resourcesUnix timestamp (integer, UTC)

When integrating checkout, treat response timestamps as UTC instants. Use the event's timezone field only when displaying dates to customers.

Errors​

Validation and business errors usually return 400, 422, or 409 with:

{
"errors": {
"field_name": ["Human-readable message"]
}
}

Nested fields use dot notation, e.g. customer.email or items.0.ticket_id.

Content type​

Send JSON bodies with:

Content-Type: application/json
Accept: application/json