ATBeds Inbound API
ATBeds Standard JSON API
The official preferred ATBeds inbound API format for external companies.
AudienceUse this format for new integrations.
Generated2026-05-10T02:27:10.736Z
Requests24
Format
What This Page Covers
Standard JSON uses schema version 2 and a consistent request/response envelope.
Single endpoint integrations send all operations to a configured path such as /api/inbound/json. This gateway style is preferred for new integrations because it keeps partner firewalls, credentials, and request routing simpler. Operation detection priority is X-Api-Operation header, query string, then body.
REST-like integrations can use endpoint-specific paths when the connector endpoint configuration maps each path and method to an operation. Use this style only when a partner or project requirement calls for operation-specific URLs.
This published page is a read-only implementation reference.
Security
Authentication
| Field | Required | Type | Description |
| Authorization | Yes | Header | Preferred form: Bearer token issued by /api/connectivity/token. |
| X-Connector-Uuid | Conditional | Header | Fallback connector resolver when token/domain context is not enough. |
| X-Request-Id | No | Header | Client-supplied request correlation ID. Echoed as requestId and response header. |
| X-Api-Operation | Shared endpoint only | Header | Preferred generic operation header when the endpoint does not define the operation. |
| Idempotency-Key | No | Header | Accepted for booking and rate-sensitive flows; echoed in response meta when present. |
Schema
Standard JSON Envelope
| Field | Required | Type | Description |
| schema_version | No | integer | Only version 2 is supported. Accepted aliases: schemaVersion, SchemaVersion. |
| operation | Shared endpoint only | string | Operation name. Header and query operation values take precedence over body operation. |
| idempotency_key | No | string | Top-level idempotency key. Header Idempotency-Key is also accepted. |
| meta | No | object | Client metadata merged into data.meta before hydration. |
| data | Yes | object | Operation-specific payload. Alias Data is also accepted. |
Failures
Error Envelope
| Field | Required | Type | Description |
| schemaVersion | Yes | integer | Always 2 for Standard JSON responses. |
| success | Yes | boolean | false for errors. |
| operation | Yes | string | Resolved operation or unknown. |
| requestId | Yes | string | Gateway request ID. |
| meta.timestamp | Yes | datetime | Response timestamp. |
| error.code | Yes | string | Stable machine-readable error code. |
| error.message | Yes | string | Client-facing error message. |
| error.fields | No | object | Field-specific validation or contract errors. |
Guide
10 - Standard JSON (Preferred)
Standard JSON API
Standard JSON is the preferred ATBeds inbound API format for external companies.
Request Envelope
All Standard JSON gateway requests use schema version 2.
{
"schema_version": 2,
"operation": "availability_single",
"idempotency_key": "optional-client-key",
"meta": {
"clientRequestId": "optional-client-reference"
},
"data": {}
}
Accepted schema keys are schema_version, schemaVersion, and SchemaVersion. The payload is read from data or Data. Top-level meta is merged into data.meta.
Operation Routing
Standard JSON currently supports two routing styles when the connector endpoint configuration exists. The single endpoint style is preferred for new integrations because it keeps partner firewalls, credentials, and request routing simpler. REST-like paths are available when a partner or project requirement calls for operation-specific URLs.
Single endpoint style: all requests go to a configured gateway path such as /api/inbound/json. Operation detection priority is:
X-Api-Operation header
operation query parameter
- top-level body
operation
REST-like style: operation is determined from the configured endpoint path and HTTP method. Path parameters and GET query parameters are merged into data when the same key is not already present.
Response Envelope
Success:
{
"schemaVersion": 2,
"success": true,
"operation": "availability_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {}
}
Error:
{
"schemaVersion": 2,
"success": false,
"operation": "availability_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "VALIDATION_ERROR",
"message": "The request payload is invalid.",
"details": null,
"fields": {}
}
}
Supported Operations
content_property_list, content_property_single, content_room_type_list, content_room_type_single, content_rate_plan_list, content_rate_plan_single, availability_multi_by_location, availability_multi, availability_single, availability_rate_check, booking_pre_reservation, booking_confirm, booking_cancel, booking_modify, booking_list, and booking_single.
Not Current Standard JSON Behavior
auth, content_country_list, content_province_list, and content_city_list are not current Standard JSON gateway operations. Token issuing is handled separately by /api/connectivity/token.
Guide
11 - Content
Content Operations
Content operations expose accessible property, room type, and rate plan information.
The shared gateway examples in this folder use POST {{baseUrl}}{{gatewayPathJson}} plus X-Api-Operation.
REST-like content endpoints are supported when the connector has matching endpoint configuration. The current blueprint includes property list and property single REST-like defaults. Room type and rate plan inbound defaults currently use operation-detected gateway endpoints unless custom connector endpoints are configured.
Guide
12 - Search
Availability And Rate Check
Availability returns public offerKey values that should be treated as opaque. Use the returned offerKey and optional searchId for rate-check and booking requests.
Request rooms[].children is a list of child ages. In rate-check, occupancy.children may be a count and occupancy.childrenAges carries the ages.
Response offers hide supplier IDs, commissions, raw price amount, exchange rate, and debug source metadata unless endpoint or connector visibility settings explicitly expose them.
Guide
13 - Booking
Booking Operations
Standard JSON supports pre-reservation, confirmation, cancellation, modification, list, and single booking lookup.
Preferred booking requests are lean after availability: send the public offerKey, searchId, public room/guest details, and optional pricingExpectation. The gateway can rehydrate protected offer details from the stored availability snapshot.
Full canonical booking payloads are still accepted where the application supports them. They include property, room, rate, stay, occupancy, price, and guest details in each room.
booking_modify is supported, but its current Standard JSON response is not projected through the same lean presenter used by pre-reservation, confirm, list, and single responses.
Guide
19 - Errors & Edge Cases
Errors And Limits
Standard JSON errors use the same response envelope as success responses with success: false and an error object.
Current gateway-level behavior includes request IDs, optional idempotency key echoing in response metadata, connector resolution, endpoint resolution, authentication normalization, payload size enforcement, and connector/endpoint throttling.
Default payload size limit is 1 MiB unless configuration overrides it. Throttled responses include Retry-After and rate-limit headers.
Operations
Authentication
01 Token - JSON Connector
Issues a bearer token for the Standard JSON connector.
POST{{baseUrl}}/api/connectivity/token
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
Request Example
{
"connector_uuid": "{{connectorUuidJson}}",
"email": "{{userEmail}}",
"password": "{{userPassword}}"
}
JSON Connector Token
Issues a bearer token for the Standard JSON connector.
Request Body
email and password are required.
connector_uuid narrows token issuing to the active connector.
abilities may be supplied when a scoped token is needed; omit it for the default token behavior used by this collection.
Success Response Example
{
"access_token": "1|example-token",
"token_type": "Bearer"
}
Operations
11 - Content
11.01 Content - Property List
Returns accessible properties for the authenticated connector user.
content_property_list
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.context.currencyCode | No | string | Three-letter currency code such as EUR. |
| data.context.marketCode | No | string | Market code used for partner and pricing context. |
| data.context.locale | No | string | Locale such as en or tr. |
| data.page | No | integer | Defaults to 1. |
| data.perPage | No | integer | Defaults to 50 and is capped at 500. |
| data.filters.propertyIds | No | array<int|string> | Restrict response to specific properties. |
| data.filters.updatedSince | No | datetime | Return content updated since this timestamp when supported. |
| data.include | No | array<string> | Optional include hints such as images, amenities, and policies. |
Response Fields
| Field | Required | Type | Description |
| data.properties[] | Yes | array | Accessible property summaries. |
| data.properties[].id | Yes | integer|string | Public property identifier. |
| data.properties[].name | Yes | string | Property name. |
| data.properties[].location | No | object | Address, place, country, coordinates, and timezone details. |
| data.properties[].type | No | object | Property type summary. |
| data.properties[].chain | No | object|null | Property chain summary when available. |
| data.meta.page | No | integer | Current page. |
| data.meta.perPage | No | integer | Page size. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_property_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_property_list",
"data": {
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
},
"page": 1,
"perPage": 50,
"filters": {
"propertyIds": [],
"countryCode": "{{countryCode}}",
"cityId": null,
"updatedSince": null
},
"include": [
"amenities",
"images",
"policies"
]
}
}
Property List
Returns accessible properties for the authenticated connector user.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_property_list.
REST-like style when configured:
GET {{baseUrl}}{{standardJsonContentPropertiesPath}}
For GET requests, query parameters such as page, perPage, propertyId, and filters are merged into data when the key is not already present.
Field Notes
page defaults to 1.
perPage defaults to 50 and is capped at 500.
filters is a flexible filter bag. Current code tolerates filters and filter.
- Response property identifiers are exposed as
id, not propertyId.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_property_list",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"properties": [
{
"id": 123,
"name": "Roomi Demo Hotel",
"slug": "roomi-demo-hotel",
"starRating": 5,
"isActive": true,
"score": 96,
"location": {
"placeId": 1001,
"placeName": "Istanbul",
"countryCode": "TR",
"countryName": "Turkiye",
"addressLineOne": "Example Street 1",
"timezone": "Europe/Istanbul",
"lat": 41.0082,
"lon": 28.9784
},
"type": {
"id": 1,
"name": "Hotel",
"code": "HOTEL",
"slug": "hotel"
},
"chain": null,
"amenities": [],
"updatedAt": "2026-05-10T12:00:00+00:00"
}
],
"nextCursor": null,
"meta": {
"count": 1,
"page": 1,
"perPage": 50
}
}
}
11.02 Content - Property Single
Returns one accessible property by property ID or accepted alias.
content_property_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.propertyId | Yes | integer|string | Property identifier. Aliases: property_id, hotelId, hotel_id, id. |
| data.context.currencyCode | No | string | Three-letter currency code such as EUR. |
| data.context.marketCode | No | string | Market code used for partner and pricing context. |
| data.context.locale | No | string | Locale such as en or tr. |
| data.include | No | array<string> | Optional include hints. |
Response Fields
| Field | Required | Type | Description |
| data.property.id | Yes | integer|string | Public property identifier. |
| data.property.name | Yes | string | Property name. |
| data.property.location | No | object | Location details. |
| data.details | No | object | Extended content details such as contact, description, and check-in data. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_property_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_property_single",
"data": {
"propertyId": "{{propertyId}}",
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}"
},
"include": [
"amenities",
"images",
"policies"
]
}
}
Property Single
Returns one accessible property.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_property_single.
REST-like style when configured:
GET {{baseUrl}}{{standardJsonContentPropertiesPath}}/{{propertyId}}
Field Notes
propertyId is required. Aliases currently accepted by the hydrator include property_id, hotelId, hotel_id, and id.
- For REST-like endpoint templates, a path parameter named
propertyId can supply this value when the body omits it.
- Missing or inaccessible properties are returned as partner-safe
NOT_FOUND errors.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_property_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"property": {
"id": 123,
"name": "Roomi Demo Hotel",
"slug": "roomi-demo-hotel",
"starRating": 5,
"isActive": true,
"location": {
"placeId": 1001,
"placeName": "Istanbul",
"countryCode": "TR",
"timezone": "Europe/Istanbul"
},
"type": {
"id": 1,
"name": "Hotel",
"code": "HOTEL"
},
"chain": null,
"amenities": [],
"updatedAt": "2026-05-10T12:00:00+00:00"
},
"details": {
"longDescription": "Client-facing hotel description.",
"checkinFrom": "14:00:00",
"checkoutUntil": "12:00:00",
"totalRooms": 120,
"currencyCode": "EUR",
"contact": {
"website": "https://example.test",
"email": "[email protected]",
"phone": "+905551112233"
}
}
}
}
11.03 Content - Room Type List
Returns room types for a property.
content_room_type_list
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.propertyId | Yes | integer|string | Property identifier. |
| data.page | No | integer | Defaults to 1. |
| data.perPage | No | integer | Defaults to 500. |
Response Fields
| Field | Required | Type | Description |
| data.roomTypes[] | Yes | array | Room type summaries. |
| data.roomTypes[].id | Yes | integer|string | Room type identifier. |
| data.roomTypes[].propertyId | Yes | integer|string | Parent property identifier. |
| data.roomTypes[].maxOccupancy | No | object | Maximum total/adult/child occupancy. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_room_type_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_room_type_list",
"data": {
"propertyId": "{{propertyId}}",
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}"
},
"page": 1,
"perPage": 500
}
}
Room Type List
Returns room types for a property.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_room_type_list.
REST-like style:
The current default inbound blueprint uses operation detection for room type content. A REST-like path can be configured per connector endpoint, for example /api/content/properties/{propertyId}/room-types.
Field Notes
propertyId is required.
page defaults to 1.
perPage defaults to 500.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_room_type_list",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"roomTypes": [
{
"id": "1001",
"propertyId": 123,
"name": "Standard Room",
"updatedAt": "2026-05-10T12:00:00+00:00",
"isActive": true,
"squareMeters": 28,
"view": "city",
"class": "standard",
"category": "double",
"galleryImages": [],
"maxOccupancy": {
"total": 3,
"adults": 2,
"children": 1
}
}
],
"meta": {
"propertyId": 123,
"page": 1,
"perPage": 500,
"count": 1
}
}
}
11.04 Content - Room Type Single
Returns one room type for a property.
content_room_type_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.propertyId | Yes | integer|string | Property identifier. |
| data.roomTypeId | Yes | integer|string | Room type identifier. |
Response Fields
| Field | Required | Type | Description |
| data.roomType.id | Yes | integer|string | Room type identifier. |
| data.roomType.name | Yes | string | Room type name. |
| data.roomType.maxOccupancy | No | object | Maximum occupancy details. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_room_type_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_room_type_single",
"data": {
"propertyId": "{{propertyId}}",
"roomTypeId": "{{roomTypeId}}"
}
}
Room Type Single
Returns one room type for a property.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_room_type_single.
REST-like style:
Custom connector endpoint configuration may route a path such as /api/content/properties/{propertyId}/room-types/{roomTypeId} to this operation.
Field Notes
propertyId is required.
roomTypeId is required.
- Identifiers may be numeric or string-like depending on connector identifier mapping.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_room_type_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"roomType": {
"id": "1001",
"propertyId": 123,
"name": "Standard Room",
"isActive": true,
"squareMeters": 28,
"maxOccupancy": {
"total": 3,
"adults": 2,
"children": 1
},
"galleryImages": []
}
}
}
11.05 Content - Rate Plan List
Returns rate plans for a property and optional room type.
content_rate_plan_list
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.propertyId | Yes | integer|string | Property identifier. |
| data.roomTypeId | No | integer|string | Optional room type filter. Also accepted in filters.roomTypeId. |
| data.page | No | integer | Defaults to 1. |
| data.perPage | No | integer | Defaults to 500. |
Response Fields
| Field | Required | Type | Description |
| data.ratePlans[] | Yes | array | Rate plan summaries. |
| data.ratePlans[].id | Yes | integer|string | Rate plan identifier. |
| data.ratePlans[].roomTypeId | Yes | integer|string | Linked room type. |
| data.ratePlans[].currencyCode | Yes | string | Three-letter currency code. |
| data.ratePlans[].boardingType | No | object | Boarding type summary. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_rate_plan_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_rate_plan_list",
"data": {
"propertyId": "{{propertyId}}",
"roomTypeId": "{{roomTypeId}}",
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}"
},
"page": 1,
"perPage": 500
}
}
Rate Plan List
Returns rate plans for a property and, optionally, a room type.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_rate_plan_list.
REST-like style:
The current default inbound blueprint uses operation detection for rate plan content. A REST-like path can be configured per connector endpoint, for example /api/content/properties/{propertyId}/rate-plans.
Field Notes
propertyId is required.
roomTypeId is optional and may also be sent under filters.roomTypeId.
currencyCode in each rate plan is the configured selling currency for that plan.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_rate_plan_list",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"ratePlans": [
{
"id": "2001",
"propertyId": 123,
"roomTypeId": "1001",
"name": "Best Available Rate",
"isActive": true,
"boardingType": {
"id": 3001,
"name": "Room Only",
"code": "RO"
},
"currencyCode": "EUR",
"payAtHotel": false,
"packageOnly": false,
"updatedAt": "2026-05-10T12:00:00+00:00"
}
],
"meta": {
"propertyId": 123,
"roomTypeId": "1001",
"page": 1,
"perPage": 500,
"count": 1
}
}
}
11.06 Content - Rate Plan Single
Returns one rate plan for a property.
content_rate_plan_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.propertyId | Yes | integer|string | Property identifier. |
| data.ratePlanId | Yes | integer|string | Rate plan identifier. |
Response Fields
| Field | Required | Type | Description |
| data.ratePlan.id | Yes | integer|string | Rate plan identifier. |
| data.ratePlan.name | Yes | string | Rate plan name. |
| data.ratePlan.currencyCode | Yes | string | Three-letter currency code. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_rate_plan_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_rate_plan_single",
"data": {
"propertyId": "{{propertyId}}",
"ratePlanId": "{{ratePlanId}}"
}
}
Rate Plan Single
Returns one rate plan for a property.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: content_rate_plan_single.
REST-like style:
Custom connector endpoint configuration may route a path such as /api/content/properties/{propertyId}/rate-plans/{ratePlanId} to this operation.
Field Notes
propertyId is required.
ratePlanId is required.
- Identifiers may be numeric or string-like depending on connector identifier mapping.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "content_rate_plan_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"ratePlan": {
"id": "2001",
"propertyId": 123,
"roomTypeId": "1001",
"name": "Best Available Rate",
"isActive": true,
"boardingType": {
"id": 3001,
"name": "Room Only",
"code": "RO"
},
"currencyCode": "EUR",
"payAtHotel": false,
"packageOnly": false
}
}
}
Operations
12 - Search
12.01 Availability - Multi By Location
Searches multiple properties by location.
availability_multi_by_location
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.stay.checkinDate | Yes | date | Arrival date in YYYY-MM-DD format. |
| data.stay.checkoutDate | Yes | date | Departure date in YYYY-MM-DD format. |
| data.rooms[] | Yes | array | Requested room occupancies. |
| data.rooms[].adults | Yes | integer | Adult count for the room. |
| data.rooms[].children | No | array<int> | Child ages. Empty array means no children. |
| data.context | Yes | object | Currency, market, distribution, nationality, residency, locale, and timezone context. |
| data.location | Yes | object | Location filter using placeId, countryCode, coordinates, radius, or query. |
| data.location.radiusKm | No | number | Search radius in kilometers when coordinates are supplied. |
Response Fields
| Field | Required | Type | Description |
| data.searchId | No | string | Search identifier to reuse in rate-check and booking. |
| data.offers[] | Yes | array | Available public offers. Empty array means no availability. |
| data.offers[].offerKey | Yes | string | Opaque public offer key. |
| data.offers[].propertyId | Yes | integer | Property identifier. |
| data.offers[].roomTypeId | Yes | integer|string | Room type identifier. |
| data.offers[].ratePlanId | Yes | integer|string | Rate plan identifier. |
| data.offers[].price.total | Yes | number | Total selling price exposed to the client. |
| data.offers[].price.currencyCode | Yes | string | Three-letter currency code. |
| data.offers[].occupancy.children | No | array<int> | Child ages in the response. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_multi_by_location |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_multi_by_location",
"data": {
"stay": {
"checkinDate": "{{checkinDate}}",
"checkoutDate": "{{checkoutDate}}"
},
"rooms": [
{
"roomIndex": 0,
"adults": 2,
"children": [
8
]
}
],
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
},
"location": {
"placeId": "{{placeId}}",
"countryCode": "{{countryCode}}",
"lat": 41.0082,
"lon": 28.9784,
"radiusKm": 15,
"query": "{{locationQuery}}"
}
}
}
Availability Multi By Location
Searches multiple properties by location.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: availability_multi_by_location.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonAvailabilityLocationPath}}
Field Notes
stay.checkinDate and stay.checkoutDate use YYYY-MM-DD.
rooms[].children is a list of child ages, not a child count.
location may include placeId, countryCode, coordinates, radius, or free-text query.
- Returned
offerKey values are opaque and should be stored only for the rate-check and booking flow.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "availability_multi_by_location",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"searchId": "SEARCH-123",
"offers": [
{
"offerKey": "ofr_opaque_public_key",
"propertyId": 123,
"roomTypeId": 1001,
"ratePlanId": 2001,
"board": {
"code": "RO",
"name": "Room Only"
},
"price": {
"currencyCode": "EUR",
"priceKind": "SELLING",
"total": 240,
"breakdown": [
{
"date": "2026-12-10",
"amount": 120,
"currency": "EUR"
}
]
},
"cancellation": {
"refundable": true,
"deadline": "2026-12-08T23:59:59+03:00"
},
"occupancy": {
"roomIndex": 0,
"adults": 2,
"children": [
8
]
},
"restrictions": {
"minLos": 1
}
}
]
}
}
12.02 Availability - Multi
Searches multiple explicitly selected properties.
availability_multi
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.stay.checkinDate | Yes | date | Arrival date in YYYY-MM-DD format. |
| data.stay.checkoutDate | Yes | date | Departure date in YYYY-MM-DD format. |
| data.rooms[] | Yes | array | Requested room occupancies. |
| data.rooms[].adults | Yes | integer | Adult count for the room. |
| data.rooms[].children | No | array<int> | Child ages. Empty array means no children. |
| data.context | Yes | object | Currency, market, distribution, nationality, residency, locale, and timezone context. |
| data.hotelFilter.propertyIds | Yes | array<int|string> | Selected property identifiers. |
| data.hotelFilter.ratePlanIds | No | array<int|string> | Optional rate plan filter. |
| data.hotelFilter.roomTypeIds | No | array<int|string> | Optional room type filter. |
Response Fields
| Field | Required | Type | Description |
| data.searchId | No | string | Search identifier to reuse in rate-check and booking. |
| data.offers[] | Yes | array | Available public offers. Empty array means no availability. |
| data.offers[].offerKey | Yes | string | Opaque public offer key. |
| data.offers[].propertyId | Yes | integer | Property identifier. |
| data.offers[].roomTypeId | Yes | integer|string | Room type identifier. |
| data.offers[].ratePlanId | Yes | integer|string | Rate plan identifier. |
| data.offers[].price.total | Yes | number | Total selling price exposed to the client. |
| data.offers[].price.currencyCode | Yes | string | Three-letter currency code. |
| data.offers[].occupancy.children | No | array<int> | Child ages in the response. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_multi |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_multi",
"data": {
"stay": {
"checkinDate": "{{checkinDate}}",
"checkoutDate": "{{checkoutDate}}"
},
"rooms": [
{
"roomIndex": 0,
"adults": 2,
"children": []
}
],
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
},
"hotelFilter": {
"propertyIds": [
"{{propertyId}}",
"{{secondPropertyId}}"
],
"ratePlanIds": null,
"roomTypeIds": null,
"boardCodes": null,
"refundableOnly": null,
"nonRefundableOnly": null
}
}
}
Availability Multi
Searches multiple explicitly selected properties.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: availability_multi.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonAvailabilityPath}}
Field Notes
hotelFilter.propertyIds selects the properties.
- Additional supported filter keys include
supplierIds, supplierHotelCodes, ratePlanIds, roomTypeIds, boardCodes, refundableOnly, and nonRefundableOnly.
- Response offer fields are intentionally public; supplier IDs and raw pricing internals are hidden by default.
12.03 Availability - Single
Searches one explicitly selected property.
availability_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.stay.checkinDate | Yes | date | Arrival date in YYYY-MM-DD format. |
| data.stay.checkoutDate | Yes | date | Departure date in YYYY-MM-DD format. |
| data.rooms[] | Yes | array | Requested room occupancies. |
| data.rooms[].adults | Yes | integer | Adult count for the room. |
| data.rooms[].children | No | array<int> | Child ages. Empty array means no children. |
| data.context | Yes | object | Currency, market, distribution, nationality, residency, locale, and timezone context. |
| data.hotelFilter.propertyIds | Yes | array<int|string> | Exactly one property ID for single-property search semantics. |
Response Fields
| Field | Required | Type | Description |
| data.searchId | No | string | Search identifier to reuse in rate-check and booking. |
| data.offers[] | Yes | array | Available public offers. Empty array means no availability. |
| data.offers[].offerKey | Yes | string | Opaque public offer key. |
| data.offers[].propertyId | Yes | integer | Property identifier. |
| data.offers[].roomTypeId | Yes | integer|string | Room type identifier. |
| data.offers[].ratePlanId | Yes | integer|string | Rate plan identifier. |
| data.offers[].price.total | Yes | number | Total selling price exposed to the client. |
| data.offers[].price.currencyCode | Yes | string | Three-letter currency code. |
| data.offers[].occupancy.children | No | array<int> | Child ages in the response. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_single",
"data": {
"stay": {
"checkinDate": "{{checkinDate}}",
"checkoutDate": "{{checkoutDate}}"
},
"rooms": [
{
"roomIndex": 0,
"adults": 2,
"children": []
}
],
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
},
"hotelFilter": {
"propertyIds": [
"{{propertyId}}"
]
}
}
}
Availability Single
Searches one explicitly selected property.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: availability_single.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonAvailabilitySinglePath}}
Field Notes
hotelFilter.propertyIds must contain exactly one property ID for single-property search semantics.
- Availability stores offer snapshots for Standard JSON so later lean rate-check and booking requests can use the public
offerKey.
- If no offers are available, the response remains a successful envelope with an empty
offers array.
12.04 Search - Rate Check
Revalidates an offer before booking.
availability_rate_check
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.offerKey | Yes | string | Opaque offer key from availability. |
| data.searchId | No | string | Search ID from availability. |
| data.stay | Full payload only | object | If present, request is treated as a full canonical rate-check payload. |
| data.occupancy | Full payload only | object | Full canonical occupancy. |
| data.context | Full payload only | object | Full canonical context. |
Response Fields
| Field | Required | Type | Description |
| data.isAvailable | Yes | boolean | Whether the offer is still available. |
| data.offer | No | object | Updated public offer. |
| data.alternatives | No | array | Alternative offers when the requested offer changed or is unavailable. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_rate_check |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_rate_check",
"data": {
"offerKey": "{{offerKey}}",
"searchId": "{{searchId}}",
"meta": {
"clientReference": "rate-check-docs"
}
}
}
Rate Check
Revalidates a specific offer before booking.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: availability_rate_check.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonRateCheckPath}}
Field Notes
- Preferred request shape is lean: send
offerKey and optional searchId from a prior availability response.
- If
stay, occupancy, or context is present, the hydrator treats the request as a full canonical rate-check payload.
- Lean rate-check requires a stored offer snapshot. If missing or expired, the API returns
409 with OFFER_SNAPSHOT_NOT_FOUND.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "availability_rate_check",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"isAvailable": true,
"offer": {
"offerKey": "ofr_opaque_public_key",
"propertyId": 123,
"roomTypeId": 1001,
"ratePlanId": 2001,
"board": {
"code": "RO",
"name": "Room Only"
},
"price": {
"currencyCode": "EUR",
"priceKind": "SELLING",
"total": 240
},
"cancellation": {
"refundable": true,
"deadline": "2026-12-08T23:59:59+03:00"
},
"occupancy": {
"roomIndex": 0,
"adults": 2,
"children": []
}
},
"alternatives": []
}
}
Operations
13 - Booking
13.01 Booking - Pre Reservation
Creates a temporary hold for an offer before final confirmation.
booking_pre_reservation
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.offerKey | Yes | string | Opaque offer key from availability. |
| data.searchId | No | string | Search ID from availability. |
| data.pricingExpectation | No | object | Expected total, currencyCode, and tolerancePercent. |
| data.rooms[] | Yes | array | Public room and guest details to merge onto stored offer snapshot. |
| data.rooms[].guests[] | Recommended | array | Guest details, including lead guest. |
Response Fields
| Field | Required | Type | Description |
| data.preReservationCode | No | string | Temporary hold code. |
| data.expiresAt | No | datetime | Hold expiry timestamp. |
| data.booking.reference | Yes | string | ATBeds booking reference. |
| data.booking.supplierReference | No | string | Supplier reference when available. |
| data.booking.agentReference | No | string | Client-supplied agent reference. |
| data.booking.status | Yes | string | Current booking status. |
| data.booking.price.total | No | number | Public booking total. |
| data.booking.price.currencyCode | No | string | Three-letter currency code. |
| data.booking.rooms[] | Yes | array | Booked rooms with stay, occupancy, and guest details when available. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_pre_reservation |
| X-Request-Id | {{requestId}} |
| Idempotency-Key | booking-pre-{{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_pre_reservation",
"data": {
"offerKey": "{{offerKey}}",
"searchId": "{{searchId}}",
"agentReference": "{{agentReference}}",
"pricingExpectation": {
"total": "{{offerTotal}}",
"currencyCode": "{{offerCurrency}}",
"tolerancePercent": 0
},
"rooms": [
{
"roomIndex": 0,
"agentReference": "{{agentReference}}",
"specialRequest": "High floor if available.",
"guests": [
{
"isLeadForReservation": true,
"isLeadForRoom": true,
"type": "ADULT",
"firstName": "{{leadFirstName}}",
"lastName": "{{leadLastName}}",
"age": 30,
"nationalityCountryCode": "{{nationalityCode}}",
"email": "{{leadEmail}}",
"phone": "{{leadPhone}}"
}
]
}
],
"customer": {
"email": "{{leadEmail}}",
"phone": "{{leadPhone}}"
},
"payment": null
}
}
Booking Pre-Reservation
Creates a temporary hold for an offer before final confirmation.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_pre_reservation.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingPreReservationPath}}
Field Notes
- Preferred request shape is lean and depends on an availability snapshot for
offerKey.
pricingExpectation is optional but recommended for client-side price protection. When present, a missing snapshot returns OFFER_SNAPSHOT_NOT_FOUND.
rooms[].guests should include the lead guest. Public room data is merged onto the stored offer snapshot.
Idempotency-Key is accepted and echoed in response meta.idempotencyKey.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_pre_reservation",
"requestId": "rr-docs-request-001",
"meta": {
"idempotencyKey": "booking-pre-rr-docs-request-001",
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"preReservationCode": "PRE-123",
"expiresAt": "2026-05-10T12:15:00+00:00",
"booking": {
"reference": "RR-REF-1001",
"status": "PENDING",
"price": {
"total": 240,
"currencyCode": "EUR"
},
"rooms": [
{
"roomIndex": 0,
"propertyId": 123,
"propertyName": "Roomi Demo Hotel",
"roomTypeId": 1001,
"roomTypeName": "Standard Room",
"ratePlanId": 2001,
"boardingTypeId": 3001,
"boardingTypeName": "Room Only",
"stay": {
"checkinDate": "2026-12-10",
"checkoutDate": "2026-12-12"
},
"adults": 2,
"children": [],
"guests": []
}
]
}
}
}
13.02 Booking - Confirm
Confirms a booking from a pre-reservation or valid offer snapshot.
booking_confirm
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.offerKey | Yes | string | Opaque offer key from availability. |
| data.preReservationCode | Recommended | string | Hold code from pre-reservation. |
| data.rooms[] | Yes | array | Public room and guest details. |
| data.payment | No | object|null | Payment context when supported. |
Response Fields
| Field | Required | Type | Description |
| data.booking.reference | Yes | string | ATBeds booking reference. |
| data.booking.supplierReference | No | string | Supplier reference when available. |
| data.booking.agentReference | No | string | Client-supplied agent reference. |
| data.booking.status | Yes | string | Current booking status. |
| data.booking.price.total | No | number | Public booking total. |
| data.booking.price.currencyCode | No | string | Three-letter currency code. |
| data.booking.rooms[] | Yes | array | Booked rooms with stay, occupancy, and guest details when available. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_confirm |
| X-Request-Id | {{requestId}} |
| Idempotency-Key | booking-confirm-{{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_confirm",
"data": {
"offerKey": "{{offerKey}}",
"searchId": "{{searchId}}",
"preReservationCode": "{{preReservationCode}}",
"agentReference": "{{agentReference}}",
"pricingExpectation": {
"total": "{{offerTotal}}",
"currencyCode": "{{offerCurrency}}",
"tolerancePercent": 0
},
"rooms": [
{
"roomIndex": 0,
"agentReference": "{{agentReference}}",
"guests": [
{
"isLeadForReservation": true,
"isLeadForRoom": true,
"type": "ADULT",
"firstName": "{{leadFirstName}}",
"lastName": "{{leadLastName}}",
"age": 30,
"nationalityCountryCode": "{{nationalityCode}}",
"email": "{{leadEmail}}",
"phone": "{{leadPhone}}"
}
]
}
],
"payment": null
}
}
Booking Confirm
Confirms a booking from a pre-reservation or from a still-valid offer snapshot.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_confirm.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingConfirmPath}}
Field Notes
preReservationCode is optional in the DTO but should be sent when the client performed pre-reservation.
- If
preReservationCode maps to a valid hold, the confirm request is merged onto the held request snapshot.
- Without a valid hold, the gateway can still rehydrate from the offer snapshot when available.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_confirm",
"requestId": "rr-docs-request-001",
"meta": {
"idempotencyKey": "booking-confirm-rr-docs-request-001",
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"booking": {
"reference": "RR-REF-1001",
"supplierReference": "SUP-REF-1001",
"agentReference": "AGENT-REF-1001",
"status": "CONFIRMED",
"price": {
"total": 240,
"currencyCode": "EUR"
},
"rooms": [
{
"roomIndex": 0,
"propertyId": 123,
"propertyName": "Roomi Demo Hotel",
"roomTypeId": 1001,
"roomTypeName": "Standard Room",
"ratePlanId": 2001,
"stay": {
"checkinDate": "2026-12-10",
"checkoutDate": "2026-12-12"
},
"adults": 2,
"children": [],
"hotelConfirmationNumber": "HOTEL-123"
}
],
"createdAt": "2026-05-10T12:00:00+00:00"
}
}
}
13.03 Booking - Cancel
Cancels a booking by reference.
booking_cancel
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.reference | Yes | string | ATBeds booking reference. |
| data.supplierReference | No | string | Supplier booking reference. |
| data.agentReference | No | string | Client booking reference. |
| data.context | Yes | object | Search/booking context. |
Response Fields
| Field | Required | Type | Description |
| data.status | No | string | Cancellation status. |
| data.penalties | No | array | Cancellation penalties when present. Empty penalties are omitted. |
| data.errors | No | array | Supplier or booking errors when present. Empty errors are omitted. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_cancel |
| X-Request-Id | {{requestId}} |
| Idempotency-Key | booking-cancel-{{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_cancel",
"data": {
"reference": "{{reservationRef}}",
"supplierReference": "{{supplierReference}}",
"agentReference": "{{agentReference}}",
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
}
}
}
Booking Cancel
Cancels a booking by ATBeds reference, with optional supplier and agent references.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_cancel.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingCancelPath}}
Field Notes
reference is the ATBeds booking reference and is required.
supplierReference and agentReference are optional but useful for reconciliation.
- Empty
penalties and empty errors are removed from the Standard JSON response.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_cancel",
"requestId": "rr-docs-request-001",
"meta": {
"idempotencyKey": "booking-cancel-rr-docs-request-001",
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"status": "CANCELLED"
}
}
13.04 Booking - Modify
Requests a modification to an existing booking.
booking_modify
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.reference | Yes | string | ATBeds booking reference. |
| data.newStay | No | object|null | New stay dates. |
| data.newOccupancy | No | object|null | New occupancy. |
| data.roomChanges | No | array|null | Room-level changes such as special requests or rate changes. |
| data.context | Yes | object | Search/booking context. |
Response Fields
| Field | Required | Type | Description |
| data.success | Current behavior | boolean | Raw modify success flag is currently retained. |
| data.booking | No | object | Modify booking summary. Current presenter does not apply the lean booking projection. |
| data.priceDiff | No | object | Surcharge/refund information when present. |
| data.errors | No | array|null | Modification errors when present. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_modify |
| X-Request-Id | {{requestId}} |
| Idempotency-Key | booking-modify-{{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_modify",
"data": {
"reference": "{{reservationRef}}",
"supplierReference": "{{supplierReference}}",
"agentReference": "{{agentReference}}",
"newStay": null,
"newOccupancy": null,
"roomChanges": [
{
"roomIndex": 0,
"specialRequest": "Late arrival after 22:00."
}
],
"context": {
"currencyCode": "{{currencyCode}}",
"marketCode": "{{marketCode}}",
"distributionType": "{{distributionType}}",
"locale": "{{locale}}",
"nationalityCode": "{{nationalityCode}}",
"residencyCountryCode": "{{residencyCountryCode}}",
"timezone": "{{timezone}}"
}
}
}
Booking Modify
Requests a modification to an existing booking.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_modify.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingModifyPath}}
Field Notes
reference is required.
- Optional modification inputs include
newStay, newOccupancy, and roomChanges.
- Current implementation hydrates and dispatches this operation, but the Standard JSON presenter does not have a dedicated lean
booking_modify projection. As a result, the data object can include raw modify response keys such as success, booking, priceDiff, errors, and meta.
Current Response Shape Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_modify",
"requestId": "rr-docs-request-001",
"meta": {
"idempotencyKey": "booking-modify-rr-docs-request-001",
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"success": true,
"booking": {
"reference": "RR-REF-1001",
"supplierReference": "SUP-REF-1001",
"agentReference": "AGENT-REF-1001",
"status": "CONFIRMED",
"rooms": [],
"price": {
"total": 240,
"currencyCode": "EUR"
}
},
"priceDiff": {
"amount": 0,
"currencyCode": "EUR"
},
"errors": null
}
}
13.05 Booking - List
Returns bookings visible to the authenticated connector user.
booking_list
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.fromDate | No | date | Start date filter. |
| data.toDate | No | date | End date filter. |
| data.status | No | string | Status filter. |
| data.propertyId | No | integer | Property filter. |
| data.reference | No | string | Reference filter. |
| data.page | No | integer | Defaults to 1. |
| data.perPage | No | integer | Defaults to 50. |
Response Fields
| Field | Required | Type | Description |
| data.items[] | Yes | array | Booking summaries. |
| data.items[].reference | Yes | string | ATBeds booking reference. |
| data.items[].supplierReference | No | string | Supplier reference when available. |
| data.items[].agentReference | No | string | Client-supplied agent reference. |
| data.items[].status | Yes | string | Current booking status. |
| data.items[].price.total | No | number | Public booking total. |
| data.items[].price.currencyCode | No | string | Three-letter currency code. |
| data.items[].rooms[] | Yes | array | Booked rooms with stay, occupancy, and guest details when available. |
| data.meta | No | object | Pagination and count metadata. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_list",
"data": {
"fromDate": "2026-05-01",
"toDate": "2026-05-31",
"status": null,
"propertyId": "{{propertyId}}",
"reference": null,
"page": 1,
"perPage": 50
}
}
Booking List
Returns bookings visible to the authenticated connector user.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_list.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingListPath}}
Field Notes
- Supported filter keys are
fromDate, toDate, status, propertyId, and reference.
page defaults to 1; perPage defaults to 50.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_list",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"items": [
{
"reference": "RR-REF-1001",
"supplierReference": "SUP-REF-1001",
"agentReference": "AGENT-REF-1001",
"status": "CONFIRMED",
"price": {
"total": 240,
"currencyCode": "EUR"
},
"rooms": [],
"createdAt": "2026-05-10T12:00:00+00:00",
"updatedAt": "2026-05-10T12:00:00+00:00"
}
],
"meta": {
"page": 1,
"perPage": 50,
"count": 1
}
}
}
13.06 Booking - Single
Returns one booking by ATBeds reference.
booking_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.reference | Yes | string | ATBeds booking reference. |
Response Fields
| Field | Required | Type | Description |
| data.booking.reference | Yes | string | ATBeds booking reference. |
| data.booking.supplierReference | No | string | Supplier reference when available. |
| data.booking.agentReference | No | string | Client-supplied agent reference. |
| data.booking.status | Yes | string | Current booking status. |
| data.booking.price.total | No | number | Public booking total. |
| data.booking.price.currencyCode | No | string | Three-letter currency code. |
| data.booking.rooms[] | Yes | array | Booked rooms with stay, occupancy, and guest details when available. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | booking_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "booking_single",
"data": {
"reference": "{{reservationRef}}"
}
}
Booking Single
Returns one booking by ATBeds reference.
Shared endpoint style:
POST {{baseUrl}}{{gatewayPathJson}} with X-Api-Operation: booking_single.
REST-like style when configured:
POST {{baseUrl}}{{standardJsonBookingSinglePath}}
Field Notes
reference is required.
- In a REST-like connector endpoint,
reference can be supplied by path parameter when the endpoint template extracts it.
Success Response Example
{
"schemaVersion": 2,
"success": true,
"operation": "booking_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"data": {
"booking": {
"reference": "RR-REF-1001",
"supplierReference": "SUP-REF-1001",
"agentReference": "AGENT-REF-1001",
"status": "CONFIRMED",
"price": {
"total": 240,
"currencyCode": "EUR"
},
"rooms": [
{
"roomIndex": 0,
"propertyId": 123,
"propertyName": "Roomi Demo Hotel",
"roomTypeId": 1001,
"roomTypeName": "Standard Room",
"ratePlanId": 2001,
"stay": {
"checkinDate": "2026-12-10",
"checkoutDate": "2026-12-12"
},
"adults": 2,
"children": []
}
],
"createdAt": "2026-05-10T12:00:00+00:00",
"updatedAt": "2026-05-10T12:00:00+00:00"
}
}
}
Operations
19 - Errors & Edge Cases
19.01 Error - Unknown Operation
Returned when a shared endpoint request does not resolve to a supported Standard JSON operation.
unsupported_operation
POST{{baseUrl}}{{gatewayPathJson}}
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | unsupported_operation |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "unsupported_operation",
"data": {}
}
Unknown Operation
Returned when a shared endpoint request does not resolve to a supported Standard JSON operation.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "unknown",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "UNKNOWN_OPERATION",
"message": "Unknown or unsupported inbound operation.",
"details": null,
"fields": null
}
}
19.02 Error - Missing Operation
Shared endpoint style requires the operation in the header, query string, or top-level body. If all are missing, operation detection resolves to `unknown`.
POST{{baseUrl}}{{gatewayPathJson}}
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"data": {}
}
Missing Operation On Shared Endpoint
Shared endpoint style requires the operation in the header, query string, or top-level body. If all are missing, operation detection resolves to unknown.
REST-like endpoint style does not require a body operation when the configured endpoint supplies the operation.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "unknown",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "UNKNOWN_OPERATION",
"message": "Unknown or unsupported inbound operation."
}
}
19.03 Error - Invalid Schema Version
Searches one explicitly selected property.
availability_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.stay.checkinDate | Yes | date | Arrival date in YYYY-MM-DD format. |
| data.stay.checkoutDate | Yes | date | Departure date in YYYY-MM-DD format. |
| data.rooms[] | Yes | array | Requested room occupancies. |
| data.rooms[].adults | Yes | integer | Adult count for the room. |
| data.rooms[].children | No | array<int> | Child ages. Empty array means no children. |
| data.context | Yes | object | Currency, market, distribution, nationality, residency, locale, and timezone context. |
| data.hotelFilter.propertyIds | Yes | array<int|string> | Exactly one property ID for single-property search semantics. |
Response Fields
| Field | Required | Type | Description |
| data.searchId | No | string | Search identifier to reuse in rate-check and booking. |
| data.offers[] | Yes | array | Available public offers. Empty array means no availability. |
| data.offers[].offerKey | Yes | string | Opaque public offer key. |
| data.offers[].propertyId | Yes | integer | Property identifier. |
| data.offers[].roomTypeId | Yes | integer|string | Room type identifier. |
| data.offers[].ratePlanId | Yes | integer|string | Rate plan identifier. |
| data.offers[].price.total | Yes | number | Total selling price exposed to the client. |
| data.offers[].price.currencyCode | Yes | string | Three-letter currency code. |
| data.offers[].occupancy.children | No | array<int> | Child ages in the response. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 999,
"operation": "availability_single",
"data": {}
}
Invalid Schema Version
Standard JSON currently supports only schema version 2.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "availability_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "UNSUPPORTED_SCHEMA_VERSION",
"message": "Unsupported schema_version.",
"details": null,
"fields": {
"schema_version": [
"Only schema_version 2 is supported."
]
}
}
}
19.04 Error - Validation Error
Searches one explicitly selected property.
availability_single
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.stay.checkinDate | Yes | date | Arrival date in YYYY-MM-DD format. |
| data.stay.checkoutDate | Yes | date | Departure date in YYYY-MM-DD format. |
| data.rooms[] | Yes | array | Requested room occupancies. |
| data.rooms[].adults | Yes | integer | Adult count for the room. |
| data.rooms[].children | No | array<int> | Child ages. Empty array means no children. |
| data.context | Yes | object | Currency, market, distribution, nationality, residency, locale, and timezone context. |
| data.hotelFilter.propertyIds | Yes | array<int|string> | Exactly one property ID for single-property search semantics. |
Response Fields
| Field | Required | Type | Description |
| data.searchId | No | string | Search identifier to reuse in rate-check and booking. |
| data.offers[] | Yes | array | Available public offers. Empty array means no availability. |
| data.offers[].offerKey | Yes | string | Opaque public offer key. |
| data.offers[].propertyId | Yes | integer | Property identifier. |
| data.offers[].roomTypeId | Yes | integer|string | Room type identifier. |
| data.offers[].ratePlanId | Yes | integer|string | Rate plan identifier. |
| data.offers[].price.total | Yes | number | Total selling price exposed to the client. |
| data.offers[].price.currencyCode | Yes | string | Three-letter currency code. |
| data.offers[].occupancy.children | No | array<int> | Child ages in the response. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_single |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_single",
"data": {
"stay": {
"checkinDate": null,
"checkoutDate": null
},
"rooms": [],
"context": {}
}
}
Validation Error
Returned when the operation is known but the normalized canonical request fails validation.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "availability_single",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "VALIDATION_ERROR",
"message": "The request payload is invalid.",
"details": null,
"fields": {
"stay.checkinDate": [
"The checkin date field is required."
],
"rooms": [
"At least one room is required."
]
}
}
}
19.05 Error - Auth Required
Returns accessible properties for the authenticated connector user.
content_property_list
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.context.currencyCode | No | string | Three-letter currency code such as EUR. |
| data.context.marketCode | No | string | Market code used for partner and pricing context. |
| data.context.locale | No | string | Locale such as en or tr. |
| data.page | No | integer | Defaults to 1. |
| data.perPage | No | integer | Defaults to 50 and is capped at 500. |
| data.filters.propertyIds | No | array<int|string> | Restrict response to specific properties. |
| data.filters.updatedSince | No | datetime | Return content updated since this timestamp when supported. |
| data.include | No | array<string> | Optional include hints such as images, amenities, and policies. |
Response Fields
| Field | Required | Type | Description |
| data.properties[] | Yes | array | Accessible property summaries. |
| data.properties[].id | Yes | integer|string | Public property identifier. |
| data.properties[].name | Yes | string | Property name. |
| data.properties[].location | No | object | Address, place, country, coordinates, and timezone details. |
| data.properties[].type | No | object | Property type summary. |
| data.properties[].chain | No | object|null | Property chain summary when available. |
| data.meta.page | No | integer | Current page. |
| data.meta.perPage | No | integer | Page size. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| X-Api-Operation | content_property_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_property_list",
"data": {
"page": 1,
"perPage": 50
}
}
Authentication Required
Most inbound connector endpoints require authentication. Bearer tokens are preferred.
Token issuing is handled by /api/connectivity/token; it is not a Standard JSON gateway operation.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "content_property_list",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "AUTH_REQUIRED",
"message": "Authentication is required."
}
}
19.06 Error - Unsupported Geography Operation
Geography content operations are not part of the current Standard JSON gateway contract.
content_country_list
POST{{baseUrl}}{{gatewayPathJson}}
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | content_country_list |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "content_country_list",
"data": {}
}
Unsupported Geography Operation
Geography content operations are not part of the current Standard JSON gateway contract.
Current not-supported Standard JSON operations:
content_country_list
content_province_list
content_city_list
These currently resolve as unknown operations for Standard JSON.
19.07 Error - Offer Snapshot Missing
Revalidates an offer before booking.
availability_rate_check
POST{{baseUrl}}{{gatewayPathJson}}
Request Fields
| Field | Required | Type | Description |
| data.offerKey | Yes | string | Opaque offer key from availability. |
| data.searchId | No | string | Search ID from availability. |
| data.stay | Full payload only | object | If present, request is treated as a full canonical rate-check payload. |
| data.occupancy | Full payload only | object | Full canonical occupancy. |
| data.context | Full payload only | object | Full canonical context. |
Response Fields
| Field | Required | Type | Description |
| data.isAvailable | Yes | boolean | Whether the offer is still available. |
| data.offer | No | object | Updated public offer. |
| data.alternatives | No | array | Alternative offers when the requested offer changed or is unavailable. |
Headers
| Header | Value |
| Content-Type | application/json |
| Accept | application/json |
| X-Connector-Uuid | {{connectorUuidJson}} |
| Authorization | Bearer {{tokenJson}} |
| X-Api-Operation | availability_rate_check |
| X-Request-Id | {{requestId}} |
Request Example
{
"schema_version": 2,
"operation": "availability_rate_check",
"data": {
"offerKey": "missing-offer-snapshot",
"searchId": "SEARCH-MISSING"
}
}
Offer Snapshot Missing
Lean rate-check and strict lean booking requests depend on a stored availability offer snapshot.
Error Response Example
{
"schemaVersion": 2,
"success": false,
"operation": "availability_rate_check",
"requestId": "rr-docs-request-001",
"meta": {
"timestamp": "2026-05-10T12:00:00+00:00"
},
"error": {
"code": "OFFER_SNAPSHOT_NOT_FOUND",
"message": "Offer snapshot not found or expired. Run availability again.",
"details": null,
"fields": {
"offerKey": [
"The offer snapshot was not found or has expired. Run availability again."
]
}
}
}
Environment
Variables
These values are documentation placeholders. Do not publish secrets in generated documentation.
# Base URL
baseUrl={{baseurl}}
# Token issuing credentials
userEmail=<admin email>
userPassword=<secret>
# Request defaults
requestId=rr-docs-request-001
locale=en
currencyCode=EUR
marketCode=TR
distributionType=B2B
nationalityCode=TR
residencyCountryCode=TR
timezone=Europe/Istanbul
checkinDate=2026-12-10
checkoutDate=2026-12-12
# Content and booking defaults
placeId=1001
countryCode=TR
locationQuery=Istanbul
propertyId=1
secondPropertyId=2
roomTypeId=1001
ratePlanId=2001
leadFirstName=Ada
leadLastName=Lovelace
[email protected]
leadPhone=+905551112233
agentReference=AGENT-REF-1001
supplierReference=SUP-REF-1001
# Standard JSON
gatewayPathJson=/api/inbound/json
standardJsonContentPropertiesPath=/api/content/properties
standardJsonAvailabilityLocationPath=/api/availability/search/location
standardJsonAvailabilityPath=/api/availability/search
standardJsonAvailabilitySinglePath=/api/availability/search/single
standardJsonRateCheckPath=/api/availability/rate-check
standardJsonBookingPreReservationPath=/api/booking/pre-reservation
standardJsonBookingConfirmPath=/api/booking/confirm
standardJsonBookingCancelPath=/api/booking/cancel
standardJsonBookingModifyPath=/api/booking/modify
standardJsonBookingListPath=/api/booking/list
standardJsonBookingSinglePath=/api/booking/single
connectorUuidJson=<uuid>
# Runtime
tokenJson=<runtime-access-token>
searchId=<runtime-search-id>
offerKey=<runtime-offer-key>
offerTotal=<runtime-offer-total>
offerCurrency=<runtime-offer-currency>
preReservationCode=<runtime-pre-reservation-code>
reservationRef=<runtime-reservation-reference>