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

FieldRequiredTypeDescription
AuthorizationYesHeaderPreferred form: Bearer token issued by /api/connectivity/token.
X-Connector-UuidConditionalHeaderFallback connector resolver when token/domain context is not enough.
X-Request-IdNoHeaderClient-supplied request correlation ID. Echoed as requestId and response header.
X-Api-OperationShared endpoint onlyHeaderPreferred generic operation header when the endpoint does not define the operation.
Idempotency-KeyNoHeaderAccepted for booking and rate-sensitive flows; echoed in response meta when present.
Schema

Standard JSON Envelope

FieldRequiredTypeDescription
schema_versionNointegerOnly version 2 is supported. Accepted aliases: schemaVersion, SchemaVersion.
operationShared endpoint onlystringOperation name. Header and query operation values take precedence over body operation.
idempotency_keyNostringTop-level idempotency key. Header Idempotency-Key is also accepted.
metaNoobjectClient metadata merged into data.meta before hydration.
dataYesobjectOperation-specific payload. Alias Data is also accepted.
Failures

Error Envelope

FieldRequiredTypeDescription
schemaVersionYesintegerAlways 2 for Standard JSON responses.
successYesbooleanfalse for errors.
operationYesstringResolved operation or unknown.
requestIdYesstringGateway request ID.
meta.timestampYesdatetimeResponse timestamp.
error.codeYesstringStable machine-readable error code.
error.messageYesstringClient-facing error message.
error.fieldsNoobjectField-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:

  1. X-Api-Operation header
  2. operation query parameter
  3. 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

HeaderValue
Content-Typeapplication/json
Acceptapplication/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

FieldRequiredTypeDescription
data.context.currencyCodeNostringThree-letter currency code such as EUR.
data.context.marketCodeNostringMarket code used for partner and pricing context.
data.context.localeNostringLocale such as en or tr.
data.pageNointegerDefaults to 1.
data.perPageNointegerDefaults to 50 and is capped at 500.
data.filters.propertyIdsNoarray<int|string>Restrict response to specific properties.
data.filters.updatedSinceNodatetimeReturn content updated since this timestamp when supported.
data.includeNoarray<string>Optional include hints such as images, amenities, and policies.

Response Fields

FieldRequiredTypeDescription
data.properties[]YesarrayAccessible property summaries.
data.properties[].idYesinteger|stringPublic property identifier.
data.properties[].nameYesstringProperty name.
data.properties[].locationNoobjectAddress, place, country, coordinates, and timezone details.
data.properties[].typeNoobjectProperty type summary.
data.properties[].chainNoobject|nullProperty chain summary when available.
data.meta.pageNointegerCurrent page.
data.meta.perPageNointegerPage size.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.propertyIdYesinteger|stringProperty identifier. Aliases: property_id, hotelId, hotel_id, id.
data.context.currencyCodeNostringThree-letter currency code such as EUR.
data.context.marketCodeNostringMarket code used for partner and pricing context.
data.context.localeNostringLocale such as en or tr.
data.includeNoarray<string>Optional include hints.

Response Fields

FieldRequiredTypeDescription
data.property.idYesinteger|stringPublic property identifier.
data.property.nameYesstringProperty name.
data.property.locationNoobjectLocation details.
data.detailsNoobjectExtended content details such as contact, description, and check-in data.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.propertyIdYesinteger|stringProperty identifier.
data.pageNointegerDefaults to 1.
data.perPageNointegerDefaults to 500.

Response Fields

FieldRequiredTypeDescription
data.roomTypes[]YesarrayRoom type summaries.
data.roomTypes[].idYesinteger|stringRoom type identifier.
data.roomTypes[].propertyIdYesinteger|stringParent property identifier.
data.roomTypes[].maxOccupancyNoobjectMaximum total/adult/child occupancy.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.propertyIdYesinteger|stringProperty identifier.
data.roomTypeIdYesinteger|stringRoom type identifier.

Response Fields

FieldRequiredTypeDescription
data.roomType.idYesinteger|stringRoom type identifier.
data.roomType.nameYesstringRoom type name.
data.roomType.maxOccupancyNoobjectMaximum occupancy details.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.propertyIdYesinteger|stringProperty identifier.
data.roomTypeIdNointeger|stringOptional room type filter. Also accepted in filters.roomTypeId.
data.pageNointegerDefaults to 1.
data.perPageNointegerDefaults to 500.

Response Fields

FieldRequiredTypeDescription
data.ratePlans[]YesarrayRate plan summaries.
data.ratePlans[].idYesinteger|stringRate plan identifier.
data.ratePlans[].roomTypeIdYesinteger|stringLinked room type.
data.ratePlans[].currencyCodeYesstringThree-letter currency code.
data.ratePlans[].boardingTypeNoobjectBoarding type summary.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.propertyIdYesinteger|stringProperty identifier.
data.ratePlanIdYesinteger|stringRate plan identifier.

