Your site. Our box office.

One call hands the buyer to us for stock, payment and entry. The pages, the brand and the customer stay on your side.

Free test keys. Nothing to pay until you sell.

POST /v1/checkout_sessions

{
  "event": "evt_harbour_nights",
  "quantity": 2,
  "success_url": "https://yoursite.com/thanks"
}

201 Created

{
  "id": "cs_4d8e2a6b1c9f7e30",
  "status": "open",
  "held_until": "2026-11-02T19:13:40+00:00",
  "url": "https://pay.eventtickets.dev/c/cs_4d8e2a6b1c9f7e30"
}

Follow one ticket through the API.

Two calls from you and a signed webhook from us at every step that matters. Tap through a ticket's life to see exactly what crosses the wire.

You call

POST /v1/checkout_sessions

Start a checkout

Send the buyer to the url. Their tickets are held until held_until while they pay, so nothing sells twice.

{
  "id": "cs_4d8e2a6b1c9f7e30",
  "object": "checkout_session",
  "status": "open",
  "quantity": 2,
  "tier_label": "Early bird",
  "unit_amount": 800,
  "held_until": "2026-11-02T19:13:40+00:00",
  "metadata": { "customer_id": "4821" },
  "url": "https://pay.eventtickets.dev/c/cs_4d8e2a6b1c9f7e30"
}

No surprises in production.

Eight rules apply to every request. Read them once and the rest of the API behaves the way you'd guess.

Read the API basics
means £12.00. Every amount is a whole number in pence, so there is no rounding to get wrong.
1200
Send an Idempotency-Key and any retry within a day replays the first answer instead of doing the work twice.
24 hours
If your server is down, we retry a webhook eight times over about a day and a half. Every attempt is in the delivery log.
8 tries
requests a minute on a live key, 100 on a test key. Every response says how many you have left.
300
400 Bad Request

{
  "error": {
    "code": "invalid_request",
    "message": "Choose between 1 and 10 tickets.",
    "param": "quantity"
  }
}

Errors written for people.

Every error has a short code for your program and a message you can show a buyer as it is. When one field is the problem, param names it.

Keys that only do their job.

Build against a sk_test_ key, then swap in sk_live_. Give each key only what it needs: a site that just sells tickets needs events:read and checkout:write.

Start with the guides.

Short pages with code you can paste.

Build it in test mode.

Create an account, take a test key and sell your first ticket. Swap to a live key when you're ready.