Bookings
Booking Reservation
A reseller has to perform Availability Check to retrieve an availabilityId
in order to make a Booking Reservation.
Reserving availability when making a booking. The steps to make a reservation are:
Check Availability: Check the availability on the /availability endpoint to retrieve an
availabilityId
Booking Reservation (this step): Create a booking that reserves the availability while you collect payment and contact information from the customer. The booking will remain with status
ON_HOLD
until the booking is confirmed or the reservation hold expires.
The availability for the booking is held for the amount of time equal to theexpirationMinutes
parameter (if provided), up to an internal limit set by either the supplier or the OCTo provider. The utc_expires_at
parameter in the response object will indicate when a reservtion will expire. A reservation can be extended by calling the /bookings/{uuid}/extend endpoint.
A reserved booking can be confirmed after the customer finalizes their choice on the /bookings/{uuid}/confirm endpoint provided the reservation had not expired.
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
A unique UUID to identify the booking. Setting this value acts like an idempotency key preventing you from double booking.
559aed3d-6d5b-4fe0-bfca-99f5e7218a56
The product ID for this booking.
6b903d44-dc24-4ca4-ae71-6bde6c4f4854
The option ID for this booking.
DEFAULT
The availability ID for the selected timeslot.
2022-05-23T00:00:00+01:00
How many minutes to reserve the availability, otherwise defaults to the supplier default amount.
30
Optional notes for the booking.
Optional notes
Can be used only when pricing capability is used.
USD
The request has succeeded.
The server could not understand the request due to invalid syntax.
POST /api/octo/bookings/ HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Content-Type: application/json
Accept: */*
Content-Length: 326
{
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"optionId": "DEFAULT",
"availabilityId": "2022-05-23T00:00:00+01:00",
"notes": "Optional notes",
"unitItems": [
{
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
},
{
"unitId": "child_797e3ce8-1860-4cbf-80ad-95857df1f640"
},
{
"unitId": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640"
}
]
}
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "ON_HOLD",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": "2022-05-25T11:04:22Z",
"utcRedeemedAt": null,
"utcConfirmedAt": null,
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": null,
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": null,
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": null
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33b",
"supplierReference": "K9T7R5",
"unitId": "child_797e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": null
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33c",
"supplierReference": "K9T7R6",
"unitId": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": null
}
]
}
Booking Confirmation
This endpoint confirms the booking so it's ready to be used.
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false)
true
Your reference for this booking. Also known as a Voucher Number.
VOUCHER-0123
Contact details for the main guest who will attend the tour/attraction. Contact BODY can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information).
{"fullName":"John Doe","firstName":"John","lastName":"Doe","emailAddress":"[email protected]","phoneNumber":"+447840739436","locales":["en","en-GB","en-US"],"country":"GB"}
The request has succeeded.
The server could not understand the request due to invalid syntax.
POST /api/octo/bookings/{uuid}/confirm HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Content-Type: application/json
Accept: */*
Content-Length: 219
{
"resellerReference": "VOUCHER-0123",
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "+447840739436",
"locales": [
"en",
"en-GB",
"en-US"
],
"country": "GB"
}
}
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CONFIRMED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": null,
"utcRedeemedAt": null,
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": null,
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
},
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33b",
"supplierReference": "K9T7R5",
"unitId": "child_797e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33c",
"supplierReference": "K9T7R6",
"unitId": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
}
]
}
Booking Cancellation
For cancelling bookings. You can only cancel a booking if booking.cancellable
is TRUE
, and is within the booking cancellation cut-off window.
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
A text value describing why the cancellation happened.
Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false)
Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false)
false
The request has succeeded.
The server could not understand the request due to invalid syntax.
POST /api/octo/bookings/{uuid}/cancel HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Content-Type: application/json
Accept: */*
Content-Length: 31
{
"reason": "this product sucks"
}
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CANCELLED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": null,
"utcRedeemedAt": null,
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": false,
"cancellation": {
"refund": "FULL",
"reason": "this product sucks",
"utcCancelledAt": "2022-05-25T11:00:22Z"
},
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": null,
"unitItems": []
}
Get Bookings
Fetch the status of an existing booking.
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
The request has succeeded.
The server could not understand the request due to invalid syntax.
GET /api/octo/bookings/{uuid} HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Accept: */*
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CONFIRMED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": null,
"utcRedeemedAt": null,
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": null,
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
},
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33b",
"supplierReference": "K9T7R5",
"unitId": "child_797e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33c",
"supplierReference": "K9T7R6",
"unitId": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
}
]
}
Get Booking
Fetch the status of an existing booking.
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
The request has succeeded.
The server could not understand the request due to invalid syntax.
GET /api/octo/bookings/{uuid} HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Accept: */*
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CONFIRMED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": null,
"utcRedeemedAt": null,
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": null,
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
},
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33b",
"supplierReference": "K9T7R5",
"unitId": "child_797e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
},
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33c",
"supplierReference": "K9T7R6",
"unitId": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
},
"status": "CONFIRMED",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
}
}
]
}
Booking Update
Updates a booking before and after it has been confirmed as long as it hasn''t been redeemed or within the cancellation cutoff window. To know if the booking can be updated check the booking''s cancellable
field. If the booking can be cancelled, it can also be updated. It''s generally preferred to update a booking rather than cancelling it and rebooking
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
Your reference for this booking. Also known as a Voucher Number.
VOUCHER-0123
The product ID.
6b903d44-dc24-4ca4-ae71-6bde6c4f4854
The option id.
DEFAULT
The availability ID for the selected timeslot.
2022-05-23T00:00:00+01:00
How many minutes to reserve the availability, otherwise defaults to the supplier default amount.
15
Optional notes for the booking.
Optional notes
Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false).
true
Contact details for the main guest who will attend the tour/attraction. Contact BODY can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information).
{"fullName":"John Doe","firstName":"John","lastName":"Doe","emailAddress":"[email protected]","phoneNumber":"+447840739436","locales":["en","en-GB","en-US"],"country":"GB"}
The request has succeeded.
The server could not understand the request due to invalid syntax.
PATCH /api/octo/bookings/{uuid} HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Content-Type: application/json
Accept: */*
Content-Length: 520
{
"resellerReference": "VOUCHER-0123",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"optionId": "DEFAULT",
"availabilityId": "2022-05-23T00:00:00+01:00",
"expirationMinutes": 15,
"notes": "Optional notes",
"emailReceipt": true,
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
}
],
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "+447840739436",
"locales": [
"en",
"en-GB",
"en-US"
],
"country": "GB"
}
}
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CONFIRMED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": "2022-05-25T11:04:22Z",
"utcRedeemedAt": "2022-06-25T10:34:22Z",
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": {
"refund": "FULL",
"reason": "this product sucks",
"utcCancelledAt": "2022-05-25T11:00:22Z"
},
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
},
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": null
}
],
"pricing": {
"original": 2000,
"retail": 2000,
"net": 1600,
"currency": "EUR",
"currencyPrecision": 2,
"includedTaxes": []
}
}
Extend Reservation
Updates a booking before and after it has been confirmed as long as it hasn''t been redeemed or within the cancellation cutoff window. To know if the booking can be updated check the booking''s cancellable
field. If the booking can be cancelled, it can also be updated. It''s generally preferred to update a booking rather than cancelling it and rebooking
The UUID of the booking
A list of the Capabilities (their IDs) initialized with your request.
This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.
Your reference for this booking. Also known as a Voucher Number.
VOUCHER-0123
The product ID.
6b903d44-dc24-4ca4-ae71-6bde6c4f4854
The option id.
DEFAULT
The availability ID for the selected timeslot.
2022-05-23T00:00:00+01:00
How many minutes to reserve the availability, otherwise defaults to the supplier default amount.
15
Optional notes for the booking.
Optional notes
Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false).
true
Contact details for the main guest who will attend the tour/attraction. Contact BODY can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information).
{"fullName":"John Doe","firstName":"John","lastName":"Doe","emailAddress":"[email protected]","phoneNumber":"+447840739436","locales":["en","en-GB","en-US"],"country":"GB"}
The request has succeeded.
The server could not understand the request due to invalid syntax.
PATCH /api/octo/bookings/{uuid} HTTP/1.1
Host: localhost:8080
Authorization: Bearer YOUR_SECRET_TOKEN
Octo-Capabilities: text
Content-Type: application/json
Accept: */*
Content-Length: 520
{
"resellerReference": "VOUCHER-0123",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"optionId": "DEFAULT",
"availabilityId": "2022-05-23T00:00:00+01:00",
"expirationMinutes": 15,
"notes": "Optional notes",
"emailReceipt": true,
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
}
],
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "+447840739436",
"locales": [
"en",
"en-GB",
"en-US"
],
"country": "GB"
}
}
{
"id": "bbbb6227-54fc-4c32-9ed7-dc3eb99966ea",
"uuid": "559aed3d-6d5b-4fe0-bfca-99f5e7218a56",
"testMode": false,
"resellerReference": null,
"supplierReference": "XOPSUT",
"status": "CONFIRMED",
"utcCreatedAt": "2022-05-25T10:34:22Z",
"utcUpdatedAt": "2022-05-25T10:34:22Z",
"utcExpiresAt": "2022-05-25T11:04:22Z",
"utcRedeemedAt": "2022-06-25T10:34:22Z",
"utcConfirmedAt": "2022-05-25T11:00:22Z",
"productId": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"product": {
"id": "6b903d44-dc24-4ca4-ae71-6bde6c4f4854",
"internalName": "London Eye General Admission",
"reference": "LEYE-GA",
"locale": "en-GB",
"timeZone": "Europe/London",
"allowFreesale": true,
"instantConfirmation": true,
"instantDelivery": true,
"availabilityRequired": true,
"availabilityType": "START_TIME",
"deliveryFormats": [
"QRCODE"
],
"deliveryMethods": [
"TICKET"
],
"redemptionMethod": "DIGITAL",
"options": [
{
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
}
]
},
"optionId": "DEFAULT",
"option": {
"id": "DEFAULT",
"default": true,
"internalName": "DEFAULT",
"reference": null,
"availabilityLocalStartTimes": [
"00:00"
],
"cancellationCutoff": "1 hour",
"cancellationCutoffAmount": 1,
"cancellationCutoffUnit": "hour",
"requiredContactFields": [
"firstName"
],
"restrictions": {
"minUnits": 0,
"maxUnits": 9
},
"units": [
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Child",
"reference": null,
"type": "CHILD",
"restrictions": {
"minAge": 3,
"maxAge": 12,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
{
"id": "infant_897e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Infant",
"reference": null,
"type": "INFANT",
"restrictions": {
"minAge": 0,
"maxAge": 3,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": [
"adult_697e3ce8-1860-4cbf-80ad-95857df1f640"
]
},
"requiredContactFields": [
"firstName"
]
}
]
},
"cancellable": true,
"cancellation": {
"refund": "FULL",
"reason": "this product sucks",
"utcCancelledAt": "2022-05-25T11:00:22Z"
},
"freesale": false,
"availabilityId": "",
"availability": {
"id": "2022-05-23T00:00:00+01:00",
"localDateTimeStart": "2022-05-23T00:00:00+01:00",
"localDateTimeEnd": "2022-05-24T00:00:00+01:00",
"utcCutoffAt": "2022-05-22T23:00:00Z",
"allDay": false,
"available": true,
"status": "AVAILABLE",
"vacancies": 10,
"capacity": 10,
"maxUnits": null,
"openingHours": [
{
"from": "08:00",
"to": "16:00"
}
]
},
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"notes": "Optional notes for the booking",
"deliveryMethods": [
"TICKET",
"VOUCHER"
],
"voucher": {
"redemptionMethod": "DIGITAL",
"utcRedeemedAt": "2021-10-27T23:28:43Z",
"deliveryOptions": [
{
"deliveryFormat": "QRCODE",
"deliveryValue": ""
}
]
},
"unitItems": [
{
"uuid": "3b1bc2ee-3155-4738-9471-f49842a07327",
"resellerReference": "4ec08a62-892c-48c1-a608-dc946531a33a",
"supplierReference": "K9T7R4",
"unitId": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"unit": {
"id": "adult_697e3ce8-1860-4cbf-80ad-95857df1f640",
"internalName": "Adult",
"reference": null,
"type": "ADULT",
"restrictions": {
"minAge": 18,
"maxAge": 99,
"idRequired": false,
"minQuantity": 1,
"maxQuantity": 10,
"paxCount": 1,
"accompaniedBy": []
},
"requiredContactFields": [
"firstName"
]
},
"status": "ON_HOLD",
"utcRedeemedAt": null,
"contact": {
"fullName": "John Doe",
"firstName": "John",
"lastName": "Doe",
"emailAddress": "[email protected]",
"phoneNumber": "",
"locales": [
"en"
],
"postalCode": "",
"country": "",
"notes": ""
},
"ticket": null
}
],
"pricing": {
"original": 2000,
"retail": 2000,
"net": 1600,
"currency": "EUR",
"currencyPrecision": 2,
"includedTaxes": []
}
}
Last updated
Was this helpful?