403 partner_product_disabled. If the service is unavailable, routes answer 503 experiences_unavailable.
All amounts are integers in kobo. A partner_reference here is 1 to 64 letters, digits, ., _ or -, and never ..; anything else gets 422 partner_reference_invalid.
How it works
- List experiences with
GET /v1/partner/experiences. Each tier has a price per ticket, in NGN, including our fee. - Buy with
POST /v1/partner/experiences/orders. Your wallet is debited at once and the answer is202. - Deliver. When the tickets are issued you receive
experience.order.readywith a ticket link. Send that link to your guest by email, SMS or your own screen. The guest shows the ticket’s QR code or code at the door.
List experiences
GET /v1/partner/experiences lists experiences on sale, soonest first. GET /v1/partner/experiences/{experience_id} reads one.
A ticket’s price covers what it costs Platnova: the tier’s price at our exchange cost, plus a minimum margin. An order costs unit_amount_minor × quantity. Always buy at that amount; a different amount is refused price_changed.
Buy tickets
POST /v1/partner/experiences/orders (needs an Idempotency-Key)
- One tier per order, 1 to 10 tickets. The tickets are issued in the guest’s name; the organiser sees that name and email on the attendee list.
phoneis optional. Promo codes are not accepted (422promo_not_supported).- Sending the same request again with the same
partner_referencereturns the same order. The same reference with anything different, the guest included, is409partner_reference_reused.
If the last tickets sell out between our check and the issue, you receive
experience.order.failed with the refund instead of ready.
These are refused before any money moves: 422 insufficient_balance, 422 wallet_not_found, 400 experience_order_invalid, 422 experience_id_invalid, and your limits (partner_per_transaction_cap, partner_daily_cap).
The ticket link
Theexperience.order.ready webhook carries:
- Give the link only to your guest. It is the tickets. Do not log it.
- Opening the link is safe: link previews in WhatsApp or Slack don’t use it up. It is used up when your guest taps Show my tickets. The page then shows each ticket’s QR code and code once; the guest should screenshot them.
- It works once, for 72 hours. For a new one, call
POST /v1/partner/experiences/orders/{partner_reference}/ticket-link. Each new link stops the earlier unused ones from working.
Cancel
POST /v1/partner/experiences/orders/{partner_reference}/cancel (needs an Idempotency-Key)
Experiences carry no refund rule of their own, so an order is refunded only when the organiser cancelled the experience, and only if none of its tickets was used at the door. When the organiser cancels, we cancel and refund every order for it ourselves within minutes, and send experience.order.cancelled; this route lets you do it at once.
Read an order
GET /v1/partner/experiences/orders/{partner_reference} returns {partner_reference, experience_id, tier_id, quantity, status, order_id, amount_minor, currency, transaction_ref, refund_minor}.
status is submitting, processing, ready, failed (refunded), cancelled (refunded) or attention (held while we check).
Webhooks
Subscribe toexperience.order.*:
Each order is refunded at most once, however many times an event is delivered. An order in
attention is never refunded automatically. A person checks it and contacts you.
