API

BooTickets exposes a public, read-and-write HTTP API under /public/*. It powers our own event pages and embed widget, and you can call it directly to build a custom integration.

Base URLs

EnvironmentBase URL
Productionhttps://api.bootickets.com
Staginghttps://staging-api.bootickets.com

All public endpoints are prefixed with /public. For example: https://api.bootickets.com/public/events/<event-id>.

Authentication & access

  • No API key is required for public endpoints — they serve publicly available event and checkout data.
  • Responses are JSON unless noted (calendar and wallet endpoints return files).
  • CORS is configured for browser use. If you're calling from a server, no CORS applies.
  • Don't expose anything secret in client code — these endpoints are for public-facing data and the standard checkout flow only.

Key endpoints

Get an event

GET /public/events/{idOrSlug}

Returns the event, its venue, current status (ON_SALE / SOLD_OUT / UPCOMING / CLOSED), currency, pricing flags and organiser summary. Accepts either an event ID or its slug.

List events in a series

GET /public/series/{seriesId}/events

Returns the series and its live events (chronological).

Apply a promo code (preview a discount)

POST /public/events/{eventId}/promo/apply
Content-Type: application/json

{ "code": "EARLY20", "items": { "<tierId>": 2 } }

Validates the code and returns the discount that would apply.

Create an order (start checkout)

POST /public/orders/payment/initiate
Content-Type: application/json

{
  "eventId": "<event-id>",
  "items": { "<tierId>": 2 },
  "buyer": { "name": "Jane Doe", "email": "jane@example.com" },
  "promoCode": "EARLY20",
  "attribution": { "utmSource": "newsletter", "utmMedium": "email" }
}

Returns an orderId, the payment provider, and the provider-specific fields your client needs to complete payment (e.g. a Stripe client secret, or a SumUp checkout ID). Free orders come back already PAID.

Confirm a payment

POST /public/orders/payment/confirm
Content-Type: application/json

{ "orderId": "<order-id>", "paymentIntentId": "..." }   // Stripe
{ "orderId": "<order-id>", "checkoutId": "..." }         // SumUp

Marks the order paid (or failed) and issues tickets.

Start a donation

POST /public/donations/payment/initiate
Content-Type: application/json

{
  "customerId": "<organiser-id>",
  "amountCents": 1000,
  "currency": "GBP",
  "buyer": { "name": "Jane Doe", "email": "jane@example.com" }
}

Get a paid order (ticket page data)

GET /public/orders/{orderId}

Only returns data for paid orders. Also available: GET /public/orders/{orderId}/calendar.ics for an iCalendar file.

Organiser profile

GET /public/o/{customerId}

Error responses

Errors return a non-2xx status and a JSON body like:

{ "error": "EVENT_NOT_ON_SALE", "message": "This event is not currently on sale." }

Common statuses: 400 (bad request), 404 (not found), 409 (conflict — e.g. sold out or not on sale), 500 (server error).

Most integrations don't need the API. To sell tickets from your own site, the Buy ticket button handles the whole checkout for you. Use the API when you need custom behaviour the widget doesn't cover.