Response Fields

FieldRequiredTypeDescription
data.ratePlan.idYesinteger|stringRate plan identifier.
data.ratePlan.nameYesstringRate plan name.
data.ratePlan.currencyCodeYesstringThree-letter currency code.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.stay.checkinDateYesdateArrival date in YYYY-MM-DD format.
data.stay.checkoutDateYesdateDeparture date in YYYY-MM-DD format.
data.rooms[]YesarrayRequested room occupancies.
data.rooms[].adultsYesintegerAdult count for the room.
data.rooms[].childrenNoarray<int>Child ages. Empty array means no children.
data.contextYesobjectCurrency, market, distribution, nationality, residency, locale, and timezone context.
data.locationYesobjectLocation filter using placeId, countryCode, coordinates, radius, or query.
data.location.radiusKmNonumberSearch radius in kilometers when coordinates are supplied.

Response Fields

FieldRequiredTypeDescription
data.searchIdNostringSearch identifier to reuse in rate-check and booking.
data.offers[]YesarrayAvailable public offers. Empty array means no availability.
data.offers[].offerKeyYesstringOpaque public offer key.
data.offers[].propertyIdYesintegerProperty identifier.
data.offers[].roomTypeIdYesinteger|stringRoom type identifier.
data.offers[].ratePlanIdYesinteger|stringRate plan identifier.
data.offers[].price.totalYesnumberTotal selling price exposed to the client.
data.offers[].price.currencyCodeYesstringThree-letter currency code.
data.offers[].occupancy.childrenNoarray<int>Child ages in the response.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.stay.checkinDateYesdateArrival date in YYYY-MM-DD format.
data.stay.checkoutDateYesdateDeparture date in YYYY-MM-DD format.
data.rooms[]YesarrayRequested room occupancies.
data.rooms[].adultsYesintegerAdult count for the room.
data.rooms[].childrenNoarray<int>Child ages. Empty array means no children.
data.contextYesobjectCurrency, market, distribution, nationality, residency, locale, and timezone context.
data.hotelFilter.propertyIdsYesarray<int|string>Selected property identifiers.
data.hotelFilter.ratePlanIdsNoarray<int|string>Optional rate plan filter.
data.hotelFilter.roomTypeIdsNoarray<int|string>Optional room type filter.

Response Fields

FieldRequiredTypeDescription
data.searchIdNostringSearch identifier to reuse in rate-check and booking.
data.offers[]YesarrayAvailable public offers. Empty array means no availability.
data.offers[].offerKeyYesstringOpaque public offer key.
data.offers[].propertyIdYesintegerProperty identifier.
data.offers[].roomTypeIdYesinteger|stringRoom type identifier.
data.offers[].ratePlanIdYesinteger|stringRate plan identifier.
data.offers[].price.totalYesnumberTotal selling price exposed to the client.
data.offers[].price.currencyCodeYesstringThree-letter currency code.
data.offers[].occupancy.childrenNoarray<int>Child ages in the response.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.stay.checkinDateYesdateArrival date in YYYY-MM-DD format.
data.stay.checkoutDateYesdateDeparture date in YYYY-MM-DD format.
data.rooms[]YesarrayRequested room occupancies.
data.rooms[].adultsYesintegerAdult count for the room.
data.rooms[].childrenNoarray<int>Child ages. Empty array means no children.
data.contextYesobjectCurrency, market, distribution, nationality, residency, locale, and timezone context.
data.hotelFilter.propertyIdsYesarray<int|string>Exactly one property ID for single-property search semantics.

Response Fields

FieldRequiredTypeDescription
data.searchIdNostringSearch identifier to reuse in rate-check and booking.
data.offers[]YesarrayAvailable public offers. Empty array means no availability.
data.offers[].offerKeyYesstringOpaque public offer key.
data.offers[].propertyIdYesintegerProperty identifier.
data.offers[].roomTypeIdYesinteger|stringRoom type identifier.
data.offers[].ratePlanIdYesinteger|stringRate plan identifier.
data.offers[].price.totalYesnumberTotal selling price exposed to the client.
data.offers[].price.currencyCodeYesstringThree-letter currency code.
data.offers[].occupancy.childrenNoarray<int>Child ages in the response.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.offerKeyYesstringOpaque offer key from availability.
data.searchIdNostringSearch ID from availability.
data.stayFull payload onlyobjectIf present, request is treated as a full canonical rate-check payload.
data.occupancyFull payload onlyobjectFull canonical occupancy.
data.contextFull payload onlyobjectFull canonical context.

Response Fields

