Skip to content

Events and ticketing ​

Use Events to put shows, services, matches and meetups in your app, sell tickets, give every guest their own ticket, and check people in at the door. Your organizers get tools to create and publish events, set ticket types and sessions, add coupon codes, manage attendees and read orders. Buyers pay with M-Pesa or card through Payd. Free events skip payment.

How the pieces fit ​

ResourceWhat it is
EventA show, service, match or meetup with dates, a venue and a status: draft, pending review or active.
Ticket typeOne kind of entry, such as Early Bird or VIP, with a price and stock. It can be fixed price or name your price, and can allow a deposit with pay later.
SlotA session or showtime inside an event, with its own capacity.
Data fieldAn extra question for each guest, such as T-shirt size.
CouponA code that takes money off one or more ticket types.
OrderOne buyer's purchase of one or more ticket types. It has a code like ABCD-EFGH and stays pending until paid.
AttendeeA person who holds a ticket in an order. Each attendee has a code, a QR check-in code and an optional wallet pass.
ManagerA person you let help with one event, with a role such as check_in or finance.

A client uses them in this order:

  1. An organizer creates an event with ticket types, adds slots, data fields and coupons if needed, and publishes it. On a tenant with several users, publishing sends the event to a tenant admin for review first.
  2. Your app lists events and shows ticket types.
  3. A buyer places an order. The response holds a checkout_url. The buyer pays there, and a callback from Payd marks the order paid. Free orders skip this step. See Payments.
  4. Each attendee gets a ticket by email, SMS or WhatsApp. The ticket page can also offer a wallet pass.
  5. At the door, staff scan the QR code to check people in.
  6. After the event, the organizer reads orders, payments and settlements.

What you can call today ​

Browse events (no sign-in) ​

MethodPathWhat it does
GET/v1/eventsList the tenant's events, newest first, 20 to a page.
GET/v1/events/{event}Get one event with its ticket types, slots and images.
GET/v1/public/eventsBrowse upcoming events. Filter by category, type, status, community_slug or search.
GET/v1/public/events/{slug}Get an event by its slug for a public event page.
GET/v1/public/events/categories/topList the categories with the most events.
GET/v1/events/{event}/ticketsList the ticket types for an event.
GET/v1/events/{event}/slotsList the sessions for an event.
GET/v1/events/{event}/social-proofGet tickets sold, recent buyers and a sample of people going.

Sell tickets (no sign-in) ​

MethodPathWhat it does
GET/v1/events/{event}/dataList the extra questions to ask each guest.
GET/v1/events/{event}/book/payloadGet the booking form fields for a ticket type.
POST/v1/ordersCreate an order for one or more ticket types. Returns the order and a checkout_url.
POST/v1/events/{event}/bookBook one ticket type. Returns the booking and a payment URL.
GET/v1/orders/{id}Get an order by id or code. A paid order shows its tickets and attendees.
POST/v1/orders/{id}/attendeesName the attendees on an order, or send them an invite.
POST/v1/orders/{code}/pay-balanceStart a checkout for the balance of an order paid by deposit.
POST/v1/coupons/validateCheck a coupon code for an event.
GET/v1/events/{event}/coupon/availabilityCheck that a coupon works for a ticket type.
GET/v1/events/{event}/coupon/discountGet the discount a coupon gives for a ticket type and quantity.

Tickets and invites ​

MethodPathWhat it does
GET/v1/public/tickets/{attendeeCode}Get a ticket page from an attendee code (no sign-in).
GET/v1/public/tickets/{attendeeCode}/walletRedirect to Apple Wallet or Google Wallet, or to the ticket page (no sign-in).
GET/v1/invites/{token}Look up a ticket invite before accepting it (no sign-in).
POST/v1/invites/{token}/acceptAccept an invite with name, email and phone (no sign-in).
GET/v1/ticketsList the signed-in user's tickets.
GET/v1/tickets/{id}Get one ticket for the signed-in user.
POST/v1/tickets/{id}/inviteInvite someone to a place on a group ticket.
GET/v1/attendee/dashboardGet counts of upcoming and past events and tickets for the signed-in user.

