Appearance
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
| Resource | What it is |
|---|---|
| Event | A show, service, match or meetup with dates, a venue and a status: draft, pending review or active. |
| Ticket type | One 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. |
| Slot | A session or showtime inside an event, with its own capacity. |
| Data field | An extra question for each guest, such as T-shirt size. |
| Coupon | A code that takes money off one or more ticket types. |
| Order | One buyer's purchase of one or more ticket types. It has a code like ABCD-EFGH and stays pending until paid. |
| Attendee | A person who holds a ticket in an order. Each attendee has a code, a QR check-in code and an optional wallet pass. |
| Manager | A person you let help with one event, with a role such as check_in or finance. |
A client uses them in this order:
- 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.
- Your app lists events and shows ticket types.
- A buyer places an order. The response holds a
checkout_url. The buyer pays there, and a callback from Payd marks the orderpaid. Free orders skip this step. See Payments. - Each attendee gets a ticket by email, SMS or WhatsApp. The ticket page can also offer a wallet pass.
- At the door, staff scan the QR code to check people in.
- After the event, the organizer reads orders, payments and settlements.
What you can call today
Browse events (no sign-in)
| Method | Path | What it does |
|---|---|---|
| GET | /v1/events | List 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/events | Browse 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/top | List the categories with the most events. |
| GET | /v1/events/{event}/tickets | List the ticket types for an event. |
| GET | /v1/events/{event}/slots | List the sessions for an event. |
| GET | /v1/events/{event}/social-proof | Get tickets sold, recent buyers and a sample of people going. |
Sell tickets (no sign-in)
| Method | Path | What it does |
|---|---|---|
| GET | /v1/events/{event}/data | List the extra questions to ask each guest. |
| GET | /v1/events/{event}/book/payload | Get the booking form fields for a ticket type. |
| POST | /v1/orders | Create an order for one or more ticket types. Returns the order and a checkout_url. |
| POST | /v1/events/{event}/book | Book 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}/attendees | Name the attendees on an order, or send them an invite. |
| POST | /v1/orders/{code}/pay-balance | Start a checkout for the balance of an order paid by deposit. |
| POST | /v1/coupons/validate | Check a coupon code for an event. |
| GET | /v1/events/{event}/coupon/availability | Check that a coupon works for a ticket type. |
| GET | /v1/events/{event}/coupon/discount | Get the discount a coupon gives for a ticket type and quantity. |
Tickets and invites
| Method | Path | What it does |
|---|---|---|
| GET | /v1/public/tickets/{attendeeCode} | Get a ticket page from an attendee code (no sign-in). |
| GET | /v1/public/tickets/{attendeeCode}/wallet | Redirect 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}/accept | Accept an invite with name, email and phone (no sign-in). |
| GET | /v1/tickets | List the signed-in user's tickets. |
| GET | /v1/tickets/{id} | Get one ticket for the signed-in user. |
| POST | /v1/tickets/{id}/invite | Invite someone to a place on a group ticket. |
| GET | /v1/attendee/dashboard | Get counts of upcoming and past events and tickets for the signed-in user. |
Organizer: events and setup
| Method | Path | What it does |
|---|---|---|
| GET, POST | /v1/organizer/events | List 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}/publish | Publish a draft event. |
| POST | /v1/organizer/events/{event}/duplicate | Copy an event to new dates. |
| GET, POST | /v1/organizer/events/{event}/tickets | List or create ticket types. |
| PUT | /v1/organizer/events/{event}/tickets/{ticket} | Update a ticket type. |
| POST | /v1/organizer/events/{event}/tickets/{ticket}/sold-out | Turn sold out on or off for a ticket type. |
| GET, POST | /v1/organizer/events/{event}/slots | List or create sessions. |
| GET, POST | /v1/organizer/events/{event}/coupons | List coupons with redemption counts, or create one. |
| GET, POST | /v1/organizer/events/{event}/data-fields | List or create extra guest questions. |
| GET, POST | /v1/organizer/events/{event}/managers | List or add people who help run the event. |
Organizer: guests, door and orders
| Method | Path | What it does |
|---|---|---|
| GET | /v1/organizer/events/{event}/attendees | List attendees. |
| GET | /v1/organizer/events/{event}/attendees/export | Export the attendee list. |
| POST | /v1/organizer/events/{event}/attendees/{attendee}/approve | Approve an attendee on an event that needs approval. |
| POST | /v1/organizer/events/{event}/attendees/{attendee}/reject | Reject an attendee. |
| POST | /v1/organizer/events/{event}/attendees/{attendee}/resend | Send the ticket again. |
| POST | /v1/organizer/events/{event}/check-in | Check in a guest from a scanned QR code or a typed ticket code. |
| GET | /v1/organizer/events/{event}/check-in/stats | Get check-in counts. |
| POST | /v1/organizer/events/{event}/check-in/{attendeeId}/undo | Undo a check-in. |
| GET | /v1/organizer/events/{event}/orders | List orders for an event. |
| GET | /v1/organizer/events/{event}/orders/{order} | Get one order. |
| POST | /v1/organizer/events/{event}/orders/{order}/remind | Remind a buyer to pay the balance. |
| POST | /v1/organizer/events/{event}/orders/{order}/cancel | Cancel 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
| Event | When it fires |
|---|---|
events.order.paid | An 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.