Skip to main content
tickts · developers

Build ticketing
into anything.

A complete REST API, real-time signed webhooks, scoped keys and an MCP server. Everything the tickts dashboard does, your code can do too — with zero per-ticket API fees.

your first request
# Introspect your key: who am I, which scopes, what rate limit?
curl https://tickts.co.uk/api/v1/me \
  -H "X-Api-Key: sk_live_your_key"

# → { "organiser": "Bar Sport Cannock",
#     "scopes": ["events:read","orders:read"],
#     "rate_limit": "600/min" }
OpenAPI 3.0.3 Scoped API keys HMAC-signed webhooks MCP server 32 endpoints No API fees
Quick start

Live in three steps

No sales call, no waiting list. Generate a key from your dashboard and make your first call in under a minute.

1

Generate a key

In your dashboard go to Developers and create a key. Pick exactly the scopes it needs — keys are least-privilege by default and fail closed.

2

Authenticate

Send it as X-Api-Key or a Bearer token on every request to /api/v1. All traffic is HTTPS only.

3

Build

List events, issue tickets, pull attendees, subscribe to webhooks. Full interactive docs in the API reference.

What you can build

The whole platform, programmable

32 endpoints across events, orders, attendees, payouts and more — the same engine that powers tickts.co.uk.

Events & ticket types

Create, update, publish, cancel events and manage ticket types, tiers, prices and capacity.

GET · POST · PUT /events

Orders & refunds

List and inspect orders, issue full or partial refunds, resend or cancel individual tickets.

GET /orders · POST /orders/{id}/refund

Attendees & check-in

Pull the live attendee roster, validate and scan tickets at the door from your own app.

GET /events/{id}/attendees · POST /tickets/scan

Comps & guest lists

Issue complimentary tickets programmatically — perfect for guest lists and integrations.

POST /events/{id}/tickets

Season passes

Read season passes and multi-day memberships attached to an event.

GET /events/{id}/season-passes

Payouts & analytics

List Stripe settlements and your balance, and pull sales analytics — data most platforms never expose.

GET /payouts · GET /analytics/summary

Venues & seating

Manage venues, seating layouts, live availability and seat holds for reserved events.

GET /venues · POST /seating/hold

Promos & discounts

Create and manage discount codes and promotions from your own tooling.

GET · POST /promos

Fixtures in bulk

Bulk-create a whole season of fixtures in one call — built for clubs.

POST /fixtures/bulk
Authentication

Scoped keys, least privilege

Every key carries an explicit whitelist of scopes and grants nothing beyond them (a key with no scopes can do nothing — it fails closed). Send it as X-Api-Key or an Authorization: Bearer header.

events:readRead events
events:writeCreate & update events
orders:readRead orders
orders:writeRefund orders
scanValidate & scan tickets (legacy umbrella)
tickets:readValidate ticket codes (read-only)
tickets:scanScan tickets (records entry)
venues:readRead venues
venues:writeCreate venues
fans:readRead fan / customer data
analytics:readRead analytics
promos:readRead promo codes
promos:writeCreate promo codes
webhooks:readList webhook subscriptions
webhooks:writeCreate & delete webhook subscriptions
payouts:readRead payout / settlement history & balance
Webhooks

Real-time, signed, retried

Subscribe an endpoint through the API and tickts pushes events to you the moment they happen — no polling. Every payload is signed with X-Tickts-Signature (HMAC-SHA256) so you can verify it's genuinely from us, and deliveries are queued and retried.

order.created order.refunded ticket.checked_in event.published
subscribe to a webhook
curl -X POST https://tickts.co.uk/api/v1/webhooks \
  -H "X-Api-Key: sk_live_your_key" \
  -d '{ "url": "https://you.com/hook",
       "events": ["order.created"] }'
Examples

Copy, paste, ship

Issue a complimentary ticket to a guest list — in whatever you build with.

curl -X POST https://tickts.co.uk/api/v1/events/759/tickets \
  -H "X-Api-Key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "ticket_type": "GA", "quantity": 2,
       "name": "Guest List", "email": "[email protected]" }'
$res = Http::withHeaders(['X-Api-Key' => 'sk_live_your_key'])
    ->post('https://tickts.co.uk/api/v1/events/759/tickets', [
        'ticket_type' => 'GA',
        'quantity'    => 2,
        'email'       => '[email protected]',
    ]);
import requests
requests.post(
    "https://tickts.co.uk/api/v1/events/759/tickets",
    headers={"X-Api-Key": "sk_live_your_key"},
    json={"ticket_type": "GA", "quantity": 2,
          "email": "[email protected]"},
)
await fetch("https://tickts.co.uk/api/v1/events/759/tickets", {
  method: "POST",
  headers: { "X-Api-Key": "sk_live_your_key",
             "Content-Type": "application/json" },
  body: JSON.stringify({ ticket_type: "GA", quantity: 2,
                         email: "[email protected]" }),
});
AI-native

Connect an AI assistant with MCP

tickts ships a Model Context Protocol server, so assistants like Claude and Cursor can operate your box office directly — check sales, issue comps, answer "how did Friday do?" — using your own scoped key. Your API is ready for the agentic web out of the box.

Endpoint: https://tickts.co.uk/api/mcp

Built right

Details that matter

Versioned (/api/v1), HTTPS-only, rate-limited with clear headers, consistent JSON errors, cursor pagination, and a machine-readable OpenAPI 3.0.3 spec you can generate a client from. Designed with developers (like us) in mind.

Ready when you are.

Generate a scoped key and make your first call in the next minute. No fees, no gatekeeping.