Organizer: events and setup ​

MethodPathWhat it does
GET, POST/v1/organizer/eventsList your events with a summary, or create one.
GET, PUT, DELETE/v1/organizer/events/{event}Read, update or delete a draft event.
POST/v1/organizer/events/{event}/publishPublish a draft event.
POST/v1/organizer/events/{event}/duplicateCopy an event to new dates.
GET, POST/v1/organizer/events/{event}/ticketsList or create ticket types.
PUT/v1/organizer/events/{event}/tickets/{ticket}Update a ticket type.
POST/v1/organizer/events/{event}/tickets/{ticket}/sold-outTurn sold out on or off for a ticket type.
GET, POST/v1/organizer/events/{event}/slotsList or create sessions.
GET, POST/v1/organizer/events/{event}/couponsList coupons with redemption counts, or create one.
GET, POST/v1/organizer/events/{event}/data-fieldsList or create extra guest questions.
GET, POST/v1/organizer/events/{event}/managersList or add people who help run the event.

Organizer: guests, door and orders ​

MethodPathWhat it does
GET/v1/organizer/events/{event}/attendeesList attendees.
GET/v1/organizer/events/{event}/attendees/exportExport the attendee list.
POST/v1/organizer/events/{event}/attendees/{attendee}/approveApprove an attendee on an event that needs approval.
POST/v1/organizer/events/{event}/attendees/{attendee}/rejectReject an attendee.
POST/v1/organizer/events/{event}/attendees/{attendee}/resendSend the ticket again.
POST/v1/organizer/events/{event}/check-inCheck in a guest from a scanned QR code or a typed ticket code.
GET/v1/organizer/events/{event}/check-in/statsGet check-in counts.
POST/v1/organizer/events/{event}/check-in/{attendeeId}/undoUndo a check-in.
GET/v1/organizer/events/{event}/ordersList orders for an event.
GET/v1/organizer/events/{event}/orders/{order}Get one order.
POST/v1/organizer/events/{event}/orders/{order}/remindRemind a buyer to pay the balance.
POST/v1/organizer/events/{event}/orders/{order}/cancelCancel an order.

Update and delete calls for slots, coupons, data fields and managers, attendee creation, order resend, message blasts to attendees and manager invites are in the API reference. Money calls for events (payments, settlements, payouts and refunds) are on Payments.

Here is a first call. It lists the next five music events:

sh
curl "https://api.vabu.live/v1/public/events?category=music&per_page=5" \
  -H "X-Tenant-Code: your_tenant_code"

Calling these endpoints ​

The browse and sell routes, and the ticket and invite routes marked no sign-in, take only X-Tenant-Code. GET /v1/events and GET /v1/events/{event} also accept a secret, restricted (events:read) or publishable key. Every other route takes a signed-in user token (Authorization: Bearer ..., a Vabu ID or Payd ID token) plus X-Tenant-Code, in live mode. Organizer routes also accept an optional X-Organization-Id header to pick which organization you act for. Test keys and publishable keys are refused on these routes today, apart from the two event reads. See which credentials each endpoint takes.

Writes need the Owner, Admin or Editor role in the organization. Check-in, attendee and order calls also follow the event manager's role. For paging and error shapes, see pagination and errors.

Events you can subscribe to ​

EventWhen it fires
events.order.paidAn order is fully paid. A deposit order fires it when the last balance payment lands.

See events for the full payload and webhooks for delivery and signatures.

  • Payments for checkout, deposits, refunds and settlements.
  • Promoters for coupon codes you can hand to promoters.
  • Messaging for ticket delivery and blasts to attendees.
  • Fanbases to reward people who come.

Vabu OS by Vabu Group