Skip to main content

Block requests

Group requests from tour operators, agencies and MICE organisers. A request is drafted, priced, submitted, decided and accepted, which creates the group agreement.

OperationEndpoint
List block requestsGET /group-sales/group-requests
Create a block requestPOST /group-sales/group-requests
Read a block requestGET /group-sales/group-requests/{id}
Accept the offerPOST /group-sales/group-requests/{id}/accept
Approve, counter-offer or refuse a requestPOST /group-sales/group-requests/{id}/decision
Author the group farePUT /group-sales/group-requests/{id}/fare
Change the fare of an offered requestPOST /group-sales/group-requests/{id}/fare-change
Suggest a group farePOST /group-sales/group-requests/{id}/fare-suggestion
Create a quote linked to the requestPOST /group-sales/group-requests/{id}/linked-quotes
Submit a request for approvalPOST /group-sales/group-requests/{id}/submit
List cabins held by open requests on a departureGET /group-sales/group-requests/cabin-holds
Confirm a linked quotePOST /group-sales/linked-quotes/{id}/confirm

List block requests​

GET/group-sales/group-requests

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Create a block request​

POST/group-sales/group-requests

Counts per cabin category, with optional cabinNumbers when specific cabins are picked from the deck plan.

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
agreementTypestringyes1–60 chars
attributesmap of string
categoriesarray of objectyesat least 1
categories[].cabinNumbersarray of stringat most 200
categories[].categoryRefstringyes1–200 chars
categories[].labelstringmax 200 chars
categories[].unitsintegeryes> 0
currencystringyespattern ^[A-Z]{3}$
departureobjectyes
departure.departureDatestringyespattern ^\d{4}-\d{2}-\d{2}$
departure.labelstringmax 200 chars
departure.refstringyes1–200 chars
departure.returnDatestringpattern ^\d{4}-\d{2}-\d{2}$
holderobjectyes
holder.contactstringmax 320 chars
holder.kindstring1–60 chars
holder.namestringmax 200 chars
holder.refstringyes1–200 chars
itemAttributesmap of string
leaderobject
leader.contactstringmax 320 chars
leader.kindstring1–60 chars
leader.namestringmax 200 chars
leader.refstringyes1–200 chars
namestringyes1–200 chars
notestringmax 2000 chars
organiserobjectyes
organiser.contactstringmax 320 chars
organiser.kindstring1–60 chars
organiser.namestringmax 200 chars
organiser.refstringyes1–200 chars
productobjectyes
product.attributesmap of string
product.departureRefstring1–200 chars
product.labelstringmax 200 chars
product.nightsintegeryes> 0
product.productIdstringyes1–200 chars
termsobjectyes
terms.commissionmap of objectyes
terms.depositStagesarray of object
terms.freePlacesmap of object
terms.minimumUnitsinteger> 0
terms.releasemap of object
terms.valueAddsarray of string

Schema: apps/journeys/src/group-sales/contracts.ts (GroupRequestInputSchema)

Response 201

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409cabin_already_heldThe cabin is already held by another request.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Read a block request​

GET/group-sales/group-requests/{id}

Parameters

NameInRequiredNotes
idpathyes

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Accept the offer​

POST/group-sales/group-requests/{id}/accept

The agreement becomes contracted.

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
reasonstringmax 2000 chars

Schema: apps/journeys/src/group-sales/contracts.ts (AcceptSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409not_offeredThe request or offer is not in the offered state.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Approve, counter-offer or refuse a request​

POST/group-sales/group-requests/{id}/decision

The decider is bound to the token or session, must hold a decider role, and must differ from the author and submitter (four-eyes).

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobject
actor.channelstringmax 60 chars
actor.idstring1–200 chars
actor.namestring1–200 chars
actor.rolestring1–100 chars
counterOfferobject
counterOffer.categoriesarray of objectyesat least 1
counterOffer.categories[].categoryRefstringyes1–200 chars
counterOffer.categories[].groupFareMinorintegeryes> 0
counterOffer.summarystringyes1–1000 chars
decisionenum: approve, counter_offer, refuseyes
reasonstringmax 1000 chars

Schema: apps/journeys/src/group-sales/contracts.ts (DecisionSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409not_pending_approvalThe agreement or request is not pending approval.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Author the group fare​

PUT/group-sales/group-requests/{id}/fare

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
categoriesarray of objectyesat least 1
categories[].categoryRefstringyes1–200 chars
categories[].groupFareMinorintegeryes> 0
chargesLabelstringmax 100 chars
chargesPerGuestMinorinteger≥ 0; default 0
expectedVersioninteger> 0
priceValidUntilstringpattern ^\d{4}-\d{2}-\d{2}$
sourceenum: agent, assistantdefault "agent"

Schema: apps/journeys/src/group-sales/contracts.ts (AuthorFareSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Change the fare of an offered request​

POST/group-sales/group-requests/{id}/fare-change

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
categoriesarray of objectyesat least 1
categories[].categoryRefstringyes1–200 chars
categories[].groupFareMinorintegeryes> 0
expectedAgreementVersionintegeryes> 0
reasonstringyes1–2000 chars

Schema: apps/journeys/src/group-sales/contracts.ts (FareChangeSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Suggest a group fare​

POST/group-sales/group-requests/{id}/fare-suggestion

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Create a quote linked to the request​

POST/group-sales/group-requests/{id}/linked-quotes

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
leadContactobject
leadContact.contactstringmax 320 chars
leadContact.namestringmax 200 chars
leadContact.refstringyes1–200 chars
unitobjectyes
unit.categorystringyes1–60 chars
unit.guestsarray of objectyesat least 1
unit.guests[].ageBandstringyes1–40 chars
unit.guests[].idstringyes1–200 chars
unit.guests[].namestringyes1–200 chars
unit.labelstringmax 200 chars
unit.unitIdstringyes1–200 chars

Schema: apps/journeys/src/group-sales/contracts.ts (LinkedQuoteInputSchema)

Response 201

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Submit a request for approval​

POST/group-sales/group-requests/{id}/submit

Creates the group agreement in pending_approval.

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars
deadlinestring (date-time)

Schema: apps/journeys/src/group-sales/contracts.ts (SubmitRequestSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.

List cabins held by open requests on a departure​

GET/group-sales/group-requests/cabin-holds

Parameters

NameInRequiredNotes
departureRefqueryyes

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
500internalUnexpected failure. Retry with the same Idempotency-Key.

Confirm a linked quote​

POST/group-sales/linked-quotes/{id}/confirm

Parameters

NameInRequiredNotes
idpathyes

Headers: Idempotency-Key, plus X-Request-Id.

Request body

FieldTypeRequiredNotes
actorobjectyes
actor.channelstringmax 60 chars
actor.idstringyes1–200 chars
actor.namestringmax 200 chars
actor.rolestringyes1–100 chars

Schema: apps/journeys/src/group-sales/contracts.ts (ConfirmLinkedQuoteSchema)

Response 200

Errors
StatusCodeMeaning
400invalid_requestThe request failed validation. The message names the first failing field; oms-ops and group surfaces also return every issue in details.
401unauthenticatedThe bearer token is missing, invalid, expired or minted for another purpose.
403scope_forbiddenThe token is scoped to an agency or an access scope; this surface requires an unscoped tenant token.
404group_sales_not_enabledGroup sales are not enabled for the tenant.
409idempotency_in_progressA request with this Idempotency-Key is still running. Retry after the Retry-After interval.
422idempotency_key_reusedThe Idempotency-Key was used for a different request.
500internalUnexpected failure. Retry with the same Idempotency-Key.