Skip to main content
You list the experiences Platnova sells, buy tickets for your guest, and send them a single-use link that shows the tickets. Each order is paid from your NGN business wallet. If tickets can’t be issued, or the organiser cancels the experience, the money goes back to your wallet automatically. Experiences must be enabled for your business. Until they are, every route answers 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

  1. List experiences with GET /v1/partner/experiences. Each tier has a price per ticket, in NGN, including our fee.
  2. Buy with POST /v1/partner/experiences/orders. Your wallet is debited at once and the answer is 202.
  3. Deliver. When the tickets are issued you receive experience.order.ready with 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.
  • phone is optional. Promo codes are not accepted (422 promo_not_supported).
  • Sending the same request again with the same partner_reference returns the same order. The same reference with anything different, the guest included, is 409 partner_reference_reused.
The answer: 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 experience.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.
Neither the API nor any webhook ever carries a ticket code.

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 to experience.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.