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 SettingsDevelopers.

  1. On the API keys tab, choose Create key.
  2. Give the key a Name that says what integration it's for, e.g. "CRM sync".
  3. Under Scopes, tick read (Read events, performances, orders and tickets) and, if your integration writes, write (Create and update resources). Pick at least one.
  4. Optionally turn on Expire after 90 days — recommended for short-lived integrations. Off means the key never expires.
  5. 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-Key reused with a different payload.
  • 500 carries no internals; quote the x-request-id response 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.