Skip to main content

Registering a channel

This guide adds a channel, a self-service kiosk in the cruise terminal, through the configuration API: read, validate, publish, audit. Connected systems, ownership rules, moments and markets are changed the same way. The requests and responses were captured from the service.

1. Read the current configuration​

The response carries the document and the version to build on. source: tenant_file means no version has been published through the API yet.

GET/order-orchestration/configRead the effective orchestration configuration
Request
curl -X GET "$BASE/order-orchestration/config" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0030"
Response
HTTP/1.1 200
X-Request-Id: req-0030
{
"config": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
},
"version": 0,
"source": "tenant_file",
"latestVersion": 0,
"governedReads": false
}

2. Validate the change​

Add kiosk to channels and validate the document. Nothing is published.

POST/order-orchestration/config/validateDry-run a configuration that registers a new channel
Request
curl -X POST "$BASE/order-orchestration/config/validate" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0031" \
-H "Content-Type: application/json" \
-d '{
"config": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
}
}'
Response
HTTP/1.1 200
X-Request-Id: req-0031
{
"ok": true,
"issues": []
}

Validation checks references across the document. A rule that sends kiosk sales to a system that is not declared is refused with the path of the problem:

POST/order-orchestration/config/validateDry-run a configuration with a rule that names an unknown system
Request
curl -X POST "$BASE/order-orchestration/config/validate" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0032" \
-H "Content-Type: application/json" \
-d '{
"config": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
},
{
"id": "kiosk-excursions",
"process": "*",
"when": {
"channel": [
"kiosk"
]
},
"owner": "kiosk-pos"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
}
}'
Response
HTTP/1.1 422
X-Request-Id: req-0032
{
"ok": false,
"issues": [
{
"path": "ownership_rules[7].owner",
"code": "unknown_system",
"message": "unknown owner 'kiosk-pos'"
}
],
"code": "unprocessable",
"message": "Unprocessable Entity",
"requestId": "req-0032"
}

3. Publish it​

Publish with expectedVersion (the version you read), an actor and a reason. If someone published in between, the call is refused with 409 version_conflict and you start again from step 1.

PUT/order-orchestration/configPublish the configuration with the new channel
Request
curl -X PUT "$BASE/order-orchestration/config" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0033" \
-H "Idempotency-Key: 5f64d379-4088-4636-a708-494fcc1f8b04" \
-H "Content-Type: application/json" \
-d '{
"config": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
},
"expectedVersion": 0,
"actor": {
"id": "ops-config-admin",
"name": "Elena Galli",
"role": "oms_admin",
"channel": "api"
},
"reason": "Register the port kiosk channel"
}'
Response
HTTP/1.1 200
X-Request-Id: req-0033
{
"version": {
"tenantId": "meridian",
"documentType": "order_orchestration",
"documentId": "default",
"version": 1,
"document": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
},
"createdAt": "2026-11-02T09:06:42.000Z",
"createdBy": {
"id": "ops-config-admin",
"name": "Elena Galli",
"role": "oms_admin",
"channel": "api"
}
},
"audit": {
"id": "e7b2f846-31b1-4d66-a7d8-5473e65b804e",
"tenantId": "meridian",
"documentType": "order_orchestration",
"documentId": "default",
"action": "create",
"version": 1,
"previousVersion": null,
"restoredFrom": null,
"actor": {
"id": "ops-config-admin",
"name": "Elena Galli",
"role": "oms_admin",
"channel": "api"
},
"at": "2026-11-02T09:06:42.000Z",
"reason": "Register the port kiosk channel",
"changeSetId": null,
"before": null,
"after": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
},
"changes": [
{
"path": "$",
"before": null,
"after": {
"version": 1,
"trip": {
"anchor_product_types": [
"cruise"
],
"id_prefix": "TRP"
},
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"ownership_rules": [
{
"id": "anchor-reservation",
"process": "*",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"priority": 0
},
{
"id": "onboard-moment",
"process": "*",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "excursions",
"process": "*",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"priority": 0
},
{
"id": "excursions-onboard",
"process": "*",
"when": {
"product_type": [
"excursion"
],
"moment": [
"onboard"
]
},
"owner": "onboard",
"priority": 0
},
{
"id": "billing-finance",
"process": "billing",
"when": {},
"owner": "finance",
"priority": 0
},
{
"id": "beverage-phase1",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"process": "create",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"feedback": {
"expectations": [
{
"id": "reservation-create",
"system": "reservation",
"process": "create",
"expect": [
"booking.confirmed",
"booking.rejected"
]
},
{
"id": "reservation-modify",
"system": "reservation",
"process": "modify",
"expect": [
"booking.modified"
]
},
{
"id": "reservation-cancel",
"system": "reservation",
"process": "cancel",
"expect": [
"booking.cancelled"
]
},
{
"id": "excursions-create",
"system": "excursions",
"process": "create",
"expect": [
"service.confirmed"
]
},
{
"id": "onboard-create",
"system": "onboard",
"process": "create",
"expect": [
"onboard.posted"
]
}
],
"alert_rules": [
{
"id": "reservation-feedback-late",
"signal": "status_feedback.pending",
"match": {
"system": [
"reservation"
]
},
"after_seconds": 300,
"severity": "critical",
"priority": 0,
"enabled": true
},
{
"id": "feedback-late",
"signal": "status_feedback.pending",
"match": {},
"after_seconds": 3600,
"severity": "warning",
"priority": 0,
"enabled": true
}
]
},
"event_catalogue": [],
"quotations": {
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
},
"inactivity_days": 30
},
"line_availability": []
}
}
]
},
"warnings": []
}

