/v1 · REST

Build on the rails
we sell on.

REST API, bearer-token auth, signed webhooks. JSON in and out, amounts in integer cents (ZAR), ISO-8601 timestamps with offset.

  • No booking fees for buyers
  • Paid 2 working days after each sale
  • Secure card payments
  • Full card numbers never reach us
  • Guest checkout, no account needed
  • Tickets held 30 minutes at checkout
  • Refunds under SA consumer law
  • Privacy tools in your account
  • Built in South Africa

Endpoints · /v1

The full surface, no waitlist.

Every endpoint below is on any token with the scope in brackets. No tiers, no waitlist. Creating or editing events is not in the API: it is read-only for events, and a token covers one organisation.

GET/v1/pingCheck your token (events:read)
GET/v1/eventsList events (events:read)
GET/v1/events/{id}Read one event (events:read)
GET/v1/events/{id}/availabilityCapacity by tier (events:read)
GET/v1/events/{id}/tiersList tiers (events:read)
POST/v1/checkout-sessionsReserve tickets (tickets:issue)
POST/v1/transactions/verify/{reference}Finish a checkout (tickets:issue)
GET/v1/orders/{id}Read an order (tickets:read)
GET/v1/tickets/{token}Read a ticket (tickets:read)
GET/v1/resale/listingsResale listings, empty while resale is switched off (resale:read)
GET/v1/webhooksList subscriptions (webhooks:manage)
POST/v1/webhooksSubscribe to events (webhooks:manage)
GET/v1/webhooks/{id}Read a subscription (webhooks:manage)
PATCH/v1/webhooks/{id}Update or rotate the secret (webhooks:manage)
DELETE/v1/webhooks/{id}Delete a subscription (webhooks:manage)

Authentication

curl https://eventu.co.za/v1/events \
  -H "Authorization: Bearer evu_live_…" \
  -H "Accept: application/json"

Tokens are scoped to a single organisation and to the scopes you pick. Create and revoke them from the dashboard.

Rate limits

Default per token120 / min
Highest you can set10 000 / min
Over the limit429 + Retry-After

Counted per token, per minute. You choose the limit when you create the token. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (unix seconds).

Webhook events

order.paid
order.expired
order.refunded
ticket.checked_in
event.published
campaign.completed
payout.reconciled
resale.listed
resale.sold

resale.listed and resale.sold do not fire while resale is switched off. Each delivery is signed with HMAC-SHA256 over the timestamp and the body, sent as X-Evu-Signature: t=<unix>,v1=<hex>. Check the timestamp is recent (five minutes is a good limit). X-Evu-Delivery is the same on every retry of a delivery, so you can ignore a repeat. A failed delivery is retried up to 8 times over about 11 days, and a subscription is switched off after 20 failures in a row.

Examples · /v1

Three lines, every language.

Same request, three runtimes. Same auth header, same response shape. Bearer token in the header, JSON out, ISO-8601 timestamps, integer cents. Plain HTTP, so no library is needed.

RequestGET /v1/events
curl https://eventu.co.za/v1/events \
  -H "Authorization: Bearer evu_live_…" \
  -H "Accept: application/json"
Response · 200 OKapplication/json
{
  "data": [
    {
      "id": "3f6c0b1e-8a52-4c1d-9b7e-2d5a41c0f7a9",
      "slug": "friday-night-live",
      "title": "Friday Night Live",
      "status": "on_sale",
      "start_at": "2026-03-14T17:00:00+00:00",
      "end_at": "2026-03-14T22:00:00+00:00",
      "timezone": "Africa/Johannesburg",
      "visibility": "public",
      "capacity": 400,
      "published_at": "2026-02-01T08:30:00+00:00",
      "created_at": "2026-01-20T09:12:00+00:00",
      "updated_at": "2026-02-01T08:30:00+00:00"
    }
  ],
  "pagination": { "limit": 20, "offset": 0, "total": 1 }
}

Build on EventU

A token, a curl, a callback. Ship by Friday.

Privacy tools in your accountSecure card paymentsCPA-aligned refundsBuilt in South Africa