Search the academy
Search articles by title or content
Browse for event organizers
Get started with the Zunaro API
Create an API key in Settings → Developers, make your first authenticated request to https://api.zunaro.ai/v1, and learn the list envelope, problem+json errors, and rate limits.
The Zunaro API lets your own code work with the same events, orders, and tickets you manage in the dashboard. The base URL is https://api.zunaro.ai/v1, and every request authenticates with an API key — your organization is resolved from the key itself, so there is no account id to pass.
Create an API key
You need the Admin role (or above). Go to Settings → Developers.
- On the API keys tab, choose Create key.
- Give the key a Name that says what integration it's for, e.g. "CRM sync".
- Under Scopes, tick
read(Read events, performances, orders and tickets) and, if your integration writes,write(Create and update resources). Pick at least one. - Optionally turn on Expire after 90 days — recommended for short-lived integrations. Off means the key never expires.
- Choose Create key, then Copy key.
Your first request
Send the key as a bearer token:
curl https://api.zunaro.ai/v1/events \
-H "Authorization: Bearer zun_live_..."
Lists answer with an envelope:
{
"object": "list",
"data": [ { "id": "84ed3e51-...", "object": "event", "title": "API Demo Night" } ],
"has_more": false
}
To page, pass ?limit= (1–100, default 25) and ?starting_after= set to the id of the last row you already have; repeat while has_more is true. Field names are snake_case, timestamps are ISO 8601, and money is always integer minor units with a _minor suffix (2500 = $25.00).
Errors
Every failure is an RFC 9457 application/problem+json body with type, title, status, and usually detail:
{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "This key is missing the \"write\" scope."
}
- 401 is deliberately generic — it never says whether the key was missing, unknown, revoked, or expired.
- 400 lists every offending body field in
detail, so you can fix them in one round trip. - 404 means the resource id doesn't exist for your organization.
- 409 is a conflict — for example a duplicate event title, or an
Idempotency-Keyreused with a different payload. - 500 carries no internals; quote the
x-request-idresponse header (echoed on every response) to support.
Rate limits
All windows are one minute:
- 600 requests per minute per IP, counted before authentication.
- Per key: 300 reads per minute, and 60 writes per minute.
Exceeding any limit answers 429 with a retry-after: 60 header — wait, then retry.
Ready to write? Continue with Sell tickets with the API, and set up webhooks so your systems hear about sales as they happen.