4. Check the audit trail​

Every version is kept with who changed what, when and why, and the field-level differences.

GET/order-orchestration/config/historyRead the configuration history and audit trail
Request
curl -X GET "$BASE/order-orchestration/config/history" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0034"
Response
HTTP/1.1 200
X-Request-Id: req-0034
{
"versions": [
{
"tenantId": "meridian",
"documentType": "order_orchestration",
"documentId": "default",
"version": 1,
"document": {
"trip": {
"id_prefix": "TRP",
"anchor_product_types": [
"cruise"
]
},
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"version": 1,
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"feedback": {
"alert_rules": [
{
"id": "reservation-feedback-late",
"match": {
"system": [
"reservation"
]
},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "critical",
"after_seconds": 300
},
{
"id": "feedback-late",
"match": {},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "warning",
"after_seconds": 3600
}
],
"expectations": [
{
"id": "reservation-create",
"expect": [
"booking.confirmed",
"booking.rejected"
],
"system": "reservation",
"process": "create"
},
{
"id": "reservation-modify",
"expect": [
"booking.modified"
],
"system": "reservation",
"process": "modify"
},
{
"id": "reservation-cancel",
"expect": [
"booking.cancelled"
],
"system": "reservation",
"process": "cancel"
},
{
"id": "excursions-create",
"expect": [
"service.confirmed"
],
"system": "excursions",
"process": "create"
},
{
"id": "onboard-create",
"expect": [
"onboard.posted"
],
"system": "onboard",
"process": "create"
}
]
},
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"quotations": {
"inactivity_days": 30,
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
}
},
"event_catalogue": [],
"ownership_rules": [
{
"id": "anchor-reservation",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"process": "*",
"priority": 0
},
{
"id": "onboard-moment",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "excursions",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"process": "*",
"priority": 0
},
{
"id": "excursions-onboard",
"when": {
"moment": [
"onboard"
],
"product_type": [
"excursion"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "billing-finance",
"when": {},
"owner": "finance",
"process": "billing",
"priority": 0
},
{
"id": "beverage-phase1",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"process": "create",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"process": "create",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"line_availability": []
},
"createdAt": "2026-11-02T09:06:42.000Z",
"createdBy": {
"id": "ops-config-admin",
"name": "Elena Galli",
"role": "oms_admin",
"channel": "api"
}
}
],
"audit": [
{
"id": "e7b2f846-31b1-4d66-a7d8-5473e65b804e",
"tenantId": "meridian",
"documentType": "order_orchestration",
"documentId": "default",
"action": "create",
"version": 1,
"previousVersion": null,
"restoredFrom": null,
"actor": {
"id": "ops-config-admin",
"name": "Elena Galli",
"role": "oms_admin",
"channel": "api"
},
"at": "2026-11-02T09:06:42.000Z",
"reason": "Register the port kiosk channel",
"changeSetId": null,
"before": null,
"after": {
"trip": {
"id_prefix": "TRP",
"anchor_product_types": [
"cruise"
]
},
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"version": 1,
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"feedback": {
"alert_rules": [
{
"id": "reservation-feedback-late",
"match": {
"system": [
"reservation"
]
},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "critical",
"after_seconds": 300
},
{
"id": "feedback-late",
"match": {},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "warning",
"after_seconds": 3600
}
],
"expectations": [
{
"id": "reservation-create",
"expect": [
"booking.confirmed",
"booking.rejected"
],
"system": "reservation",
"process": "create"
},
{
"id": "reservation-modify",
"expect": [
"booking.modified"
],
"system": "reservation",
"process": "modify"
},
{
"id": "reservation-cancel",
"expect": [
"booking.cancelled"
],
"system": "reservation",
"process": "cancel"
},
{
"id": "excursions-create",
"expect": [
"service.confirmed"
],
"system": "excursions",
"process": "create"
},
{
"id": "onboard-create",
"expect": [
"onboard.posted"
],
"system": "onboard",
"process": "create"
}
]
},
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"quotations": {
"inactivity_days": 30,
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
}
},
"event_catalogue": [],
"ownership_rules": [
{
"id": "anchor-reservation",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"process": "*",
"priority": 0
},
{
"id": "onboard-moment",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "excursions",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"process": "*",
"priority": 0
},
{
"id": "excursions-onboard",
"when": {
"moment": [
"onboard"
],
"product_type": [
"excursion"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "billing-finance",
"when": {},
"owner": "finance",
"process": "billing",
"priority": 0
},
{
"id": "beverage-phase1",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"process": "create",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"process": "create",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"line_availability": []
},
"changes": [
{
"path": "$",
"after": {
"trip": {
"id_prefix": "TRP",
"anchor_product_types": [
"cruise"
]
},
"markets": [
"IT",
"FR",
"DE",
"ES"
],
"moments": [
"booking",
"pre_trip",
"onboard"
],
"systems": [
{
"id": "reservation",
"label": "Reservation system",
"domains": [
"reservation"
]
},
{
"id": "onboard",
"label": "Onboard POS and guest account",
"domains": [
"onboard"
]
},
{
"id": "excursions",
"label": "Excursion system",
"domains": [
"excursions"
]
},
{
"id": "crm",
"label": "Customer and agency master",
"domains": [
"crm",
"loyalty"
]
},
{
"id": "finance",
"label": "Finance and billing",
"domains": [
"finance"
]
}
],
"version": 1,
"channels": [
"web",
"app",
"contact_centre",
"agency",
"onboard",
"kiosk"
],
"feedback": {
"alert_rules": [
{
"id": "reservation-feedback-late",
"match": {
"system": [
"reservation"
]
},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "critical",
"after_seconds": 300
},
{
"id": "feedback-late",
"match": {},
"signal": "status_feedback.pending",
"enabled": true,
"priority": 0,
"severity": "warning",
"after_seconds": 3600
}
],
"expectations": [
{
"id": "reservation-create",
"expect": [
"booking.confirmed",
"booking.rejected"
],
"system": "reservation",
"process": "create"
},
{
"id": "reservation-modify",
"expect": [
"booking.modified"
],
"system": "reservation",
"process": "modify"
},
{
"id": "reservation-cancel",
"expect": [
"booking.cancelled"
],
"system": "reservation",
"process": "cancel"
},
{
"id": "excursions-create",
"expect": [
"service.confirmed"
],
"system": "excursions",
"process": "create"
},
{
"id": "onboard-create",
"expect": [
"onboard.posted"
],
"system": "onboard",
"process": "create"
}
]
},
"processes": [
"create",
"modify",
"cancel",
"payment",
"fulfilment",
"billing"
],
"quotations": {
"inactivity_days": 30,
"required_fields": {
"default": [
"anchor.productId"
],
"by_channel": {
"agency": [
"anchor.productId",
"agencyRef"
]
}
}
},
"event_catalogue": [],
"ownership_rules": [
{
"id": "anchor-reservation",
"when": {
"product_type": [
"cruise"
]
},
"owner": "reservation",
"process": "*",
"priority": 0
},
{
"id": "onboard-moment",
"when": {
"moment": [
"onboard"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "excursions",
"when": {
"product_type": [
"excursion"
]
},
"owner": "excursions",
"process": "*",
"priority": 0
},
{
"id": "excursions-onboard",
"when": {
"moment": [
"onboard"
],
"product_type": [
"excursion"
]
},
"owner": "onboard",
"process": "*",
"priority": 0
},
{
"id": "billing-finance",
"when": {},
"owner": "finance",
"process": "billing",
"priority": 0
},
{
"id": "beverage-phase1",
"when": {
"product_type": [
"beverage"
]
},
"owner": "onboard",
"process": "create",
"priority": 0,
"effective_until": "2027-03-01T00:00:00Z"
},
{
"id": "beverage-phase2",
"when": {
"product_type": [
"beverage"
]
},
"owner": "oms",
"process": "create",
"priority": 0,
"effective_from": "2027-03-01T00:00:00Z"
}
],
"line_availability": []
},
"before": null
}
]
}
]
}

To undo, POST /order-orchestration/config/rollback with toVersion publishes a new version equal to the older one.

Inspecting rules before publishing​

The configuration views accept version and at, so you can check how a draft or a time-boxed rule resolves. For example, which system creates an excursion bought onboard:

GET/order-orchestration/ownership/resolveResolve which system owns a process
Request
curl -X GET "$BASE/order-orchestration/ownership/resolve?process=create&productType=excursion&channel=onboard&moment=onboard" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Request-Id: req-0026"
Response
HTTP/1.1 200
X-Request-Id: req-0026
{
"owner": "onboard",
"ruleId": "excursions-onboard",
"trace": [
{
"ruleId": "anchor-reservation",
"outcome": "no_match",
"detail": "product_type excursion"
},
{
"ruleId": "billing-finance",
"outcome": "no_match",
"detail": "process create"
},
{
"ruleId": "beverage-phase1",
"outcome": "no_match",
"detail": "product_type excursion"
},
{
"ruleId": "beverage-phase2",
"outcome": "no_match",
"detail": "product_type excursion"
},
{
"ruleId": "onboard-moment",
"outcome": "outranked"
},
{
"ruleId": "excursions",
"outcome": "outranked"
},
{
"ruleId": "excursions-onboard",
"outcome": "selected"
}
],
"notify": [],
"onFailure": null
}