Coins and the store are the gamification-with-real-value layer. Users accumulate coins by participating in the community and spend them on items in a store. What sets Cativa apart is that each order has a lifecycle you connect to your own fulfillment (ship a physical gift, release a coupon, trigger an integration).
The two sides
Base URL and authentication
All routes live on the Cativa API:Coins (Wallets)
Balance and history live in the user’s wallet.
On the admin side, you credit balance and query any user’s wallet (by id or by email). See the endpoints and exact fields in the API Reference, tag Wallets.
Check the user’s balance
balance is the user’s coin balance, in whole units:
The exact response shape (balance, currency, and history field names) lives in the API Reference. Check the Wallets and Store tags instead of assuming the shape here.
Store
Users browse stores, view items, and redeem them with coins.
The IDs (
storeId, itemId, orderId) are ULIDs.
On the admin side, you manage stores and items and operate orders:
POST /admin/monetization/stores·PUT/DELETE /admin/monetization/stores/{storeId}POST /admin/monetization/stores/{storeId}/items·PUT/DELETE /admin/monetization/stores/items/{itemId}GET /admin/monetization/stores/orders·GET /admin/monetization/stores/orders/{orderId}
The order lifecycle
When a user redeems an item, an order is created. That order moves through a lifecycle, and each transition is an admin action:- approve / reject: you validate the redemption (stock, eligibility, anti-fraud) and approve or decline it.
- fulfill: you mark the order as delivered. This is where external fulfillment happens — ship the physical gift, generate the coupon, call your logistics integration.
- refund: return the coins to the user when the item can’t be delivered.
POST /admin/monetization/stores/orders/{orderId}/approvePOST /admin/monetization/stores/orders/{orderId}/rejectPOST /admin/monetization/stores/orders/{orderId}/fulfillPOST /admin/monetization/stores/orders/{orderId}/refund
1
User redeems
POST /monetization/stores/items/{itemId}/purchase debits the coins and creates the order in its initial state.2
You validate and approve
POST /admin/monetization/stores/orders/{orderId}/approve (or reject) after checking stock, eligibility and anti-fraud.3
You deliver and fulfill
Run your external fulfillment (ship the gift, generate the coupon) and close it with
POST .../fulfill.4
If something fails, refund
POST .../refund returns the coins to the user when the item can’t be delivered.Approve and fulfill an order
approve (the authoritative schema lives in the API Reference, tag Store). status reflects the lifecycle step:
Each route’s response fields (order status, amounts, timestamps) live in the API Reference, tags Store and Wallets. Don’t assume the shape from the examples above.
Common errors and questions
The redemption failed with insufficient balance
The redemption failed with insufficient balance
purchase only creates the order if the user has enough coins for the item. Without balance, the call is rejected and no order is created. Check GET /monetization/wallet/coins first, or credit balance through the admin endpoint (tag Wallets) if your program’s rules allow it.The order is stuck at approved and never got delivered
The order is stuck at approved and never got delivered
approve only validates the redemption; it does not deliver anything on its own. Delivery is your external fulfillment, and you are the one who calls fulfill when it completes. An approved-but-never-fulfilled order stays open on purpose, waiting for your operation to close the loop.Coins were debited but the item couldn't be delivered
Coins were debited but the item couldn't be delivered
Use
refund. It returns the order’s coins to the user’s wallet. It’s the correct exit when stock ran out or the logistics integration failed after the debit.I called approve twice, did anything double up?
I called approve twice, did anything double up?
Order transitions are idempotent per state: re-applying
approve to an already-approved order does not create a second order or debit again. That makes it safe to retry the admin actions in jobs.I want to unlock access to a group, not deliver a physical item
I want to unlock access to a group, not deliver a physical item
The store delivers items; it is not the access mechanism. To unlock a group, course or space, use badge as permission (see badges as permissions). Coins and access are separate layers.
How it connects
- To credit coins for an external action (purchase, referral, gift), use the admin credit endpoints by id or email (tag Wallets).
- To grant access instead of delivering a physical item, the mechanism is different: see badges as permissions.
- To understand who owns the wallet and the order, see identity and users.
