Points Bank API

Enable your customers use their loyalty earnings to book travel

You choose whether your White Label Template site will connect to your loyalty program, for earning or redeeming loyalty currency (or both). Your loyalty program defines which of your customers’ purchases are eligible to earn loyalty currency (whatever form that takes in your program—points, dollars, or otherwise), including the ones on your template site. You can also allow them to redeem their accumulated earnings on your template site to book travel.

Your customers will have two options for redeeming their loyalty earnings—directly through your template site, or with an Expedia agent on the phone. With the Points Bank API, your customers will be able to:

  • Redeem earned loyalty currency
  • Roll back travel purchases (also called cancelling or voiding)
  • Receive a full or partial refund to their loyalty total for any cancelled travel plans
  • Get their loyalty account balance

See the Common data and responses page for additional information.

Information

We can display your customer’s loyalty balance in the header of your template site. Because the API calls happen on page load, though, the displayed points will not update until the page is refreshed, so it may not reflect other loyalty usage.

The Points Bank API has endpoints that cover redemption, rollback, and refund of loyalty currency. It can also call an account balance endpoint. For accuracy, this API must be queried at the time of the transaction. Each of the endpoints are detailed in the tabs below, but they all—and the account balance endpoint—share the same header fields.

Header variables

FieldDescriptionSample valueField type and lengthMandatory?
partnerIdUnique identifier for your business, provided by ExpediaYOUR BRANDString, max 20 charactersYes
AuthorizationAccess token received by Expedia from your authorization server, to be validated by your teamStandard JSON web token (JWT)String, standard JWT lengthNo
Authorization2JSON web token (JWT) sent by Expedia; signature and claims to be validated on your endStandard JWTString, standard JWT lengthNo

Check out our sample request and response page for payload details.

Redemption

This one-step commit process allows your customers to redeem their loyalty rewards via the points bank, using POST /redeem.

Request

FieldDescriptionSample valueField type and lengthMandatory?
requestIdUnique identifier for the transaction requesta5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
membershipIdYour unique customer identifier, received via SSOa6fgju7he1bfString, max 40 charactersYes
loyaltyAccountNumberThe customer’s loyalty account number (also called programAccountNumber); this should only be populated if an identifier other than membershipId is required for loyalty operations234986576String, max 40 charactersNo
programIdIdentifier for the loyalty program the customer is affiliated to or the tier name associated with the loyalty programSilver
Gold
Platinum
String, max 20 charactersNo
sourceConfirmationIdConfirmation identifier on the Expedia side (also called orderId); it’s sent in redeem, refund, and void requests and should be sent back as part of the the response payload and as part of the daily points recon file9223371998507503799String, max 50 charactersYes
totalproductCostTotal cost of booking (up to 2 decimals); equal to cash equivalent of amount paid in points + amount paid in cash or card230.09String, max 10 charactersYes
PaymentDetailsLoyalty currency and cash or card payment details; see PaymentDetails table for nested fields  Yes

Response

FieldDescriptionSample value
statusTransaction status (values: Approved or Declined)Declined
requestIdUnique identifier for the transaction request (from request payload)a5783c58-c5ce-4ff9-b83c-58c5cedff9
transactionDateTimeDate and time of the transaction, as recorded on partner system2023-04-20T12:01:23.203057Z
sourceConfirmationIdOrder identifier from Expedia side(also called orderId); sent in redeem, refund, and void requests and should be included in the response payload and daily points recon file9223371998507503799
redemptionDetailsConfirmation of redeemed loyalty award; see RedemptionDetails table for nested items 
DeclineReasonReason transaction was declined; see the common data DeclineReason table for nested items 
reasonMessageA custom message to accompany a decline response for better logging; see the common data DeclineReason table for nested items 

PaymentDetails

FieldDescriptionMandatory?
redemptionDetailsDetails of the loyalty redemption; see RedemptionDetails table for nested itemsYes
amountPaidInCashAmount customer paid for the booking in cash or on a card; see the common data Amount table for nested itemsYes

RedemptionDetails

FieldDescriptionSample valueField type and lengthMandatory?
amountPaidInLoyaltyCurrencyTotal number of points, miles (or any other loyalty currency) paid for the booking; see the common data Amount table for nested fields  Yes
redemptionConfirmationIdIdentifier for the redemption operation; will be sent in the refund or void request from Expedia, and should be populated in daily points recon report as "Partner Confirmation Id" for redemption transactionexpedia-a5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 50 charactersYes
loyaltyRedemptionCodeRedemption code required by some implementations, usually populated in the request; it's a one-time-password or predefined redemption code for a product, if requiredSKUString, max 20 charactersNo

Rollbacks

To process rollbacks (that is, reversal of loyalty transactions, also called cancellations or voids) at the points bank, you’ll use the POST /rollback endpoint.

This API is triggered when a redemption operation is successful, but Expedia must reverse it for a reason such as supply failure (for example, while the customer is attempting to book, the hotel sells out). Because this is a rollback of a redemption, it will require reconciliation before the loyalty earnings are available again.

Note: Neither the redemption nor rollback transactions should feature in the daily points reconciliation report.

Request

FieldDescriptionSample valueField type and lengthMandatory?
requestIdUnique identifier for the transaction requesta5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
membershipIdUnique identifier for your customer from your loyalty programa6fgju7he1bfString, max 40 charactersYes
sourceConfirmationIdOrder identifier from Expedia side (also called orderId); sent in redeem, refund, and void requests; should be included in the response payload and daily points recon file9223371998507503799String, max 50 charactersYes
CancellationDetailsDetails about the rollback transaction; see the CancellationDetails table for nested items   

Response

FieldDescriptionSample valueField type and lengthMandatory?
statusRollback transaction status indicating whether the cancellation was successful (values: Approved or Declined)ApprovedStringYes
requestIdUnique identifier for the transaction request (from request payload)a5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
transactionDateTimeDate and time of the transaction, as recorded on your system2023-04-20T12:01:23.203057ZString, max 40 charactersYes
sourceConfirmationIdOrder identifier from Expedia side (also called orderId); sent in redeem, refund, and void requests; should be included in the response payload and daily points recon file9223371998507503799String, max 50 charactersYes
CancellationDetailsDetails about the rollback transaction (mandatory if status value is Approved); see CancellationDetails table for nested items   
BalanceNumber of points, miles, or any other loyalty currency available in the customer’s account; see the common data Amount table for nested items   
DeclineReasonReason transaction was declined; see the common data DeclineReason table for nested items   
reasonMessageA custom message to accompany a decline response; see the common data DeclineReason table for nested items   

CancellationDetails

FieldDescriptionSample valueField type and lengthMandatory?
redemptionConfirmationIdConfirmation identifier for redemption; sent in redemption response; if rolled back, should not be populated in daily points reporta5783c58-c5ce-4ff9-b83c-58c5cedff991String, max 50 charactersYes
cancellationConfirmationIdConfirmation identifier for rollback operation (mandatory if status value is Approved); should not be populated in daily points reporta5783c58-c5ce-4ff9-b83c-58c5cedff993String, max 50 charactersNo

Refunds

This API is used to process loyalty refunds to your points bank with POST /refund. It’s triggered when the customer needs to cancel their plans after they’ve already used their loyalty earnings to book. Because it’s a refund to their loyalty earnings, it will require reconciliation before the refunded currency is available in the customer’s account.

Request

FieldDescriptionSample valueField type and lengthMandatory?
requestIdUnique identifier for the refund requesta5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
membershipIdUnique customer identifiera6fgju7he1bfString, max 40 charactersYes
sourceConfirmationIdOrder identifier from Expedia side (also called orderId); sent in redeem, refund, and void requests; should be included in the response payload and daily points recon file9223371998507503799String, max 50 charactersYes
RefundDetailsDetails on the refund transaction; see RefundDetails table for nested items   

Response

FieldDescriptionSample valueField type and lengthMandatory?
statusRefund status (values: Approved or Declined)ApprovedStringYes
requestIdUnique identifier for the refund request (from request payload)a5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
transactionDateTimeDate and time of the transaction, as recorded on your system2023-04-20T12:01:23.203057ZString, max 40 charactersYes
sourceConfirmationIdOrder identifier from Expedia side (also called orderId); sent in redeem, refund, and void requests; should be included in the response payload and daily points recon file9223371998507503799String, max 50 charactersYes
RefundDetailsDetails of the refund request; see RefundDetails table for nested items   
BalanceNumber of points, miles, or any other loyalty currency available in the customer’s account; see the common data Amount table for nested items   
DeclineReasonReason transaction was declined; see the common data DeclineReason table for nested items   
reasonMessageA custom message to accompany a decline response; see the common data DeclineReason table   

RefundDetails

FieldDescriptionSample valueField type and lengthMandatory?
loyaltyRefundAmountTotal number of points, miles, or any other loyalty currency refunded; see common data Amount table for nested items   
redemptionConfirmationIdIdentifier for the redemption operation; sent in the redemption responsea5783c58-c5ce-4ff9-b83c-58c5cedff918String, max 50 charactersYes
refundConfirmationIdIdentifier for the refund operation; will be sent in refund or void request from Expedia, and should be populated in daily points recon file as "Partner Confirmation Id" for refund transactiona324554f03-c5ce-4ff9-b83c-58c5cedff988String, max 50 charactersNo

Account balance

To fetch the customer’s loyalty account balance, you’ll use the POST /balance endpoint.

Request

FieldDescriptionSample valueField type and lengthMandatory?
requestIdUnique identifier for the transaction requesta5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
membershipIdUnique identifier for your customer from your loyalty programa6fgju7he1bfString, max 40 charactersYes
loyaltyAccountNumberThe customer’s loyalty account number (also called programAccountNumber); this should only be populated if an identifier other than membershipId is required for loyalty operations234986576String, max 40 charactersNo
programIdIdentifier for the loyalty program the customer is affiliated with or the tier name associated with the loyalty programPlatinumString, max 20 charactersNo

Response (successful)

FieldDescriptionSample valueField type and lengthMandatory?
requestIdUnique identifier for the transaction requesta5783c58-c5ce-4ff9-b83c-58c5cedff988String, max 40 charactersYes
BalanceNumber of points, miles, or any other loyalty currency available in the customer’s account; see the common data Amount table for nested items   

API details

Did you find this page helpful?
How can we improve this content?
Thank you for helping us improve!