API reference
Read your events, orders and guest list, and admit people through your own hardware. Available on the Enterprise plan — ₦150,000/mo.
Sell from your own website
One script tag, wherever you want the tickets to appear. Your visitors see prices and availability without leaving your page; payment opens in a new tab so they can see whose site is taking their card. No account or API key needed — the widget is public, like the event page it mirrors.
<script src="https://myticketafrica.com/widget.js"
data-event="your-event-slug"></script>data-event— the slug from your event's URL.data-promoter— optional. Credits a promoter for everything sold through this embed.data-max-width— optional, defaults to 460px.
The frame resizes itself as your tiers change, so it never scrolls inside your page or leaves dead space. It carries no cookies and holds no session.
Authenticating
Issue a key under Settings in your organiser dashboard. It is shown once and stored only as a hash — nobody at MyTicket can read it back to you, so keep it somewhere your team can find it.
curl https://myticketafrica.com/api/v1/events \ -H "Authorization: Bearer myt_live_xxxxxxxxxxxx"
X-API-Key works too. Keys come in two kinds: read only, and read and check in. Issue read-only keys for anything that reports, and keep the write key on the door.
Endpoints
- GET
/api/v1Confirms a key works and names the organisation it belongs to.
- GET
/api/v1/eventsEvery event on the account. Filter with ?status=published.
- GET
/api/v1/events/{id}One event with its tiers, allocation and settled totals.
- GET
/api/v1/events/{id}/attendeesThe guest list: code, holder, tier, seat and check-in state.
- GET
/api/v1/ordersOrders for reconciliation. Filter with ?since=, ?status=, ?event_id=.
- POST
/api/v1/checkinwrite keyAdmit a ticket from your own turnstile or accreditation system.
Shapes
Every success is { data }, and every list adds { page }. Every failure is { error: { code, detail } }, so one handler covers the whole API.
{
"data": [ { "reference": "MYT-8F2K1A", "status": "paid", "totalKobo": 2100000, ... } ],
"page": { "limit": 50, "offset": 0, "total": 214 }
}Money is always in kobo, as an integer — ₦21,000 is 2100000. Nothing on this platform stores a price as a float. Times are ISO 8601 in UTC.
Checking somebody in
This runs the same single-use write the MyTicket scanner does, so a ticket burned at your turnstile is refused at our gate a moment later, and the other way round. A refused ticket is still a 200 — the question was answered. Read admitted, not the status code.
curl -X POST https://myticketafrica.com/api/v1/checkin \
-H "Authorization: Bearer myt_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"eventId":"evt_...","scan":"MYT1.MYT-8F2K1A.sig","gate":"North turnstile"}'
{ "data": { "admitted": false, "result": "duplicate",
"message": "ALREADY USED — Do not admit",
"previousCheckIn": { "at": "2026-08-23T19:04:11Z", "gate": "Main" } } }Limits and manners
- 1,000 requests an hour per key. Over that you get a
429with aRetry-After. - Lists page at 50, up to 100. Use
limitandoffset. - Attendee exports carry no QR signature. Deliberately — nothing the API returns can be used to admit somebody. Only a scan can do that.
- An id from another account reads as 404. Never 403, because whether a record exists elsewhere on MyTicket is not something a key should be able to learn.
- Keys stop working if the plan lapses and start again on upgrade. They are not revoked, just refused, with
plan_required.
Ready to build?
Issue your first key in the organiser dashboard under Settings.
Open the dashboardAPI access is on the Enterprise plan. Building something specific? Email contact@myticketafrica.com