Quotations
Quotation tracking on the order engine. A quotation links a saved quote to a trip, groups alternatives under one intent and converts into the booking purchase order.
| Operation | Endpoint |
|---|---|
| Create a quotation | POST /order-orchestration/quotations |
| Resume a quotation | GET /order-orchestration/quotations/{ref} |
| Convert a quotation into a purchase order | POST /order-orchestration/quotations/{ref}/convert |
| Quotation conversion report | GET /order-orchestration/quotations/report |
Create a quotation
/order-orchestration/quotationsTracks a saved quote on the order engine. Opens a trip in status quotation unless tripId is given. Pass intentId to group alternatives for the same customer intent.
Headers: Idempotency-Key, plus X-Request-Id.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
agencyRef | string | max 200 chars | |
anchor | object | yes | |
anchor.departureAt | string (date-time) | yes | |
anchor.market | string | max 60 chars | |
anchor.productId | string | yes | 1–200 chars |
anchor.productType | string | yes | min 1 chars |
anchor.reservationRef | string | max 200 chars | |
anchor.returnAt | string (date-time) | yes | |
anchor.unitRef | string | max 200 chars | |
channel | string | yes | min 1 chars |
createdBy | object | yes | |
createdBy.actorRef | string | yes | 1–200 chars |
createdBy.kind | enum: customer, agent, agency | yes | |
customerRef | string | max 200 chars | |
intentId | string | max 64 chars | |
market | string | max 60 chars | |
passengers | integer | > 0 | |
quote | object | yes | |
quote.currency | string | yes | pattern ^[A-Z]{3}$ |
quote.offerId | string | ||
quote.promotionIds | array of string | ||
quote.quoteRef | string | yes | min 1 chars |
quote.quoteVersion | integer | ≥ 0; default 0 | |
quote.totalMinor | integer | ||
quote.validUntil | string (date-time) | ||
tripId | string |
Schema: apps/journeys/src/order-orchestration/contracts.ts (CreateQuotationInputSchema)
Response 201
/order-orchestration/quotationsTrack the quote on a new tripcurl -X POST "$BASE/order-orchestration/quotations" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0001" \
-H "Idempotency-Key: efaf1029-bfb3-4618-ae20-12191c8878bb" \
-H "Content-Type: application/json" \
-d '{
"channel": "web",
"market": "IT",
"createdBy": {
"actorRef": "CUST-20419",
"kind": "customer"
},
"customerRef": "CUST-20419",
"anchor": {
"productType": "cruise",
"productId": "MED7-2027-04-12",
"unitRef": "BALCONY-B2",
"departureAt": "2027-04-12T17:00:00Z",
"returnAt": "2027-04-19T08:00:00Z",
"market": "IT"
},
"passengers": 2,
"quote": {
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"currency": "EUR",
"totalMinor": 268800,
"validUntil": "2026-11-09T23:59:59Z",
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [
"EARLY-BOOKING-10"
]
}
}'
HTTP/1.1 201
X-Request-Id: req-0001
{
"quotationRef": "QT-E419E9088B0D",
"tripId": "TRP-B2BD5A9771E4",
"intentId": "INT-E7814BE45E5F",
"status": "open",
"channel": "web",
"market": "IT",
"productCode": "MED7-2027-04-12",
"createdBy": {
"actorRef": "CUST-20419",
"kind": "customer"
},
"customerRef": "CUST-20419",
"agencyRef": null,
"passengers": 2,
"quote": {
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"currency": "EUR",
"totalMinor": 268800,
"validUntil": "2026-11-09T23:59:59Z",
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [
"EARLY-BOOKING-10"
]
},
"conversion": null,
"createdAt": "2026-11-02T09:05:37.000Z",
"updatedAt": "2026-11-02T09:05:37.000Z",
"lastAccessedAt": "2026-11-02T09:05:37.000Z"
}
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 | not_found | The trip, purchase order, quotation or configuration item does not exist. |
| 404 | not_enabled | Order orchestration 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 | unknown_channel | The channel is not in the orchestration configuration. |
| 422 | missing_fields | Fields required for the channel are missing. |
| 422 | not_an_anchor | The product type may not anchor a trip. |
| 422 | invalid_dates | The return date is not after the departure date. |
| 422 | second_anchor | The trip already has an anchor product. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Resume a quotation
/order-orchestration/quotations/{ref}Returns the quotation, its trip and its alternatives. Only the creator may resume it, identified by actorRef or by the matching customerRef.
Parameters
| Name | In | Required | Notes |
|---|---|---|---|
ref | path | yes | |
customerRef | query | The customer the quotation was created for. | |
actorRef | query | The actor who created the quotation. |
Response 200
/order-orchestration/quotations/QT-E419E9088B0DResume the saved quotationcurl -X GET "$BASE/order-orchestration/quotations/QT-E419E9088B0D?customerRef=CUST-20419" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0002"
HTTP/1.1 200
X-Request-Id: req-0002
{
"quotation": {
"quote": {
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quoteRef": "Q-2027-58213",
"totalMinor": 268800,
"validUntil": "2026-11-09T23:59:59Z",
"promotionIds": [
"EARLY-BOOKING-10"
],
"quoteVersion": 2
},
"market": "IT",
"status": "open",
"tripId": "TRP-B2BD5A9771E4",
"channel": "web",
"intentId": "INT-E7814BE45E5F",
"agencyRef": null,
"createdAt": "2026-11-02T09:05:37.000Z",
"createdBy": {
"kind": "customer",
"actorRef": "CUST-20419"
},
"updatedAt": "2026-11-02T09:05:37.000Z",
"conversion": null,
"passengers": 2,
"customerRef": "CUST-20419",
"productCode": "MED7-2027-04-12",
"quotationRef": "QT-E419E9088B0D",
"lastAccessedAt": "2026-11-02T09:06:14.000Z"
},
"trip": {
"endAt": "2027-04-19T08:00:00Z",
"anchor": {
"market": "IT",
"unitRef": "BALCONY-B2",
"returnAt": "2027-04-19T08:00:00Z",
"productId": "MED7-2027-04-12",
"departureAt": "2027-04-12T17:00:00Z",
"productType": "cruise"
},
"status": "quotation",
"tripId": "TRP-B2BD5A9771E4",
"changes": [],
"startAt": "2027-04-12T17:00:00Z",
"version": 2,
"tenantId": "meridian",
"createdAt": "2026-11-02T09:05:37.000Z",
"updatedAt": "2026-11-02T09:05:37.000Z",
"customerRef": "CUST-20419",
"quotationRefs": [
"QT-E419E9088B0D"
],
"purchaseOrderIds": []
},
"alternatives": []
}
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 | not_creator | Only the customer or agent who created the quotation may resume it. |
| 403 | scope_forbidden | The token is scoped to an agency or an access scope; this surface requires an unscoped tenant token. |
| 404 | not_found | The trip, purchase order, quotation or configuration item does not exist. |
| 404 | not_enabled | Order orchestration is not enabled for the tenant. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
Convert a quotation into a purchase order
/order-orchestration/quotations/{ref}/convertCreates the booked purchase order from the frozen conditions of the accepted quote. Other open alternatives of the same intent are superseded. Repeating the same conversion returns the same order.
Parameters
| Name | In | Required | Notes |
|---|---|---|---|
ref | path | yes |
Headers: Idempotency-Key, plus X-Request-Id.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
frozen | object | yes | |
frozen.channel | string | yes | min 1 chars |
frozen.configVersion | one of several shapes | ||
frozen.currency | string | yes | pattern ^[A-Z]{3}$ |
frozen.customerRef | string | max 200 chars | |
frozen.frozenAt | string (date-time) | yes | |
frozen.lines | array of object | yes | at least 1 |
frozen.lines[].amountMinor | integer | yes | |
frozen.lines[].beneficiaryRef | string | max 200 chars | |
frozen.lines[].description | string | max 500 chars | |
frozen.lines[].explanation | array of object | ||
frozen.lines[].lineRef | string | yes | min 1 chars |
frozen.lines[].offerId | string | max 200 chars | |
frozen.lines[].passengerIds | array of string | ||
frozen.lines[].productCode | string | yes | min 1 chars |
frozen.lines[].productType | string | yes | min 1 chars |
frozen.lines[].promotionIds | array of string | ||
frozen.lines[].quantity | integer | > 0; default 1 | |
frozen.lines[].sellingConditions | object | ||
frozen.lines[].serviceDate | string (date-time) | ||
frozen.market | string | max 60 chars | |
frozen.promotions | array of object | ||
frozen.promotions[].postBookingPolicy | enum: keep, recalculate, lose | yes | |
frozen.promotions[].promotionId | string | yes | min 1 chars |
frozen.promotions[].version | integer | ≥ 0 | |
frozen.quoteRef | string | yes | min 1 chars |
frozen.quoteVersion | integer | yes | ≥ 0 |
frozen.storeVersion | one of several shapes | ||
frozen.totalMinor | integer | yes | |
actorRef | string | yes | min 1 chars |
moment | string | yes | Purchase moment code from the orchestration configuration.; min 1 chars |
booker | object | ||
booker.displayName | string | max 200 chars | |
booker.kind | enum: customer, agency, agent, company | yes | |
booker.ref | string | yes | 1–200 chars |
payer | object | ||
payer.displayName | string | max 200 chars | |
payer.kind | enum: customer, agency, agent, company | yes | |
payer.ref | string | yes | 1–200 chars |
type | string | ||
fullPayment | boolean |
Response 200
/order-orchestration/quotations/QT-E419E9088B0D/convertConvert the quotation into the booking purchase ordercurl -X POST "$BASE/order-orchestration/quotations/QT-E419E9088B0D/convert" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0003" \
-H "Idempotency-Key: 7ac926d7-5cf4-478b-abdc-a05e8298b52c" \
-H "Content-Type: application/json" \
-d '{
"frozen": {
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"frozenAt": "2026-11-02T09:04:00Z",
"currency": "EUR",
"market": "IT",
"channel": "web",
"configVersion": 9,
"storeVersion": 14,
"customerRef": "CUST-20419",
"lines": [
{
"lineRef": "q-line-1",
"productType": "cruise",
"productCode": "MED7-2027-04-12",
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"quantity": 1,
"passengerIds": [
"PAX-01",
"PAX-02"
],
"amountMinor": 238000,
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [
"EARLY-BOOKING-10"
],
"explanation": [
{
"layer": "base",
"ruleId": "base-balcony",
"mode": "select",
"basis": "passenger",
"input": 0,
"contribution": 264400,
"runningTotal": 264400,
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"flag": "public",
"reason": {
"key": "layer.base",
"params": {}
}
},
{
"layer": "promotion",
"ruleId": "EARLY-BOOKING-10",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"contribution": -26400,
"runningTotal": 238000,
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"flag": "public",
"reason": {
"key": "layer.promotion",
"params": {}
}
}
],
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineRef": "q-line-2",
"productType": "beverage",
"productCode": "DRINKS-CLASSIC-7N",
"description": "Classic drinks package, 7 nights",
"quantity": 2,
"passengerIds": [
"PAX-01",
"PAX-02"
],
"amountMinor": 30800,
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [],
"explanation": []
}
],
"promotions": [
{
"promotionId": "EARLY-BOOKING-10",
"version": 3,
"postBookingPolicy": "keep"
}
],
"totalMinor": 268800
},
"actorRef": "CUST-20419",
"moment": "booking",
"booker": {
"kind": "customer",
"ref": "CUST-20419",
"displayName": "Giulia Rossi"
},
"payer": {
"kind": "customer",
"ref": "CUST-20419",
"displayName": "Giulia Rossi"
}
}'
HTTP/1.1 200
X-Request-Id: req-0003
{
"quotation": {
"quote": {
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quoteRef": "Q-2027-58213",
"totalMinor": 268800,
"validUntil": "2026-11-09T23:59:59Z",
"promotionIds": [
"EARLY-BOOKING-10"
],
"quoteVersion": 2
},
"market": "IT",
"status": "converted",
"tripId": "TRP-B2BD5A9771E4",
"channel": "web",
"intentId": "INT-E7814BE45E5F",
"agencyRef": null,
"createdAt": "2026-11-02T09:05:37.000Z",
"createdBy": {
"kind": "customer",
"actorRef": "CUST-20419"
},
"updatedAt": "2026-11-02T09:06:51.000Z",
"conversion": {
"poId": "PO-5BEE8AAD2A57",
"convertedAt": "2026-11-02T09:06:51.000Z",
"convertedBy": "CUST-20419"
},
"passengers": 2,
"customerRef": "CUST-20419",
"productCode": "MED7-2027-04-12",
"quotationRef": "QT-E419E9088B0D",
"lastAccessedAt": "2026-11-02T09:06:14.000Z"
},
"purchaseOrder": {
"poId": "PO-5BEE8AAD2A57",
"type": "standard",
"lines": [
{
"lineId": "L-A610167BDD4D",
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quantity": 1,
"ownership": {
"ruleId": "anchor-reservation",
"process": "create"
},
"amountMinor": 238000,
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"explanation": [
{
"flag": "public",
"mode": "select",
"basis": "passenger",
"input": 0,
"layer": "base",
"reason": {
"key": "layer.base",
"params": {}
},
"ruleId": "base-balcony",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": 264400,
"runningTotal": 264400
},
{
"flag": "public",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"layer": "promotion",
"reason": {
"key": "layer.promotion",
"params": {}
},
"ruleId": "EARLY-BOOKING-10",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": -26400,
"runningTotal": 238000
}
],
"externalRef": "RSV-66D6FC0F-000001",
"productCode": "MED7-2027-04-12",
"productType": "cruise",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [
"EARLY-BOOKING-10"
],
"quoteLineRef": "q-line-1",
"sourceSystem": "reservation",
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineId": "L-BB4F731FB7C8",
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quantity": 2,
"ownership": {
"ruleId": "beverage-phase1",
"process": "create"
},
"amountMinor": 30800,
"description": "Classic drinks package, 7 nights",
"explanation": [],
"productCode": "DRINKS-CLASSIC-7N",
"productType": "beverage",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [],
"quoteLineRef": "q-line-2",
"sourceSystem": "onboard"
}
],
"payer": {
"ref": "CUST-20419",
"kind": "customer",
"displayName": "Giulia Rossi"
},
"terms": {},
"booker": {
"ref": "CUST-20419",
"kind": "customer",
"displayName": "Giulia Rossi"
},
"market": "IT",
"moment": "booking",
"origin": {
"channel": "web",
"actorRef": "CUST-20419"
},
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"tripId": "TRP-B2BD5A9771E4",
"channel": "web",
"version": 3,
"currency": "EUR",
"sequence": 1,
"createdAt": "2026-11-02T09:06:51.000Z",
"revisions": [],
"updatedAt": "2026-11-02T09:06:51.000Z",
"totalMinor": 268800,
"attribution": {},
"fullPayment": false,
"finalisation": {
"at": "2026-11-02T09:06:51.000Z",
"channel": "web"
},
"quotationRef": "QT-E419E9088B0D",
"partiesLocked": true,
"frozenConditions": {
"document": {
"lines": [
{
"lineRef": "q-line-1",
"offerId": "ALL-INCLUSIVE-2027",
"quantity": 1,
"amountMinor": 238000,
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"explanation": [
{
"flag": "public",
"mode": "select",
"basis": "passenger",
"input": 0,
"layer": "base",
"reason": {
"key": "layer.base",
"params": {}
},
"ruleId": "base-balcony",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": 264400,
"runningTotal": 264400
},
{
"flag": "public",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"layer": "promotion",
"reason": {
"key": "layer.promotion",
"params": {}
},
"ruleId": "EARLY-BOOKING-10",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": -26400,
"runningTotal": 238000
}
],
"productCode": "MED7-2027-04-12",
"productType": "cruise",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [
"EARLY-BOOKING-10"
],
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineRef": "q-line-2",
"offerId": "ALL-INCLUSIVE-2027",
"quantity": 2,
"amountMinor": 30800,
"description": "Classic drinks package, 7 nights",
"explanation": [],
"productCode": "DRINKS-CLASSIC-7N",
"productType": "beverage",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": []
}
],
"market": "IT",
"channel": "web",
"currency": "EUR",
"frozenAt": "2026-11-02T09:04:00Z",
"quoteRef": "Q-2027-58213",
"promotions": [
{
"version": 3,
"promotionId": "EARLY-BOOKING-10",
"postBookingPolicy": "keep"
}
],
"totalMinor": 268800,
"customerRef": "CUST-20419",
"quoteVersion": 2,
"storeVersion": 14,
"configVersion": 9
},
"frozenAt": "2026-11-02T09:04:00Z",
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"storeVersion": 14,
"configVersion": 9
}
}
}
/order-orchestration/quotations/QT-E419E9088B0D/convertRetry the conversion with the same Idempotency-Keycurl -X POST "$BASE/order-orchestration/quotations/QT-E419E9088B0D/convert" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0004" \
-H "Idempotency-Key: 7ac926d7-5cf4-478b-abdc-a05e8298b52c" \
-H "Content-Type: application/json" \
-d '{
"frozen": {
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"frozenAt": "2026-11-02T09:04:00Z",
"currency": "EUR",
"market": "IT",
"channel": "web",
"configVersion": 9,
"storeVersion": 14,
"customerRef": "CUST-20419",
"lines": [
{
"lineRef": "q-line-1",
"productType": "cruise",
"productCode": "MED7-2027-04-12",
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"quantity": 1,
"passengerIds": [
"PAX-01",
"PAX-02"
],
"amountMinor": 238000,
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [
"EARLY-BOOKING-10"
],
"explanation": [
{
"layer": "base",
"ruleId": "base-balcony",
"mode": "select",
"basis": "passenger",
"input": 0,
"contribution": 264400,
"runningTotal": 264400,
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"flag": "public",
"reason": {
"key": "layer.base",
"params": {}
}
},
{
"layer": "promotion",
"ruleId": "EARLY-BOOKING-10",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"contribution": -26400,
"runningTotal": 238000,
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"flag": "public",
"reason": {
"key": "layer.promotion",
"params": {}
}
}
],
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineRef": "q-line-2",
"productType": "beverage",
"productCode": "DRINKS-CLASSIC-7N",
"description": "Classic drinks package, 7 nights",
"quantity": 2,
"passengerIds": [
"PAX-01",
"PAX-02"
],
"amountMinor": 30800,
"offerId": "ALL-INCLUSIVE-2027",
"promotionIds": [],
"explanation": []
}
],
"promotions": [
{
"promotionId": "EARLY-BOOKING-10",
"version": 3,
"postBookingPolicy": "keep"
}
],
"totalMinor": 268800
},
"actorRef": "CUST-20419",
"moment": "booking",
"booker": {
"kind": "customer",
"ref": "CUST-20419",
"displayName": "Giulia Rossi"
},
"payer": {
"kind": "customer",
"ref": "CUST-20419",
"displayName": "Giulia Rossi"
}
}'
HTTP/1.1 200
X-Request-Id: req-0004
Idempotent-Replayed: true
{
"quotation": {
"quote": {
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quoteRef": "Q-2027-58213",
"totalMinor": 268800,
"validUntil": "2026-11-09T23:59:59Z",
"promotionIds": [
"EARLY-BOOKING-10"
],
"quoteVersion": 2
},
"market": "IT",
"status": "converted",
"tripId": "TRP-B2BD5A9771E4",
"channel": "web",
"intentId": "INT-E7814BE45E5F",
"agencyRef": null,
"createdAt": "2026-11-02T09:05:37.000Z",
"createdBy": {
"kind": "customer",
"actorRef": "CUST-20419"
},
"updatedAt": "2026-11-02T09:06:51.000Z",
"conversion": {
"poId": "PO-5BEE8AAD2A57",
"convertedAt": "2026-11-02T09:06:51.000Z",
"convertedBy": "CUST-20419"
},
"passengers": 2,
"customerRef": "CUST-20419",
"productCode": "MED7-2027-04-12",
"quotationRef": "QT-E419E9088B0D",
"lastAccessedAt": "2026-11-02T09:06:14.000Z"
},
"purchaseOrder": {
"poId": "PO-5BEE8AAD2A57",
"type": "standard",
"lines": [
{
"lineId": "L-A610167BDD4D",
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quantity": 1,
"ownership": {
"ruleId": "anchor-reservation",
"process": "create"
},
"amountMinor": 238000,
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"explanation": [
{
"flag": "public",
"mode": "select",
"basis": "passenger",
"input": 0,
"layer": "base",
"reason": {
"key": "layer.base",
"params": {}
},
"ruleId": "base-balcony",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": 264400,
"runningTotal": 264400
},
{
"flag": "public",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"layer": "promotion",
"reason": {
"key": "layer.promotion",
"params": {}
},
"ruleId": "EARLY-BOOKING-10",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": -26400,
"runningTotal": 238000
}
],
"externalRef": "RSV-66D6FC0F-000001",
"productCode": "MED7-2027-04-12",
"productType": "cruise",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [
"EARLY-BOOKING-10"
],
"quoteLineRef": "q-line-1",
"sourceSystem": "reservation",
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineId": "L-BB4F731FB7C8",
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"offerId": "ALL-INCLUSIVE-2027",
"currency": "EUR",
"quantity": 2,
"ownership": {
"ruleId": "beverage-phase1",
"process": "create"
},
"amountMinor": 30800,
"description": "Classic drinks package, 7 nights",
"explanation": [],
"productCode": "DRINKS-CLASSIC-7N",
"productType": "beverage",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [],
"quoteLineRef": "q-line-2",
"sourceSystem": "onboard"
}
],
"payer": {
"ref": "CUST-20419",
"kind": "customer",
"displayName": "Giulia Rossi"
},
"terms": {},
"booker": {
"ref": "CUST-20419",
"kind": "customer",
"displayName": "Giulia Rossi"
},
"market": "IT",
"moment": "booking",
"origin": {
"channel": "web",
"actorRef": "CUST-20419"
},
"status": {
"billing": "not_billed",
"payment": "not_due",
"commercial": "booked",
"fulfilment": "requested"
},
"tripId": "TRP-B2BD5A9771E4",
"channel": "web",
"version": 3,
"currency": "EUR",
"sequence": 1,
"createdAt": "2026-11-02T09:06:51.000Z",
"revisions": [],
"updatedAt": "2026-11-02T09:06:51.000Z",
"totalMinor": 268800,
"attribution": {},
"fullPayment": false,
"finalisation": {
"at": "2026-11-02T09:06:51.000Z",
"channel": "web"
},
"quotationRef": "QT-E419E9088B0D",
"partiesLocked": true,
"frozenConditions": {
"document": {
"lines": [
{
"lineRef": "q-line-1",
"offerId": "ALL-INCLUSIVE-2027",
"quantity": 1,
"amountMinor": 238000,
"description": "7-night Western Mediterranean, balcony cabin, 2 guests",
"explanation": [
{
"flag": "public",
"mode": "select",
"basis": "passenger",
"input": 0,
"layer": "base",
"reason": {
"key": "layer.base",
"params": {}
},
"ruleId": "base-balcony",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": 264400,
"runningTotal": 264400
},
{
"flag": "public",
"mode": "adjust",
"basis": "booking",
"input": 264400,
"layer": "promotion",
"reason": {
"key": "layer.promotion",
"params": {}
},
"ruleId": "EARLY-BOOKING-10",
"source": {
"kind": "store",
"version": 14,
"timestamp": "2026-10-30T00:00:00Z"
},
"contribution": -26400,
"runningTotal": 238000
}
],
"productCode": "MED7-2027-04-12",
"productType": "cruise",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": [
"EARLY-BOOKING-10"
],
"sellingConditions": {
"refundable": true,
"depositPercent": 20
}
},
{
"lineRef": "q-line-2",
"offerId": "ALL-INCLUSIVE-2027",
"quantity": 2,
"amountMinor": 30800,
"description": "Classic drinks package, 7 nights",
"explanation": [],
"productCode": "DRINKS-CLASSIC-7N",
"productType": "beverage",
"passengerIds": [
"PAX-01",
"PAX-02"
],
"promotionIds": []
}
],
"market": "IT",
"channel": "web",
"currency": "EUR",
"frozenAt": "2026-11-02T09:04:00Z",
"quoteRef": "Q-2027-58213",
"promotions": [
{
"version": 3,
"promotionId": "EARLY-BOOKING-10",
"postBookingPolicy": "keep"
}
],
"totalMinor": 268800,
"customerRef": "CUST-20419",
"quoteVersion": 2,
"storeVersion": 14,
"configVersion": 9
},
"frozenAt": "2026-11-02T09:04:00Z",
"quoteRef": "Q-2027-58213",
"quoteVersion": 2,
"storeVersion": 14,
"configVersion": 9
}
}
}
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 | not_found | The trip, purchase order, quotation or configuration item does not exist. |
| 404 | not_enabled | Order orchestration is not enabled for the tenant. |
| 409 | already_converted | The quotation has already been converted to a different quote version. |
| 409 | not_open | The quotation is not open. |
| 409 | quote_mismatch | The frozen conditions belong to a different quote than the quotation tracks. |
| 409 | frozen_conditions_mismatch | The frozen money posted differs from the accepted quote (tenants with verify_frozen_conditions). |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. Retry after the Retry-After interval. |
| 422 | unknown_moment | The purchase moment is not in the orchestration configuration. |
| 422 | idempotency_key_reused | The Idempotency-Key was used for a different request. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |
| 503 | handover_source_unavailable | The quote store could not be reached to verify frozen conditions. |
Quotation conversion report
/order-orchestration/quotations/reportVolume, conversion rate and ageing of quotations by market, channel and product.
Response 200
/order-orchestration/quotations/reportQuotation conversion reportcurl -X GET "$BASE/order-orchestration/quotations/report" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0029"
HTTP/1.1 200
X-Request-Id: req-0029
[
{
"market": "IT",
"channel": "web",
"productCode": "MED7-2027-04-12",
"total": 1,
"converted": 1,
"open": 0,
"superseded": 0,
"conversionRate": 1,
"ageing": {
"d0_7": 0,
"d8_30": 0,
"d31_plus": 0
}
}
]
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 | not_enabled | Order orchestration is not enabled for the tenant. |
| 500 | internal | Unexpected failure. Retry with the same Idempotency-Key. |