Skip to main content
Points supports three independent earning channels. You can integrate one, two, or all three — each channel is opt-in and shares the same API key, lock, response shape, and pending-customer handling.

How earning amounts are decided

The merchant controls the points amount, not the API caller. Each channel reads its configured rate from the merchant’s Points dashboard:
  • Order purchase — points scale with total_price and a per-merchant multiplier. Specific products can be assigned a custom point value that overrides the default.
  • Store rating — flat amount per accepted store rating.
  • Product rating — flat amount per accepted product rating.
This means your integration code never decides how many points are awarded. You only tell Points what happened, and Points applies the merchant’s current configuration.
A channel must be enabled and funded in the merchant’s dashboard before its endpoint will award points. If the channel is disabled, the API returns 403.

Shared behavior across all channels

All three earning endpoints share these guarantees so your integration logic stays uniform:
  • Authentication. Same x-api-key header (see API keys).
  • Concurrency. Each merchant is serialized through a distributed lock. Send earning calls sequentially per merchant; retry 429 with a short back-off.
  • Idempotency. Each request carries a merchant-side unique reference (order_number for purchases, review_reference for ratings). Reuse the same reference on retries — duplicates are rejected, not double-awarded.
  • Pending customers. If the customer’s Points account is not yet activated, the response returns a pending_client_activation payload instead of an approved order. The earning is queued and finalized when the customer activates.
  • Response shape. Same data.uuid, data.reference_number, data.order_status, and data.total_points fields. Store the uuid for later lookups, refunds, and reconciliation.

Pending-customer response (any channel)


Order purchase

Award points to a customer for a completed purchase. This is the most common channel — use it when your checkout system runs entirely on your side and you want to reward the payment.

Flow

Required inputs

Example request

Successful response

When to call the API

Call POST /v1/orders/earning only after the purchase is actually confirmed in your own system, such as:
  • successful PSP callback
  • order marked paid in POS
  • COD order marked collected
Do not call it before payment confirmation.

Store rating

Award points when a customer submits a rating for your store overall.

Flow

Required inputs

The merchant configures the points amount in the Points dashboard under Earning methods → Store rating. Your request body does not carry the points value.

Example request

Successful response

When to call the API

Call the endpoint only after the rating is accepted in your own system — i.e. it has passed moderation, spam checks, or any minimum-content rules. Do not call it for drafts, deleted reviews, or duplicate submissions. If the customer edits or deletes their rating later, the awarded points are not automatically reversed. Treat the API call as a one-shot reward at submission time.

Product rating

Award points when a customer submits a rating for a specific product they purchased.

Flow

Required inputs

The merchant configures the points amount in the Points dashboard under Earning methods → Product rating. Your request body does not carry the points value.

Example request

Successful response

When to call the API

Call the endpoint only after the rating is accepted in your own system — i.e. it has passed moderation, the customer is verified to have purchased the product, and the rating is not a draft. Do not call it for deleted or duplicate submissions. If the customer edits or deletes their rating later, the awarded points are not automatically reversed.

Common errors (all channels)

  1. Create the earning record after the upstream event (payment / rating) is confirmed on your side.
  2. Store the returned uuid against your own record.
  3. If your worker crashes between the upstream event and the Points call, use your stored merchant reference (order_number or review_reference) to detect the partially completed step on retry.
  4. For disputes or support, fetch the order later with GET /v1/orders/{uuid}.

Next

Quick start

Make your first earning call end-to-end.

Refunds & cancellations

What happens when an awarded order is later refunded.

Order lifecycle

State transitions, statuses, and webhooks.

Go-live checklist

Verify production readiness before launch.