Loyalty Bulk Orders (APIM CI-v2)
This API exposes the AAB bulk order (bulk sale) journey of the Accor loyalty platform. A company administrator orders subscription cards for several of its employees, for a single product (Explorer, ibis or Voyageur), settled by a single aggregated payment.
Note: This is an independent APIM CI-v2 publication (BasePath
/loyalty/v1/bulk-orders). It is distinct from Loyalty Subscription Plans Matrix (/loyalty/v1/subscription-plans): different functional domain, different consumers, different roles, independent lifecycle. Both publications target the same backend host under different gateway paths.
Endpoints
| Method | Path | Description |
|---|---|---|
POST |
/bulk-order |
Create a bulk sale (AAB) and initiate its aggregated payment |
PATCH |
/bulk-order |
Confirm the payment result of a bulk sale and start card crediting |
GET |
/bulk-order/{bulkOrderId} |
Get a bulk order and its per-member results |
PATCH /bulk-order is proxied on the same BasePath and the same backend
route as POST and GET. The caller sends the functional bulkOrderId
returned by POST /bulk-order and a paymentResult (PAID, FAILED or
EXPIRED). The gateway injects no extra header.
Security
- JWT (Bearer, HS512) validated by the backend.
POST /bulk-order:ROLE_SUBSCRIPTION_PAYMENTorROLE_PARTICIPANT.PATCH /bulk-order:ROLE_SUBSCRIPTION_PAYMENTorROLE_PARTICIPANT.GET /bulk-order/{bulkOrderId}:ROLE_SUBSCRIPTION_GETINFOorROLE_PARTICIPANT.
- ApiKey on the App, to identify the caller.
- IP whitelisting enabled on preprod and prod.
Notes
POST /bulk-orderreturns HTTP 200 (not 201); the body carries the functionalbulkOrderIdand theredirectPaymentlink.PATCH /bulk-orderreturns HTTP 200. The body carriesbulkOrderId, the status applied synchronously, and thepaymentResultthat was applied.PAIDsets the global status toPAYMENT_DONEand starts asynchronous card crediting. A secondPAIDwhile the sale is alreadyPAYMENT_DONEis accepted and resumes crediting.FAILEDorEXPIREDsets the global status toPAYMENT_FAILEDand credits no card.- Per-member results are not in this response. Read them afterwards with
GET /bulk-order/{bulkOrderId}.
- The internal technical identifier (
bulkSaleId) and the transient payment link are never exposed byGET /bulk-order/{bulkOrderId}. - Quantity is derived from the employee list (one employee = one card in the MVP).