High-level picture
Prerequisites
- Public key (for creating the checkout session) — see API keys
- Private key (for the post-redirect verification call)
- Webhook endpoint — registered in the dashboard, receives order events (Webhooks overview)
- Callback URL — a page on your storefront where Points redirects the customer after checkout completes
Step 1 — Create the checkout session
When the customer clicks Pay on your checkout page, your backend calls the public checkout endpoint with the Public key in the URL.The Checkout endpoint does not require the
x-api-key header — the Public key in the URL is sufficient. Do not include the Private key on this call.Response
Step 2 — Redirect the customer
Redirect the customer’s browser tocheckout_url. They will:
- Confirm their phone number (one-time OTP if not yet verified).
- See their redeemable Points balance.
- Choose how many points to apply as discount.
- Pay the remaining amount via your configured PSP.
Step 3 — Receive the webhook
As soon as Points settles the checkout, your registered webhook endpoint receives the terminal event. The most common sequence is:| Event | Meaning |
|---|---|
approved | Checkout completed and payment confirmed. Points redeemed + earned. |
captured | Funds captured (if you use an authorize-then-capture PSP). |
cancelled | Customer abandoned the checkout or payment failed. |
Step 4 — Handle the browser redirect
Points redirects the customer’s browser to thecallback_url you supplied. The URL is appended with query parameters identifying the order so your frontend can show the right confirmation page.
Your callback handler should:
- Look up the order in your database by
order_number. - If the webhook hasn’t landed yet, call
GET /v1/orders/{uuid}to confirm state before showing success. - Display the appropriate confirmation (or failure) page.
Step 5 — Fulfilment & shipping updates (optional)
For physical-goods orders, as you fulfil the order you can update the shipping status so Points reflects the right state on the customer’s transaction history:new, license_in_progress, ready_shipping, delivery_is_in_progress, delivered, cancelled.
Each call fires a shipping_status_updated webhook.
Refunds & cancellations
See the dedicated page: Refunds & cancellations.Edge cases
Customer closes browser before redirect
Customer closes browser before redirect
The webhook still fires. Use it as your source of truth. Your callback-handler page should be resilient to a missing query parameter — fall back to querying the order by
order_number.Customer reloads the Points checkout page
Customer reloads the Points checkout page
The session remains valid until it expires or is completed. A stale
checkout_url returns a friendly error page from Points.Webhook arrives before browser redirect
Webhook arrives before browser redirect
Common. Your database should be updated by the webhook handler; the callback page reads from the database, not from query params.
Order amount changes after checkout started
Order amount changes after checkout started
Cancel the existing checkout session (the customer can retry) and create a new one with the updated amount. Do not mutate an already-approved order — refund/re-charge instead.
What’s next
Order lifecycle
Understand state transitions (authorize → capture → refund).
Webhooks overview
Receive and process real-time order events.
Refunds & cancellations
Full and partial refunds, cancellation windows.
Go-live checklist
Everything to verify before production traffic.

