Partner API key required (sk_test_... or sk_live_...).
You create redemptions and subscriptions for your customers, redirect them to hosted checkout,
and receive webhooks when events complete.Identifiers#
| Field | Your use |
|---|
reference | Primary ID — use for retrieve, cancel, and webhook correlation (SUB- … or your own) |
On create you receive reference + authorization_url. Save reference in your system.Important: Use reference for all API calls (retrieve, cancel, webhook correlation).
Redemptions#
One-off voucher redemption for a customer.POST /redemption-intents → redirect to authorization_url → webhook: redemption-intent.success
Subscriptions#
Recurring voucher top-ups. You create the subscription; a reseller bills the customer each cycle;
the platform auto-redeems and notifies you via webhook.POST /subscriptions → customer checkout → webhooks per cycle → GET /subscriptions/{reference}
Subscription flow#
1.
Create — subscription starts as pending, current_cycle: 0. Response includes
authorization_url and reference.
2.
Checkout — redirect the customer to authorization_url. In test, the page includes a
simulator to activate cycles without a live reseller. In live, the customer picks a reseller
who handles billing from that point.
3.
Cycles — each successful billing cycle triggers a webhook:First cycle: subscription.activated
Renewals: subscription.renewed
Final cycle (when total_cycles is set): subscription.completed
4.
Monitor — poll or rely on webhooks; GET /subscriptions/{reference} returns full state.
Subscription statuses#
| Status | Meaning |
|---|
pending | Created, no successful cycle yet |
active | At least one cycle redeemed |
canceled | Canceled. Terminal. |
completed | All cycles processed. Terminal. |
Cancellation#
| Situation | What happens |
|---|
| Test environment, or no reseller assigned yet | Immediate cancel → subscription.cancelled webhook |
| Live + reseller assigned | Cancel request sent to reseller → you receive subscription.cancelled when they confirm |
Important: In live with an assigned reseller, cancel is asynchronous. A 200 from the cancel endpoint means the request was accepted — wait for the subscription.cancelled webhook before treating the subscription as canceled.
You do not need to call any reseller API — cancellation on their side is handled automatically
after your cancel request.Webhooks#
Configure test and live webhook URLs in the partner dashboard.Important: Always verify webhook signatures before processing events.
Idempotency#
Important: Send idempotency_key on create requests. Retries with the same key return the original resource (scoped to your partner account + environment).
Errors#
error_code | HTTP | When |
|---|
subscription_already_completed | 422 | Canceling a completed subscription |
reseller_cancellation_unavailable | 422 | Live cancel requested but reseller has no webhook URL |
Validation errors return 422 with an errors object (duplicate reference, invalid fields, etc.).Setup#
Modified at 2026-07-21 14:34:14