Repricing
Post-booking repricing proposals and bulk moves, applied to purchase orders as order changes.
| Operation | Endpoint |
|---|---|
| Move many bookings to another product with price protection | POST /repricing/bulk-moves |
| Propose a repricing for a booking change | POST /repricing/handovers/{handoverId}/proposals |
| Read the repricing matrix | GET /repricing/matrix |
| Read a repricing proposal | GET /repricing/proposals/{id} |
| Confirm a repricing proposal | POST /repricing/proposals/{id}/confirm |
| Reject a repricing proposal | POST /repricing/proposals/{id}/reject |
Move many bookings to another product with price protection
POST
/repricing/bulk-movesHeaders: Idempotency-Key, plus X-Request-Id.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
actor | string | yes | min 1 chars |
attribute_overrides | map of string | ||
bookings | array of object | yes | at least 1; at most 5000 |
bookings[].booking_ref | string | yes | min 1 chars |
bookings[].handover_id | string | yes | min 1 chars |
discount_percent | number | ≥ 0; ≤ 100 | |
product_map | map of string | yes | |
protection | enum: same_price, new_price_with_discount, new_price_with_upgrade | yes | |
reason | string | yes | min 1 chars |
upgrade | object | ||
upgrade.attribute | string | yes | min 1 chars |
upgrade.map | map of string | yes |
Schema: apps/journeys/src/repricing/contracts.ts (BulkMoveRequestSchema)
Response 200
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | baseline_not_found | The handover baseline does not exist. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. Retry after the Retry-After interval. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Propose a repricing for a booking change
POST
/repricing/handovers/{handoverId}/proposalsParameters
| Name | In | Required | Notes |
|---|---|---|---|
handoverId | path | yes |
Headers: Idempotency-Key, plus X-Request-Id.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
actor | string | yes | min 1 chars |
booking_ref | string | yes | min 1 chars |
booking_status | string | yes | min 1 chars |
change_date | string (date-time) | ||
changes | array of object | yes | at least 1; at most 100 |
changes[].action | enum: modify, add, remove | yes | |
changes[].id | string | yes | min 1 chars |
changes[].item | object | ||
changes[].item.attributes | map of string | ||
changes[].item.component | map of object | ||
changes[].item.external_price | object | ||
changes[].item.inventory_ref | string | min 1 chars | |
changes[].item.nights | integer | ≥ 0 | |
changes[].item.offer | object | ||
changes[].item.passengers | integer | > 0 | |
changes[].item.product_id | string | min 1 chars | |
changes[].item.product_type | string | min 1 chars | |
changes[].item.quantity | integer | > 0 | |
changes[].line_id | string | yes | min 1 chars |
changes[].type | string | yes | min 1 chars |
reference_date | string (date-time) |
Schema: apps/journeys/src/repricing/contracts.ts (RepriceRequestSchema)
Response 201
{ proposal } with old and new amounts per line and each promotion's outcome.
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | baseline_not_found | The handover baseline does not exist. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. Retry after the Retry-After interval. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Read the repricing matrix
GET
/repricing/matrixResponse 200
{ matrix }: change types and the price outcome rules per type.
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Read a repricing proposal
GET
/repricing/proposals/{id}Parameters
| Name | In | Required | Notes |
|---|---|---|---|
id | path | yes |
Response 200
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | proposal_not_found | The repricing proposal does not exist. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Confirm a repricing proposal
POST
/repricing/proposals/{id}/confirmParameters
| Name | In | Required | Notes |
|---|---|---|---|
id | path | yes |
Headers: Idempotency-Key, plus X-Request-Id.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
acknowledgeAlerts | boolean |
Response 200
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | proposal_not_found | The repricing proposal does not exist. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. Retry after the Retry-After interval. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Reject a repricing proposal
POST
/repricing/proposals/{id}/rejectParameters
| Name | In | Required | Notes |
|---|---|---|---|
id | path | yes |
Headers: Idempotency-Key, plus X-Request-Id.
Response 200
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | The request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details. |
| 401 | unauthenticated | The bearer token is missing, invalid, expired or minted for another purpose. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | proposal_not_found | The repricing proposal does not exist. |
| 404 | repricing_not_enabled | Repricing is not enabled for the tenant. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. Retry after the Retry-After interval. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |