Guided dashboard
Choose a blueprint, create a Sandbox program, add members, and configure rewards without writing code.
Open merchant setupCreate a Sandbox program, award one order exactly once, read the balance, and prove the return path before production.
You can begin with guided configuration and move toward direct API control without changing the loyalty model.
Choose a blueprint, create a Sandbox program, add members, and configure rewards without writing code.
Open merchant setupSend commerce facts from your server and own the complete customer experience.
Send your first eventCompose a schema-driven, device-local draft. A production storefront runtime is not yet generally available.
Understand the previewThis walkthrough uses synthetic Sandbox identifiers. Replace every angle-bracket value with one created in your own Sandbox.
Choose a blueprint, review its earn rule, and keep production locked. Record the program ID.
Use the same external customer ID your commerce system already knows. Confirm the member is active in the same environment.
Create a Sandbox key with events:write. Copy it once and keep it on your server—never in storefront JavaScript or a mobile binary.
Use the commerce order ID for both Idempotency-Key and sourceReference. Amounts are integer minor units, so 2599 means 25.99 in a two-decimal currency.
curl -X POST "https://app.loyumi.com/api/v1/events" \
-H "Authorization: Bearer <sandbox-key>" \
-H "X-Environment: <sandbox-environment-id>" \
-H "Idempotency-Key: order-10042" \
-H "Content-Type: application/json" \
-d '{
"type": "purchase.completed",
"programId": "<program-id>",
"externalCustomerId": "customer-123",
"amountMinor": 2599,
"channel": "web",
"sourceReference": "order-10042"
}'{
"id": "txn_…",
"status": "committed",
"requestId": "req_…",
"member": { "externalCustomerId": "customer-123", "tier": "Member" },
"award": { "points": 25, "basePoints": 25, "campaignPoints": 0 },
"campaigns": [],
"referral": null,
"coupon": null
}A new order returns 201 and one transaction ID
The identical retry returns 200 and idempotent: true
The member endpoint shows the expected balance state
A partial return uses returnAmountMinor and returns 201
Logs retain requestId without storing secret keys
No Sandbox credential exists in client code