FieldRequiredTypeDescription
data.isAvailableYesbooleanWhether the offer is still available.
data.offerNoobjectUpdated public offer.
data.alternativesNoarrayAlternative offers when the requested offer changed or is unavailable.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.offerKeyYesstringOpaque offer key from availability.
data.searchIdNostringSearch ID from availability.
data.pricingExpectationNoobjectExpected total, currencyCode, and tolerancePercent.
data.rooms[]YesarrayPublic room and guest details to merge onto stored offer snapshot.
data.rooms[].guests[]RecommendedarrayGuest details, including lead guest.

Response Fields

FieldRequiredTypeDescription
data.preReservationCodeNostringTemporary hold code.
data.expiresAtNodatetimeHold expiry timestamp.
data.booking.referenceYesstringATBeds booking reference.
data.booking.supplierReferenceNostringSupplier reference when available.
data.booking.agentReferenceNostringClient-supplied agent reference.
data.booking.statusYesstringCurrent booking status.
data.booking.price.totalNonumberPublic booking total.
data.booking.price.currencyCodeNostringThree-letter currency code.
data.booking.rooms[]YesarrayBooked rooms with stay, occupancy, and guest details when available.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_pre_reservation
X-Request-Id{{requestId}}
Idempotency-Keybooking-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

FieldRequiredTypeDescription
data.offerKeyYesstringOpaque offer key from availability.
data.preReservationCodeRecommendedstringHold code from pre-reservation.
data.rooms[]YesarrayPublic room and guest details.
data.paymentNoobject|nullPayment context when supported.

Response Fields

FieldRequiredTypeDescription
data.booking.referenceYesstringATBeds booking reference.
data.booking.supplierReferenceNostringSupplier reference when available.
data.booking.agentReferenceNostringClient-supplied agent reference.
data.booking.statusYesstringCurrent booking status.
data.booking.price.totalNonumberPublic booking total.
data.booking.price.currencyCodeNostringThree-letter currency code.
data.booking.rooms[]YesarrayBooked rooms with stay, occupancy, and guest details when available.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_confirm
X-Request-Id{{requestId}}
Idempotency-Keybooking-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

FieldRequiredTypeDescription
data.referenceYesstringATBeds booking reference.
data.supplierReferenceNostringSupplier booking reference.
data.agentReferenceNostringClient booking reference.
data.contextYesobjectSearch/booking context.

Response Fields

FieldRequiredTypeDescription
data.statusNostringCancellation status.
data.penaltiesNoarrayCancellation penalties when present. Empty penalties are omitted.
data.errorsNoarraySupplier or booking errors when present. Empty errors are omitted.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_cancel
X-Request-Id{{requestId}}
Idempotency-Keybooking-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

FieldRequiredTypeDescription
data.referenceYesstringATBeds booking reference.
data.newStayNoobject|nullNew stay dates.
data.newOccupancyNoobject|nullNew occupancy.
data.roomChangesNoarray|nullRoom-level changes such as special requests or rate changes.
data.contextYesobjectSearch/booking context.

Response Fields

FieldRequiredTypeDescription
data.successCurrent behaviorbooleanRaw modify success flag is currently retained.
data.bookingNoobjectModify booking summary. Current presenter does not apply the lean booking projection.
data.priceDiffNoobjectSurcharge/refund information when present.
data.errorsNoarray|nullModification errors when present.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_modify
X-Request-Id{{requestId}}
Idempotency-Keybooking-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

FieldRequiredTypeDescription
data.fromDateNodateStart date filter.
data.toDateNodateEnd date filter.
data.statusNostringStatus filter.
data.propertyIdNointegerProperty filter.
data.referenceNostringReference filter.
data.pageNointegerDefaults to 1.
data.perPageNointegerDefaults to 50.

Response Fields

FieldRequiredTypeDescription
data.items[]YesarrayBooking summaries.
data.items[].referenceYesstringATBeds booking reference.
data.items[].supplierReferenceNostringSupplier reference when available.
data.items[].agentReferenceNostringClient-supplied agent reference.
data.items[].statusYesstringCurrent booking status.
data.items[].price.totalNonumberPublic booking total.
data.items[].price.currencyCodeNostringThree-letter currency code.
data.items[].rooms[]YesarrayBooked rooms with stay, occupancy, and guest details when available.
data.metaNoobjectPagination and count metadata.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_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

FieldRequiredTypeDescription
data.referenceYesstringATBeds booking reference.

Response Fields

