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