GET /api/v1/cinema
Your cinema
Name, currency, time zone, whether online sales are on, and open locations.
Response
{ "data": { "name": "Silverbird Cinemas", "handle": "silverbird", "currency": "NGN", "time_zone": "Africa/Lagos", "live": true, "online_sales": true,
"locations": [{ "id": "loc_…", "name": "Ikeja", "city": "Lagos", "address": "…", "phone": "…" }] } }GET /api/v1/films
Films
Films showing now or coming soon.
| status | now_showing or coming_soon |
Response
{ "data": [{ "id": "flm_…", "title": "…", "runtime_minutes": 112, "rating": "12A", "poster_url": "https://…", "status": "now_showing" }] }GET /api/v1/screenings
Showtimes
On-sale screenings between two dates in the cinema's time zone, with seats left. Up to 31 days; defaults to the next 7.
| from | First date, like 2026-11-07 |
| to | Last date, inclusive |
| film_id | Only this film |
| location_id | Only this location |
Response
{ "data": [{ "id": "scn_…", "film_id": "flm_…", "film_title": "…", "starts_at": "2026-11-07T17:00:00.000Z", "film_starts_at": "…", "ends_at": "…",
"format": "2D", "location": { "id": "loc_…", "name": "Ikeja" }, "screen": { "id": "scr_…", "name": "Screen 1", "features": [] },
"seating": "assigned", "capacity": 120, "available": 87 }] }GET /api/v1/screenings/{id}
One showtime, with prices and seats
Ticket types and prices (by seat category), and for assigned seating the seat plan with each seat's status. Starts_at is when doors open.
Response
{ "data": { "id": "scn_…", "status": "on_sale", "currency": "NGN",
"ticket_types": [{ "id": "tt_…", "name": "Adult", "prices": { "standard": 500000, "premium": 750000 } }],
"seats": [{ "row": "A", "cells": [{ "type": "seat", "id": "A1", "category": "standard", "status": "available" }, { "type": "gap" }] }] } }POST /api/v1/orders
Book tickets
Holds the seats for 10 minutes and starts a payment. Send the customer to checkout_url. After paying they come back to return_url, the order becomes paid and the e-tickets are emailed to them. Seats someone else took return 409 with the seat ids.
Request body
{ "screening_id": "scn_…",
"tickets": [{ "ticket_type_id": "tt_…", "seat_id": "F7" }, { "ticket_type_id": "tt_…", "seat_id": "F8" }],
"customer": { "name": "Ada Okafor", "email": "ada@example.com", "phone": "+2348031234567" },
"promo_code": "STUDENT10",
"return_url": "https://your-site.com/booking/done" }Response
{ "data": { "id": "ord_…", "reference": "R7K3M9Q", "status": "pending", "total": 1000000, "currency": "NGN",
"expires_at": "…", "checkout_url": "https://…", "tickets": [{ "seat_id": "F7", "status": "held", "code": null }] } }GET /api/v1/orders/{id}
Check an order
Status is pending, paid, expired, refund_due, partially_refunded or refunded. Ticket codes appear once paid.
Response
{ "data": { "id": "ord_…", "status": "paid", "tickets": [{ "seat_id": "F7", "type": "Adult", "status": "valid", "code": "TQ4W-8XKM-2N" }] } }