FieldRequiredTypeDescription
data.booking.referenceYesstringATBeds booking reference.
data.booking.supplierReferenceNostringSupplier reference when available.
data.booking.agentReferenceNostringClient-supplied agent reference.
data.booking.statusYesstringCurrent booking status.
data.booking.price.totalNonumberPublic booking total.
data.booking.price.currencyCodeNostringThree-letter currency code.
data.booking.rooms[]YesarrayBooked rooms with stay, occupancy, and guest details when available.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationbooking_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

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationunsupported_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

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{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

FieldRequiredTypeDescription
data.stay.checkinDateYesdateArrival date in YYYY-MM-DD format.
data.stay.checkoutDateYesdateDeparture date in YYYY-MM-DD format.
data.rooms[]YesarrayRequested room occupancies.
data.rooms[].adultsYesintegerAdult count for the room.
data.rooms[].childrenNoarray<int>Child ages. Empty array means no children.
data.contextYesobjectCurrency, market, distribution, nationality, residency, locale, and timezone context.
data.hotelFilter.propertyIdsYesarray<int|string>Exactly one property ID for single-property search semantics.

Response Fields

FieldRequiredTypeDescription
data.searchIdNostringSearch identifier to reuse in rate-check and booking.
data.offers[]YesarrayAvailable public offers. Empty array means no availability.
data.offers[].offerKeyYesstringOpaque public offer key.
data.offers[].propertyIdYesintegerProperty identifier.
data.offers[].roomTypeIdYesinteger|stringRoom type identifier.
data.offers[].ratePlanIdYesinteger|stringRate plan identifier.
data.offers[].price.totalYesnumberTotal selling price exposed to the client.
data.offers[].price.currencyCodeYesstringThree-letter currency code.
data.offers[].occupancy.childrenNoarray<int>Child ages in the response.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.stay.checkinDateYesdateArrival date in YYYY-MM-DD format.
data.stay.checkoutDateYesdateDeparture date in YYYY-MM-DD format.
data.rooms[]YesarrayRequested room occupancies.
data.rooms[].adultsYesintegerAdult count for the room.
data.rooms[].childrenNoarray<int>Child ages. Empty array means no children.
data.contextYesobjectCurrency, market, distribution, nationality, residency, locale, and timezone context.
data.hotelFilter.propertyIdsYesarray<int|string>Exactly one property ID for single-property search semantics.

Response Fields

FieldRequiredTypeDescription
data.searchIdNostringSearch identifier to reuse in rate-check and booking.
data.offers[]YesarrayAvailable public offers. Empty array means no availability.
data.offers[].offerKeyYesstringOpaque public offer key.
data.offers[].propertyIdYesintegerProperty identifier.
data.offers[].roomTypeIdYesinteger|stringRoom type identifier.
data.offers[].ratePlanIdYesinteger|stringRate plan identifier.
data.offers[].price.totalYesnumberTotal selling price exposed to the client.
data.offers[].price.currencyCodeYesstringThree-letter currency code.
data.offers[].occupancy.childrenNoarray<int>Child ages in the response.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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

FieldRequiredTypeDescription
data.context.currencyCodeNostringThree-letter currency code such as EUR.
data.context.marketCodeNostringMarket code used for partner and pricing context.
data.context.localeNostringLocale such as en or tr.
data.pageNointegerDefaults to 1.
data.perPageNointegerDefaults to 50 and is capped at 500.
data.filters.propertyIdsNoarray<int|string>Restrict response to specific properties.
data.filters.updatedSinceNodatetimeReturn content updated since this timestamp when supported.
data.includeNoarray<string>Optional include hints such as images, amenities, and policies.

Response Fields

FieldRequiredTypeDescription
data.properties[]YesarrayAccessible property summaries.
data.properties[].idYesinteger|stringPublic property identifier.
data.properties[].nameYesstringProperty name.
data.properties[].locationNoobjectAddress, place, country, coordinates, and timezone details.
data.properties[].typeNoobjectProperty type summary.
data.properties[].chainNoobject|nullProperty chain summary when available.
data.meta.pageNointegerCurrent page.
data.meta.perPageNointegerPage size.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
X-Api-Operationcontent_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

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationcontent_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

FieldRequiredTypeDescription
data.offerKeyYesstringOpaque offer key from availability.
data.searchIdNostringSearch ID from availability.
data.stayFull payload onlyobjectIf present, request is treated as a full canonical rate-check payload.
data.occupancyFull payload onlyobjectFull canonical occupancy.
data.contextFull payload onlyobjectFull canonical context.

Response Fields

FieldRequiredTypeDescription
data.isAvailableYesbooleanWhether the offer is still available.
data.offerNoobjectUpdated public offer.
data.alternativesNoarrayAlternative offers when the requested offer changed or is unavailable.

Headers

HeaderValue
Content-Typeapplication/json
Acceptapplication/json
X-Connector-Uuid{{connectorUuidJson}}
AuthorizationBearer {{tokenJson}}
X-Api-Operationavailability_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>