/v2/loyalties API map, see Loyalty v2: Overview.
Going to production
Moving your Voucherify loyalty v2 integration from a Sandbox environment to a live production environment requires more than simply swapping your API keys. Because Voucherify projects are completely isolated from one another, your configuration data does not automatically migrate. You must recreate your entire program setup from scratch in your live Production project before routing live customer traffic. Use this step-by-step checklist to ensure a seamless launch and avoid transaction failures.Use a live production project and extract keys
X-App-Id and X-App-Token). Update your infrastructure environment variables with these live keys. Keep application keys on the server side only. See Authentication and Security.Point your system to the correct regional API base URL from API overview. Confirm the production project has the LOYALTY_V2 entitlement.Recreate your data schemas
- Re-define all Metadata schemas used for custom attributes on point wallets, loyalty members, orders, and other data.
- Re-create all Custom event schemas that trigger loyalty earning rules (such as writing product reviews or downloading your mobile app).
Sync your customer base and product catalog
- Import your live customer database into the production project using a CSV upload or the POST Import and Update Customers API endpoint.
- If you use a CDP or CRM system, check if customer data is synchronized correctly.
- Synchronize your product catalog, matching your online store or POS menu item IDs to the Voucherify product engine fields (
source_id).
Recreate campaigns for rewards
Rebuild and activate the loyalty v2 program
- Set up your point wallets and define your tier structures exactly as you designed them in your Sandbox project.
- Re-create your earning rules, rewards, and benefits.
- Once verified, set the program status to
ACTIVE.
lprg_...) and update your backend environment data. Your code must use this new live identifier for all member-related API calls.Run an end-to-end live sanity test
- Enrollment: Create a test live member using a production customer ID. Confirm get-before-create and
409 member_already_existshandling. - Earning: Submit a live order with a
PAIDstatus and verify that points are successfully added to the member’s wallet balance. - Discovery: Call examine earning rules and examine rewards for the test member.
- Redemption: Purchase a low-cost or test reward and poll until the reward transaction is
APPROVEDorREJECTED. - Pay with points: Run a
DRY_RUN, then a liveTRANSACTIONpayment, and poll list member order payments until the status is terminal. - Profile: Refresh GET membership and confirm balances, pending points, and transaction history.
Operational readiness
Before you route live traffic, confirm these operational controls.Retries and rate limits
Use the following guidelines to handle retries and rate limits:- Retry only safe reads and failed requests that did not create a transaction ID.
- Use exponential backoff for
429and5xxresponses. See Limits. - Do not automatically replay pay-with-points or reward-purchase POSTs after a
202response. Poll the transaction list instead.
Monitoring and reconciliation
Use the following guidelines to monitor and reconcile your loyalty program:- Alert on elevated
404,409,423,429, and5xxrates for loyalty endpoints. - Reconcile daily: memberships created, points earned, points spent, reward purchases, and rejected transactions.
- Use Loyalty v2 Reports for aggregated spending, points-earnings, tier, and earning-rule statistics at program or member scope.
- Use Activity tabs in Loyalty hub and the Audit log when investigating mismatches.
Rollback and kill switch
Use the following guidelines to rollback and kill switch your loyalty program:- Keep a way to disable loyalty spend in your checkout (feature flag) without redeploying.
- For incorrect reward purchases, use Refund a reward purchase when your support process allows refunds. Confirm the refund flow in Sandbox before production use.
- To stop a member from earning or spending, deactivate the member. To pause the whole program, deactivate the program in Loyalty hub after you understand the impact on active members.
- Partial refunds by item or amount for point wallets are not supported yet. Plan support workflows around full refund behavior configured in the point wallet.
Troubleshooting
Resolve operational friction points, API structural anomalies, and edge cases commonly encountered by system integrators during the deployment.HTTP 404: Resource not found
HTTP 404: Resource not found
404 Not Found response code if the identifiers provided in the path parameters do not match database entries.Solutions:- ID confusion: Check if the client request payload has a Voucherify loyalty program member ID (
lmbr_...) rather than a standard Voucherify Customer ID (cust_...) when querying member-specific states likeGET member. This also applies to the new IDs of the recreated loyalty v2 program in your production environment. - Cross-project scope separation: Verify that the request headers (
X-App-IdandX-App-Token) point to the identical dashboard environment containing the referenced loyalty program ID (lprg_...).
HTTP 409: Conflict – resource already exists
HTTP 409: Conflict – resource already exists
409 Conflict response code if a resource already exists in a loyalty program.The most frequent case is an attempt to enroll a customer in a loyalty program when that customer is already a member of that program.Solutions:- Verify ID uniqueness: Ensure that the integration request payload contains a unique, non-registered customer ID that is not currently associated with the program. If you use several loyalty programs, verify that the program IDs are not duplicated in the request.
- Implement get-before-create (read-first pattern): Before registering a customer, query the Voucherify memberships API (
GET /v2/loyalties/programs/{programId}/memberships/{customerId}) to check if the customer profile already is a member of the target loyalty program. - Graceful client-side redirection (soft-catch): Intercept the HTTP
409error code on your backend integration layer. Instead of returning an error to the user interface, treat the conflict as a validation that the user is registered. Retrieve their existing active loyalty member data and transition the user interface directly to the active loyalty program dashboard.
HTTP 423: Locked – resource state constraint
HTTP 423: Locked – resource state constraint
423 Locked response code if you attempt to perform an action on a resource that is restricted due to the resource’s current status, active validity rules, or balance limitations.Solutions:- Reward validity window: Verify that you are attempting to redeem or purchase the reward within the reward’s scheduled active time frame. If the transaction occurs outside of the reward’s configured validity dates and hours, Voucherify blocks the request. You can adjust the active dates of the reward in the Loyalty hub.
- Zero card balance: Check if the loyalty card has a positive point balance before pay with points or reward purchase. If the balance is zero, the operation fails with
zero_card_balanceuntil points are earned or added.
Frontend synchronization errors caused by asynchronous code generation
Frontend synchronization errors caused by asynchronous code generation
cards[].card.code as a null value.Solutions:- Avoid immediate code dependency: Never configure client-side user interfaces to rely on a synchronous card code return when processing post-enrollment UI views.
- Fallback payload strategies: Rely cleanly on the unique Voucherify loyalty member ID (
lmbr_...) or the card ID (lcrd_...) for all secondary client-side calculations.
Troubleshoot with Activity tabs and Audit log
Troubleshoot with Activity tabs and Audit log

