The Engage Point Shop allows you to embed point shop offers directly into your web shop, native apps, or POS systems. You can fetch available point shop offers for a member, allow them to purchase an offer using their points, and track purchases. The API ensures your customer experience stays in sync with the Engage backend, handling redemptions and point deductions seamlessly.Documentation Index
Fetch the complete documentation index at: https://developer.voyado.com/llms.txt
Use this file to discover all available pages before exploring further.
How it works
When you create a point shop offer in Engage, two entities are generated:Point shop item
Point shop item
This represents the shop-facing item, and includes:
- Point cost
- Availability window
- Presentation data
Multichannel promotion
Multichannel promotion
This is the actual reward the member receives after purchase (discount, ticket, pre-sale access). This includes:
- Presentation data
- Fetch and display available point shop items
- Let the member purchase a point shop offer
- Retrieve and redeem the reward via Multichannel APIs
1. Get point shop items
This endpoint fetches all point shop items that a specific member can purchase.Unique identifier of the contact.
See response payload structure
See response payload structure
See response errors
See response errors
400 Bad Request is received if
contactId is empty or not a valid GUID.2. Purchase point shop item
Use this endpoint to purchase a point shop item for a specific contact and assign the promotion purchased to them.Purchase item payload structure
Standard identifier for the contact.
This, the unique ID for this purchase, is a value that you have to generate in your system for each purchase attempt. This endpoint is therefore idempotent, and this is enforced based on the combination of
pointShopItemPurchaseId and contactId. See below for more.This is the same value as the
id returned in the Get point shop items endpoint above.Idempotency
Idempotency here is based on the combination ofpointShopItemPurchaseId and contactId. In practice, if a request is retried using the same values of these two attributes, the API will just return the existing purchase instead of creating a new one. This ensures that:
- A purchase ID cannot be reused across different contacts
- No duplicate point deductions will occur
- Retries are safe in case of network issues
Handling the request
When a POST has been made to this endpoint, the systems first validates thatpointShopItemPurchaseId and contactId belong together, preventing duplicate purchases and cross-user reuse of purchase IDs. If validated, then:
- The purchase operation identified by
pointShopItemPurchaseIdis created or, if it already exists, reused - Points are deducted from the contact
- The linked promotion is assigned to the contact
| Scenario | Result |
|---|---|
Same purchaseId + same contactId | ✅ Returns existing purchase (idempotent) |
Same purchaseId + new contactId | ❌ Rejected (invalid request) |
New purchaseId + same contactId | ✅ New purchase created |
See response payload structure
See response payload structure
400 Bad Request
400 Bad Request
The generic PromotionAssignmentError (HTTP 400) is split into specific error codes: - PromotionAssignmentContactNotFound (400) — the contact doesn’t exist
- PromotionAssignmentPromotionNotFound (400) — the linked promotion was removed
- PromotionAssignmentPromotionExpired (400) — the linked promotion has ended
- PromotionAssignmentError (400 → 500) — internal server error, safe to retry
404 Not Found
404 Not Found
This can have one of the following error codes:
- Item does not exist
404 Conflict
404 Conflict
This can have one of the following error codes:
- PointShopItemPurchaseProcessingTimedOut
- PointShopItemPurchaseFailed
422 Unprocessable Entity
422 Unprocessable Entity
500 Internal Server Error
500 Internal Server Error
- Unknown error
Integration guidance
Clients should:- Generate a new
pointShopItemPurchaseIdfor each new purchase - Reuse the same ID only when retrying the same request
- Never reuse a purchase ID across different users (different
contactIdvalues)
3. Get point shop item purchases
Use this endpoint to fetch all purchases made by a specific contact.Standard identifier for the contact.
Point shop item purchases response
Uses for this endpoint
This data from this endpoint is useful for:- Seeing the full purchase history
- Order tracking
- UI confirmation flows
- Understand the purchase state with
status(for exampleProcessing)
400 Bad Request
400 Bad Request
- InvalidContact
404 Not Found
404 Not Found
- No purchases found or invalid reference
Purchase flow
A point shop item purchase flow looks like this:- Call
GET /point-shop-items - Display available offers
- User selects an item
- Call
POST /point-shop-items/purchase(withpointShopItemPurchaseId) - Retry safely if needed using the same purchase ID
- Optionally track via
GET /point-shop-item-purchases - Fetch reward via the multichannel promotion API
Multichannel promotion
While the point shop API handle this:- Listing items
- Purchasing items
- Display reward details (title, description, barcode, expiry)
- Allow redemption (in-store or online)

