Events & ticketing
Events & ticketing lets you stand up a branded, hosted event page without writing any code. You create an event, define your ticket types, publish it at a public slug, and attendees buy admission over Mobile Money (MTN or Orange) right on the page. Every paid registration issues a ticket code, and sales settle into your Kwik Nkap merchant balance through the same collection engine that backs the public Payments & Collections API.
Events & ticketing is managed in the Kwik Nkap dashboard (new.app.kwiknkap.com) today. It is not yet exposed on the public developer API, which is currently limited to raw Mobile Money collections (POST /v1/payments, GET /v1/payments, GET /v1/payments/{paymentId}/status). Exposing events and ticketing on the public API is planned. The concepts, money movement, and statuses below describe the real product as it works in the dashboard.
What an event page is
An event page is a hosted, public web page that sells admission to a single event. You build it from a TICKET template, attach one or more ticket types, and publish it. Once published, the page is reachable at a public slug:
Code
Attendees never need a Kwik Nkap account. They open the page, pick a ticket type, register, and pay over Mobile Money on the hosted checkout. The event page is bound one-to-one to the event behind it, so everything you sell on the page is a ticket type of that event.
Core concepts
An event page is built from a small set of objects:
| Concept | What it is |
|---|---|
Template (TICKET) | The starting design for a ticketing page. A TICKET template gives you a themed event page bound one-to-one to a single event. Some templates are free; premium templates are purchased once. |
| Event page | The hosted page you create from a TICKET template. It has a public shortCode, a title, a description, and your customized theme and content. |
| Event | The thing the page sells admission to. Each event page is linked one-to-one to its event. |
| Ticket type | A class of ticket on the event (for example General, VIP), each with its own price, capacity, and optional early-bird pricing. |
| Registration | An attendee's claim on a ticket. Created when an attendee registers, carries a ticketCode, and settles SUCCESS or FAILED with the Mobile Money payment. |
Creating an event
You build an event from a TICKET template, then attach the event and its ticket types.
- Create a page from a
TICKETtemplate, choosing a title and description. The page is linked one-to-one to an event. - Create the event, then add one or more ticket types.
- Customize branding: upload images, edit the theme, and edit the page content and sections. You can preview the unpublished page before it goes live.
Free templates are usable immediately. For a premium template, the dashboard quotes an amount and you pay Kwik Nkap for it over Mobile Money (a platform collection from your own line). That purchase unlocks the template so the page can use it.
A template purchase is a separate money flow from your ticket sales. When you buy a premium template, money moves from you to Kwik Nkap. When an attendee registers on a published event page, money moves from the attendee to your merchant balance.
Ticket types
Each ticket type is a class of admission with its own price and capacity. For every ticket type you set:
| Setting | What it controls |
|---|---|
| Price | The ticket's base price in XAF (whole francs). |
| Capacity | The total number of tickets available for that type (totalQuantity). |
| Early-bird | An optional discounted price applied while the early-bird window is open. After the window closes, the base price applies. |
| Required fields | Information collected from each registrant at checkout (for example full name, email, phone). |
Remaining capacity for a ticket type is computed live as totalQuantity minus the registrations that are PENDING or SUCCESS. Both held states count against capacity, so a ticket in flight is not double-sold while the buyer is still approving the prompt. See Registration lifecycle and capacity below.
Publishing
An event page stays private until you publish it. Publishing flips it to published and makes it reachable at its public slug:
Code
Before publishing, you can preview the unpublished page to check theme and content. After publishing, the hosted page is served to attendees with your theme and content merged for their locale, and each ticket type enriched with its live remaining capacity and current price (early-bird or base).
Preview the page before you publish. Confirm your ticket types, prices, early-bird windows, and required fields read correctly, since attendees see exactly what you publish.
The attendee flow
Attendees buy tickets directly on the hosted page. No account is required.
- The attendee opens
events/<shortCode>and browses the available ticket types with their prices and remaining capacity. - The attendee selects a ticket type and fills in any required fields.
- The attendee enters their phone number and picks an operator (
MTNorORANGE), then registers. - A registration is created with status
PENDINGand a generatedticketCode, and a Mobile Money collection is initiated against your business. - The attendee approves the prompt on their phone with their Mobile Money PIN.
- The hosted checkout polls the collection status until it settles. On
SUCCESStheticketCodebecomes a valid ticket; the page may redirect to the success URL you configured.
Code
Registration lifecycle and capacity
Event registration follows the same lifecycle as a Mobile Money collection:
| Registration status | Meaning |
|---|---|
PENDING | Created at registration. Holds ticket capacity while the attendee approves the Mobile Money prompt. The ticketCode exists but is not yet a valid ticket. |
SUCCESS | The collection settled. The ticketCode is now the attendee's valid ticket. |
FAILED | The collection failed. The held capacity is released back to the ticket type. |
The ticketCode is generated the moment the registration is created, but it only becomes a valid, admissible ticket once the collection reaches SUCCESS. Because both PENDING and SUCCESS registrations count against totalQuantity, capacity is protected during the approval window without overselling: a ticket held by an in-flight registration cannot be sold to someone else until that registration either settles SUCCESS (keeping the hold) or fails (releasing it).
A PENDING registration holds a seat. If you reduce a ticket type's capacity, remember that pending registrations still in their approval window are already counted against totalQuantity.
How the money settles
All amounts are in whole XAF francs. When an attendee registers and pays:
- Registering creates a
PENDINGregistration and initiates a Mobile Money collection against your business, the same collection primitive that backs the public Payments & Collections API. - The attendee approves the request-to-pay prompt on their handset (MTN MoMo or Orange Money).
- When the collection settles, a gateway callback flips the registration and its transaction to
SUCCESS(issuing the ticket) orFAILED.
Settled ticket sales accrue to your Kwik Nkap merchant balance net of the application fee, the same way every collection settles. Payouts from that balance are handled by Kwik Nkap's internal disbursement flow, not by this product.
Separately, if you buy a premium template, that runs a platform collection from your own Mobile Money line (money from you to Kwik Nkap) and unlocks the template for your event page. That flow is distinct from your incoming ticket sales.
Viewing registrations and sales
From the event's dashboard you can review:
- Paid registrations (
SUCCESS) and pending registrations (PENDING), each with itsticketCode. - Per-event and per-ticket-type sales.
- Remaining capacity per ticket type, computed live from
PENDINGandSUCCESSregistrations.
This is where you reconcile who has a valid ticket and how many seats remain.
Where this lives
Event pages are built and managed in the dashboard, and the published pages are hosted on pay.kwiknkap.com. They reuse the same Mobile Money collection engine as the public Payments API, but the event, ticket type, and registration objects are not callable through the public developer API today.
Next steps
- Read Storefronts for the online-store sibling of event pages, built from the same hosted-page system.
- See Payment links, the building block that hosted checkout reuses.
- Read Payments & Collections to understand the collection lifecycle that settles every ticket sale.

