Create Redemption
The LATAM Pass Redeem API allows partners to debit miles from a LATAM Pass member's account for non-air product or service redemptions, according to the commercial agreement between the parties.
Processing is asynchronous: a 201 Created response indicates only that the request was accepted — it does not mean the miles have been debited. The final result (PROCESSED, ERROR, or CANCELLED) is delivered exclusively via webhook notification.
Do not design the member experience to wait for the final result during the API call. Inform the member that the request was submitted and offer a way to check the final status once it is available.
Request
Endpoint
POST https://api.latampass.com/sandbox/v1/customer/eloyalty/partner/redeem
Request body
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
correlationId | UUID | No | Auto-generated if not provided | Tracking ID for the transaction |
description | String | Yes | Max 500 characters | Description of the product or service being redeemed |
miles | Integer | Yes | Min: 1 — Max: 3,000,000 | Amount of miles to debit |
redemptionCode | String | Yes | Max 50 chars — alphanumeric (a-z, A-Z, 0-9, _, -, .) | Unique redemption code for the product. Provided by LATAM Pass Support |
partnerId | String | Yes | Max 20 chars — alphanumeric (a-z, A-Z, 0-9, _, -, .) | Partner identifier. Provided by LATAM Pass Support |
partnerTransactionId | String | Yes | Max 100 chars — alphanumeric (a-z, A-Z, 0-9, _, -, .) | Transaction ID on the partner side |
This field is not enforced as unique by the API. Multiple requests with the same partnerTransactionId will each create a separate transaction. When retrying after a 500 error, send the exact same payload — including the same partnerTransactionId.
Example request
Headers
| Header | Value | Description |
|---|---|---|
Authorization | Bearer <JWT_ACCESS_TOKEN> | Auth0 PKCE member-bound JWT (Flow A) |
x-latam-test | LatamPass | Required in sandbox only — omit in production |
Content-Type | application/json |
Response
A 201 Created response means the request was accepted for processing. Always wait for the webhook notification to determine the final outcome.
201 Created — accepted for processing
Store the correlationId — it is your primary key for tracking the transaction via webhook or GET.
Transaction status values
| Status | Type | Description |
|---|---|---|
PROCESSING | Intermediate | Request is being processed |
PROCESSED | Final | Miles successfully debited — eligible for cancellation |
ERROR | Final | Processing failed — check errorException in the webhook payload for details |
CANCELLED | Final | Request was cancelled |
Reasons for a request to result in ERROR or CANCELLED
| Reason | Code | Instructions to Partner |
|---|---|---|
| Member not found | MemberDoesNotExist | Validate the member before processing |
| Invalid membership number format | InvalidMemberFormat | The member field must be valid. Verify the format and try again |
| Invalid membership number | InvalidMembershipNumber | Validate the membership number format |
| Partner not registered | PartnerDoesNotExist | Contact LATAM Pass Support to set up the necessary configurations |
| Member account is restricted | MemberBlacklisted | Member must contact LATAM Pass Support for assistance |
| Member account is not active | AccountNotActive | Member must activate the account to proceed |
| Member account is closed | MemberClosed | Member must reactivate the account to proceed |
| Member is deceased | MemberDeceased | Contact LATAM Pass Support for assistance |
| Insufficient account balance | InsufficientAccountBalance | Check the member's available balance before processing |
| Insufficient cross-program points | CrossProgramInsufficientPoints | Review the available points before trying again |
| No active partner contract | NoActivePartnerContract | Contact LATAM Pass Support to review contract status |
| No active redemption contract for partner | ActiveRedemptionContractNotExistsForPartner | Contact LATAM Pass Support to verify contract details |
| Invalid partner for this reward | InvalidPartnerForReward | Contact LATAM Pass Support to check the partner code |
| Redemption partner not found | RedemptionPartnerDoesNotExist | Contact LATAM Pass Support to validate the redemption partner |
| Reward not found | RewardDoesNotExist | Verify the redemptionCode and try again |
| Reward not active | RewardNotActive | Check the reward status or try again later |
| Reward validity expired | RewardValidityExpired | Use a valid reward or contact LATAM Pass Support |
| Reward pricing rule rejected | RewardPricingRuleRejected | Contact LATAM Pass Support for assistance |
| Reward pricing rule not configured | RewardPricingRuleNotConfigured | Contact LATAM Pass Support — configuration required |
| Member's country not eligible for this partner's redemption | CoalitionMismatch | Contact LATAM Pass Support to set up the necessary configurations |
| Authorization failed (recoverable) | AuthorisationFailed | Please try again later or contact LATAM Pass Support if the issue persists |
| Settlement failed (recoverable) | SettlementFailed | Please try again later or contact LATAM Pass Support if the issue persists |
| Certificate issuance failed (recoverable) | IssueCertificateFailed | Please try again later or contact LATAM Pass Support if the issue persists |
| System error during rule processing (recoverable) | RuntimeError | Please try again later or contact LATAM Pass Support if the issue persists |
Common errors
400 — Missing required fields or invalid values
400 — Duplicate correlationId
Returned when the provided correlationId has already been used and the transaction is not yet fully processed.
409 — Conflict
Returned when the provided correlationId has already been fully processed. Do not retry — use the GET endpoint to check the existing transaction status.
500 — Internal Server Error
For 500 errors, retry with the exact same payload, including the same partnerTransactionId and correlationId (if one was originally provided).
405 — Method Not Allowed
This endpoint only accepts POST requests.
Documentação técnica
Click here to access it.