Skip to main contentSkip to main content
Equaticket
Integrations & API

Using the Equaticket Public API

Last updated September 25, 20265 min read
In this article

Using the Equaticket Public API

5 min read · Integrations & API

Using the Equaticket Public API

The Public API lets your own systems create and publish events, read orders and attendees, and manage webhook endpoints. Every plan includes API access, with separate live and test keys.

Get an API key

Owners and admins manage keys at Dashboard > Settings > Developer > API Keys.

  1. The first time, click Accept API Terms. This is a one-time step for your organization.
  2. Click Create API key.
  3. Enter a Key name, tick the scopes you need, and choose a Mode: sk_live_ (live data) or sk_test_ (test data only).
  4. Copy the key. It is shown only once.

You can have up to 10 active keys. Scopes cannot be changed later: create a new key instead. To revoke a key, click Revoke on its row. Recent Activity on the same page shows who created or revoked keys, and when.

Never put a live key in client-side code or a public repository.

Authentication and base URL

Send the key as a Bearer token on every request. All endpoints are under https://equaticket.com/api/v1/.

curl https://equaticket.com/api/v1/events \
  -H "Authorization: Bearer sk_live_..."

Scopes

ScopeAllows
events:readList and get events and ticket types
events:writeCreate, update, publish and cancel events
ticket_types:writeCreate, update and delete ticket types
orders:readList and get orders
attendees:readList attendees (tickets)
webhooks:readList webhook endpoints and their delivery history
webhooks:writeCreate, update and delete webhook endpoints

Test mode

Test keys (sk_test_...) only see test data, which is kept apart from your live data. Your first test key comes with sample data. To start over, click Reset test data on the API Keys page. Webhook endpoints created with a test key only receive test events.

Rate limits

Limits apply per API key, per minute:

PlanRequests per minute
Free60
Starter100
Growth300
Pro600

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Over the limit you get 429 with the code rate_limited and a Retry-After header (in seconds).

Pagination

List endpoints return newest first and use a cursor:

GET /api/v1/orders?limit=50
GET /api/v1/orders?limit=50&cursor=NEXT_CURSOR
{
  "livemode": true,
  "data": [],
  "has_more": true,
  "next_cursor": "..."
}

Stop when has_more is false.

Idempotency

POST requests accept an optional Idempotency-Key header (up to 256 characters; a UUID works well). Retrying with the same key and body within 24 hours returns the original response with Idempotent-Replayed: true, so a retry after a timeout never creates a duplicate.

Request IDs

Every response has an X-Request-Id header. Include it when you contact support about an API call.

Errors

Errors look like this:

{
  "error": {
    "code": "validation_error",
    "message": "Human-readable description",
    "request_id": "req_...",
    "param": "starts_at",
    "doc_url": "https://equaticket.com/ticketing-api/errors#validation_error"
  }
}

Branch on error.code, never on error.message. Common codes:

HTTPCodeMeaning
400invalid_jsonThe body is not valid JSON
400invalid_param / missing_paramA query parameter is malformed or missing (error.param names it)
401missing_authNo Authorization: Bearer header
401invalid_api_keyThe key is malformed or unknown
401key_revokedThe key has been revoked
403insufficient_scopeThe key lacks the scope (error.required names it)
404not_foundNot found, or not in your organization
409duplicate_slugAn event with that slug already exists
409event_not_editableThe event is cancelled, completed or archived
422validation_errorThe body failed validation
422missing_venue_contactPublish blocked: no venue_contact_email
422unsupported_currencyPublish blocked: your Stripe account does not support the currency
429rate_limitedToo many requests
500insert_failed / query_error / update_failedServer error, safe to retry

The full error reference lists every code.

Common workflows

Create and publish an event

# 1. Create the event
curl -X POST https://equaticket.com/api/v1/events \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Spring Workshop",
    "slug": "spring-workshop-2026",
    "timezone": "America/Chicago",
    "starts_at": "2026-11-15T18:00:00Z",
    "currency": "usd",
    "venue_contact_email": "hello@example.com"
  }'

# 2. Add a ticket type
curl -X POST https://equaticket.com/api/v1/events/EVENT_ID/ticket-types \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "General Admission", "price": 2500, "currency": "usd", "quantity_total": 100 }'

# 3. Publish
curl -X POST https://equaticket.com/api/v1/events/EVENT_ID/publish \
  -H "Authorization: Bearer sk_live_..."

venue_contact_email is required to publish. It is shown to attendees and is the reply-to address on their ticket emails. To publish paid events, your Stripe account must be connected and must support the event's currency.

Read orders and attendees

GET /api/v1/orders
GET /api/v1/orders?status=confirmed
GET /api/v1/orders?buyer_email=jane@example.com
GET /api/v1/events/EVENT_ID/orders
GET /api/v1/attendees
GET /api/v1/events/EVENT_ID/attendees?checked_in=true

Public event listing (no key needed)

GET /api/v1/public/events?org_slug=YOUR_ORG_SLUG

Returns your published public events, so you can build an events page without exposing a key.

Webhooks

To get notified instead of polling, set up Outbound Webhooks. They are available on every plan, from the dashboard or through /api/v1/webhooks with the webhooks:write scope.

Still need help? Contact support and include the X-Request-Id.

Still need help?

If this article didn't answer your question, our support team is here.

Contact Support

Was this article helpful?

Still need help? Contact Support

Using the Equaticket Public API — Equaticket Organizer Help