API reference
Every booking made through your app, website, WhatsApp or booking page follows the same availability rules. The API is on the Business and Pro plans.
Getting started
Create a key in your console under API and widget, then send it as a bearer token. All requests and responses are JSON; times are Lagos time (Y-m-d H:i:s); money is in naira.
Errors and limits
Errors use HTTP status codes with a body like {"error": {"code": "taken", "message": "Sorry, that time was just taken."}}. Messages are safe to show to customers.
Creating bookings
Always send service_id, name, phone (the customer's WhatsApp number) and email; notes is optional. Bookings without an email are refused with error code email. Then, by type:
start "2026-11-14 11:30", optional resource_id (else any free one)start_date, end_date (check-out), optional resource_idsession_id, seats, tier_id if the date has classes or ticket types, guests (array of names) when requiredpickup, dropoff, optional when, distance_km, resource_id (assign straight away)By default you collect payment yourself and the booking is confirmed. Send "collect_payment": true to hold it and get a Paystack link for the deposit in payment.url (with return_url to come back to your app).
Business
/businessYour business profile, hours and booking link.Catalogue
/servicesActive services. Add ?all=1 to include switched-off ones. Each has a type: slot, range, capacity or dispatch./services/{id}One service./resourcesStaff, rooms, vehicles and other units.Inventory push
/servicesCreate or update a service. Match on id or your own external_id./resourcesCreate or update staff, vehicles, rooms or aircraft by external_id; optional service_ids./sessionsCreate or update a flight, trip, event or class date by external_id: service_id or service_external_id, starts_at, ends_at or duration_min, seats, code, origin, destination, venue, status, and tiers [{external_id, name, price, seats}]./sessions/bulkUp to 500 sessions in one call: {"sessions": [...]}. Each result says ok or why not./sessions/{id} or /sessions/ext:{external_id}Close a date to new bookings.Availability
/availability?service_id=12Slot services: open dates for the next 14 days (&days= up to 60)./availability?service_id=12&date=2026-11-14Slot services: free start times that day, with the resources free at each time. Optional &resource_id=./availability?service_id=20&start_date=2026-12-20&end_date=2026-12-23Range services: free units and the price for those dates./sessions?service_id=30Capacity services (flights, trips, events, classes): upcoming dates with seats left, fare classes or ticket types./quotesPrice and deposit for a request before booking. Same body as creating a booking.Bookings
/bookingsCreate a booking. Send Idempotency-Key to retry safely./bookingsList. Filters: status, service_id, resource_id, session_id, type, customer_phone, from, to, updated_since, limit, offset./bookings/{ref}One booking./bookings/{ref}/rescheduleMove it: start (slot), start_date and end_date (range) or when (dispatch)./bookings/{ref}/cancelCancel, with an optional reason shown to the customer./bookings/{ref}/statusChange status: confirmed, completed, no_show, in_progress, assigned (with resource_id), requested./bookings/{ref}/paymentsRecord money you collected yourself: amount, reference./bookings/{ref}/payment-linkGet a Paystack checkout link for what is still owed.Customers and reviews
/customers?phone=0803...Customers, optionally by phone./reviewsPublished reviews and the average rating.Webhooks
/webhooksYour webhooks and the event names./webhooksAdd one: url, events (array, or ["*"]). Returns the signing secret./webhooks/{id}Remove one.Connect your own system
For airlines, bus operators, ride and delivery apps, hotels and anyone whose own system must stay in charge.
- Push your inventory with the endpoints under Inventory push, using your own IDs as
external_id. Update seats and prices whenever they change. - Confirm every booking. In the console (API and widget) set your confirm URL and switch it on. Before any booking from the page, WhatsApp or the API is saved, we POST it to you, signed like our webhooks. Reply within 8 seconds.
- Hear about changes with webhooks, and push driver assignment or status back with
POST /bookings/{ref}/status(you can useresource_external_id).
Your reference is stored as external_ref on the booking and you can filter with GET /bookings?external_ref=.
Webhook events
We POST JSON to your URL: {"id", "event", "created_at", "data": {"booking": {...}}}. Check the signature: X-Bukam-Signature: sha256=HMAC_SHA256(timestamp + "." + body, secret) with X-Bukam-Timestamp. Reply with any 2xx; failures retry after 1, 5, 30 minutes, 2 and 12 hours.
Website widget
No API key needed. One line adds a floating Book Now button that opens your booking page in a sheet:
Options: data-mode="inline" with data-target="#book" to embed the page, data-label, data-color, data-service to preselect. Any element with data-bukam-open (or data-bukam-open="12" for a service) opens it too, and BukamWidget.open() works from your own code.