Skip to main contentSkip to main content
Equaticket
integrations

Using the Equaticket Public API

Last updated June 6, 20266 min read
In this article

Using the Equaticket Public API

6 min read · integrations

Using the Equaticket Public API

The Equaticket Public API lets you build custom integrations directly against your event data — create and publish events, read orders and attendees, and manage webhook subscriptions from your own backend. Every plan includes API access with both test and live keys.

Getting your API keys

  1. Go to Dashboard → Settings → Developer → API Keys
  2. Click Create API key
  3. Give the key a name (e.g., "My integration"), choose the scopes you need, and select Test or Live
  4. Copy the key immediately — it is shown only once

Keys starting with sk_live_ are live keys. Keys starting with sk_test_ are test keys. Test keys are completely isolated from your live data.

Authentication

Include your key in the Authorization header on every request:

Authorization: Bearer sk_live_...

All v1 API endpoints are under https://app.equaticket.com/api/v1/.

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

Scopes

Each key is granted one or more scopes at creation. Select only the scopes your integration needs.

ScopeWhat it allows
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 subscriptions and delivery history
webhooks:writeCreate, update, and delete webhook subscriptions

Scopes cannot be changed after a key is created — create a new key if you need a different scope set.

Test mode

Test keys (sk_test_...) work against a fully isolated copy of your data where livemode: false. Test-mode orders and tickets are created with is_test_data: true and are excluded from your dashboard analytics, billing quotas, and email sends.

Use test keys to build and validate your integration before going live. Reset your test data at any time from Dashboard → Settings → Developer → API Keys → Reset test data, or by calling POST /api/settings/api-keys/reset-test-data.

Rate limits

Rate limits are scoped to your subscription tier and apply per API key.

PlanRequests per minute
Free60
Starter100
Growth300
Pro600

When you exceed the rate limit, the API returns 429 Too Many Requests. The error body is:

{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Retry after the window resets.",
    "request_id": "req_..."
  }
}

Pagination

List endpoints use cursor-based pagination on (created_at, id) descending:

# First page
GET /api/v1/orders?limit=50

# Next page — pass the cursor from the previous response
GET /api/v1/orders?limit=50&cursor=eyJjcmVhdGVkX2F0Ii4uLn0=

Response shape:

{
  "livemode": true,
  "data": [...],
  "has_more": true,
  "next_cursor": "eyJjcmVhdGVkX2F0Ii4uLn0="
}

When has_more is false, you have reached the end of the list. next_cursor is null on the last page.

Idempotency

POST endpoints accept an optional Idempotency-Key header (UUID, max 256 chars). If you retry a request with the same key and the same parameters, the original response is returned and the Idempotent-Replayed: true header is set. Keys expire after 24 hours.

curl -X POST https://app.equaticket.com/api/v1/events \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -H "Content-Type: application/json" \
  -d '{ ... }'

Use idempotency keys whenever you need to retry safely after a network timeout without risking duplicate records.

Request IDs

Every response includes an X-Request-Id: req_... header. If you contact support about an API issue, include this value — it allows direct log lookup.

You can pass your own X-Request-Id in the request and it will be echoed back in the response.

Error responses

All errors follow the same envelope:

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

param is present for validation errors and identifies the specific field that failed.

Common error codes:

HTTPCodeMeaning
400validation_errorInvalid or missing request body field
401unauthorizedMissing or invalid API key
403forbiddenKey lacks the required scope
404not_foundResource not found or not owned by your org
409conflictAction not valid for the resource's current state
422unprocessableBusiness rule violation (see message for detail)
429rate_limitedToo many requests — back off and retry
500internal_errorUnexpected server error

Common workflows

Create and publish an event

# 1. Create the event
curl -X POST https://app.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-09-15T18:00:00Z",
    "currency": "usd"
  }'

# 2. Add a ticket type (use the event ID from step 1)
curl -X POST https://app.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://app.equaticket.com/api/v1/events/EVENT_ID/publish \
  -H "Authorization: Bearer sk_live_..."

Stripe Connect must be active on your account before you can publish paid events.

Read orders

# All orders for the org
GET /api/v1/orders

# Orders for a specific event
GET /api/v1/events/EVENT_ID/orders

# Filter by status
GET /api/v1/orders?status=confirmed

# Filter by buyer email (exact match)
GET /api/v1/orders?buyer_email=jane@example.com

Read attendees

# All attendees for the org
GET /api/v1/attendees

# Attendees for a specific event
GET /api/v1/events/EVENT_ID/attendees

# Only checked-in attendees
GET /api/v1/events/EVENT_ID/attendees?checked_in=true

Build a public event listing (no auth)

# All published events for your org — no API key required
GET /api/v1/public/events?org_slug=YOUR_ORG_SLUG

This endpoint returns published events with no authentication, so you can build a public events page without exposing your API key.

Managing your API keys

ActionWhere
List keysDashboard → Settings → Developer → API Keys
Create a keySame page → Create API key
Revoke a keyKey row → Revoke
View recent activitySame page → Activity log

Keep your live keys secure. Never expose them in client-side JavaScript or commit them to a repository. If a key is compromised, revoke it immediately from the dashboard — any in-flight requests using that key will fail after revocation.

Webhooks

On Growth and Pro plans, you can subscribe an HTTPS endpoint to receive real-time notifications when orders are placed, refunded, sold out, or tickets are scanned. See the Outbound Webhooks guide for full setup instructions and signature verification code.

API Terms of Service

Before creating your first API key, your organization's owner or admin must accept the Equaticket API Terms of Service. This is a one-time step. If key creation returns 403 api_terms_required, go to Dashboard → Settings → Developer → API Keys and accept the terms.

Still need help?

Contact support and include your X-Request-Id if you're troubleshooting a specific API call.

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