Event data. One API.
Events, observed pricing and calendars for your applications.
https://data.xtrada.dev/v1Try the API
GETOne request, sent through the Xtrada documentation server.
curl --request GET 'https://data.xtrada.dev/v1/events?limit=5' \ --header 'Authorization: Bearer YOUR_SERVER_API_KEY' \ --header 'Accept: application/json'
Response
Enter your key and send a request. The real status, headers and JSON will appear here.
API endpoints
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /v1/events | Search and browse events |
| GET | /v1/events/{id} | Event metadata and reported metrics |
| GET | /v1/events/{id}/sales | Individual sales · unavailable |
| GET | /v1/events/{id}/history | Detailed market history · unavailable |
| GET | /v1/events/{id}/price-histogram | Sale price histogram · unavailable |
| GET | /v1/events/{id}/media | Event images and static seatmaps |
| GET | /v1/calendar | Event dates, on-sales and presales |
| GET | /v1/market/hot | Reported hot events |
| GET | /v1/market/movers | Reported market movers |
| GET | /v1/usage | Your client usage today |
| GET | /v1/capabilities | Available data capabilities |
| GET | /v1/events/{id}/observations | Stored event observations |
Authentication
Use Authorization: Bearer with your private Xtrada key. Store it on your server; let your browser call your own backend. Keys have scopes and no expiry unless your owner sets one.
401 means an invalid, expired or disabled key. 403 means a scope or network restriction. Client permissions are checked before cached data is returned.
Limits & shared caching
Keys have a requests-per-minute limit, and all keys of a client share its aggregate allowance. New source collections have a separate client limit, normally ten per minute. A cache HIT does not spend that collection allowance.
Top and movers reuse the same market summary. Equivalent searches share a five-minute cache across clients and instances. Inspect X-Xtrada-Cache: HIT, MISS or STALE. A stored observation read uses ARCHIVE.
429 includes Retry-After. Do not poll the same data on every visitor request. 503 is an unavailable control, source or archive; do not cache it as a successful empty response.
Pagination
Use limit (1–100) and the opaque nextCursor. Reuse the original filters and limit. Live catalogue cursors become invalid when the catalogue changes. Observation cursors anchor the maximum stored version and expire after 24 hours.
Coverage & own history
Observations are captured from successful source collections and retain changed event metadata, reported metrics, prices, image/map links and calendar entries. Their capture time is not a transaction time.
Collection is demand-driven and partial. Individual sales, complete market history and interactive seat availability are not supplied. Detailed sales/history endpoints remain unavailable until verified data supports them.
Errors
The API returns JSON errors with a code, message and request ID. Website pages use a dedicated 404 screen for missing routes and a safe 500 fallback for unexpected failures.
| Status | Meaning | Action |
|---|---|---|
400 | Invalid input or cursor | Check the endpoint parameters. |
401 | Invalid or disabled key | Check the key and optional expiry. |
403 | Scope or network restriction | Review the policy with the owner. |
404 | Resource not found | Check the page or event ID. |
429 | Rate limit exceeded | Respect Retry-After. |
500 | Unexpected server failure | Retry later; keep the request ID. |
502 | API unreachable from the console | Check the backend connection. |
503 | Data, source or access store unavailable | Do not cache the failure as an empty success. |
API reference
GET /v1/events
A nonempty q performs bounded discovery/search against configured sources on cache miss. Equivalent normalized queries share a five-minute cache across clients and instances; page size and cursor reuse the same source results. No source pagination crawl.
Scope: events:read
GET /v1/events/{id}
Event metadata and reported metrics
Scope: events:read
GET /v1/events/{id}/sales
Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series.
Scope: sales:read
GET /v1/events/{id}/history
Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series.
Scope: history:read
GET /v1/events/{id}/price-histogram
Currently returns 503 DATA_UNAVAILABLE. The configured sources do not provide a verified detailed sales ledger or historical series.
Scope: history:read
GET /v1/events/{id}/media
Images and static seatmap URLs from source metadata, refreshed with the live catalogue through a shared five-minute source cache. Supplier media is not rehosted. The Xtrada placeholder is served from the same API project.
Scope: events:read
GET /v1/calendar
Event dates, on-sales and presales
Scope: calendar:read
GET /v1/market/hot
Reported hot events
Scope: market:read
GET /v1/market/movers
Reported market movers
Scope: market:read
GET /v1/usage
Your client usage today
Scope: usage:read
GET /v1/capabilities
Available data capabilities
Scope: events:read
GET /health
Process liveness
GET /contract
OpenAPI contract
GET /v1/events/{id}/observations
Changed event metadata captured from successful shared source collections. Ordered by recorded ID descending, anchored to the first page; cursors expire after 24 hours. Does not reconstruct individual ticket sales or data before capture started.
Scope: history:read