{
  "item": [
    {
      "name": "Hotels",
      "description": "Search and aggregate accommodation offers",
      "item": [
        {
          "id": "cb6d1101-6b94-4f4c-ae98-9d97b89f8f47",
          "name": "Initiate a hotel search",
          "request": {
            "name": "Initiate a hotel search",
            "description": {
              "content": "Initializes a search session and returns a `session` event. Offers are NOT\nreturned here — fetch them from `POST /api/hotels/results/poll[/{cursor}]`\nor `POST /api/hotels/results/stream[/{cursor}]`. Send the same body to those\nroutes; the server re-derives the session ID from it. The `session` string\nreturned here is informational (debug/logging) — clients do not have to pass\nit back.\n\n- Identical searches (same account + parameters) within the validity window\n  reuse the same session: the provider fan-out runs only once.\n- The search runs in a background orchestrator, decoupled from this request,\n  and writes offers to a per-session Redis stream as providers respond.\n- `expiresAt` marks the end of the result-validity (bookability) window.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "search"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "4958a83d-9272-4559-8f4b-f97026dcbf6b",
              "name": "Search session initialized",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"working\",\n  \"data\": {\n    \"event\": \"session\",\n    \"expiresAt\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"id\": \"<integer>\",\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      },\n      {\n        \"id\": \"<integer>\",\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ],\n    \"session\": \"<string>\",\n    \"status\": \"done\",\n    \"providers\": [\n      {\n        \"id\": \"<integer>\",\n        \"name\": \"<string>\"\n      },\n      {\n        \"id\": \"<integer>\",\n        \"name\": \"<string>\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b8419e78-4e52-4d11-b988-107e1336938e",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7ec07537-4eae-4fed-820a-fcc2f6d66bbb",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9a56bc29-c5cc-457c-ae30-271108bac37b",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2791e714-da17-4785-b8d6-9f9345396808",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "search"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3a336049-6e6d-497c-b202-18593249bb02",
          "name": "Poll one batch of search results",
          "request": {
            "name": "Poll one batch of search results",
            "description": {
              "content": "Returns one enveloped JSON batch of offers for the session derived from\nthe body. The body is identical to the search request (the server\nre-derives the session ID from it); read-time `filters` and `streaming`\nsub-objects may also be supplied. Call again with the cursor from the\nprior response while `hasMore` is `true`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "results",
                "poll"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "1e8fe6b8-a7d4-40cb-8ade-58de3c838ee7",
              "name": "One enveloped JSON batch of offers (zero or more) for the session.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"session\": \"<string>\",\n    \"cursor\": \"<string>\",\n    \"status\": \"working\",\n    \"progress\": \"<integer>\",\n    \"offers\": [\n      {\n        \"code\": \"<string>\",\n        \"hotelId\": \"<integer>\",\n        \"pricing\": {\n          \"total\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"fee\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"taxes\": [\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          ],\n          \"flow\": [\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            },\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            }\n          ]\n        },\n        \"conditions\": {\n          \"confirmation\": \"immediate\",\n          \"payment\": \"pre\",\n          \"packageRate\": \"<boolean>\"\n        },\n        \"providerID\": \"<integer>\",\n        \"cancellation\": {\n          \"policy\": \"PR\",\n          \"frames\": [\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            },\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            }\n          ]\n        },\n        \"board\": {\n          \"code\": \"<string>\",\n          \"name\": \"<string>\"\n        },\n        \"rooms\": [\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          }\n        ],\n        \"remarks\": [\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          },\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          }\n        ],\n        \"promotions\": [\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          }\n        ]\n      },\n      {\n        \"code\": \"<string>\",\n        \"hotelId\": \"<integer>\",\n        \"pricing\": {\n          \"total\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"fee\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"taxes\": [\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          ],\n          \"flow\": [\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            },\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            }\n          ]\n        },\n        \"conditions\": {\n          \"confirmation\": \"immediate\",\n          \"payment\": \"post\",\n          \"packageRate\": \"<boolean>\"\n        },\n        \"providerID\": \"<integer>\",\n        \"cancellation\": {\n          \"policy\": \"FR\",\n          \"frames\": [\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            },\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            }\n          ]\n        },\n        \"board\": {\n          \"code\": \"<string>\",\n          \"name\": \"<string>\"\n        },\n        \"rooms\": [\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          }\n        ],\n        \"remarks\": [\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          },\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          }\n        ],\n        \"promotions\": [\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          }\n        ]\n      }\n    ],\n    \"hasMore\": \"<boolean>\",\n    \"total\": \"<integer>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8ec026af-c4c6-4d31-be07-5deb7ae67968",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f6466e2c-02d6-4ca3-8b62-5666be4807cd",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "2d39229e-5ee1-478f-95e1-dad745f9a389",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "dbf83384-22a5-4b42-a28d-1f107ba707ad",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "479d9bb8-a99d-41fb-a4ae-b6a41fec936e",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1ad758eb-1a1d-4121-bca4-10437f9509d7",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "85a31aac-53aa-45dc-ba46-97d36fe7b626",
          "name": "Poll the next batch of search results from a cursor",
          "request": {
            "name": "Poll the next batch of search results from a cursor",
            "description": {
              "content": "Same as `POST /api/hotels/results/poll` but resumes strictly **after**\nthe offer identified by the given cursor token, so polls never return\nduplicates and never skip entries across disconnects.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "results",
                "poll",
                ":cursor"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "1I2YnhiBxvw",
                  "key": "cursor",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "ed85a4e2-61d4-4f29-8099-7fd4e67b213c",
              "name": "One enveloped JSON batch of offers (zero or more) for the session.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"session\": \"<string>\",\n    \"cursor\": \"<string>\",\n    \"status\": \"working\",\n    \"progress\": \"<integer>\",\n    \"offers\": [\n      {\n        \"code\": \"<string>\",\n        \"hotelId\": \"<integer>\",\n        \"pricing\": {\n          \"total\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"fee\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"taxes\": [\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          ],\n          \"flow\": [\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            },\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            }\n          ]\n        },\n        \"conditions\": {\n          \"confirmation\": \"immediate\",\n          \"payment\": \"pre\",\n          \"packageRate\": \"<boolean>\"\n        },\n        \"providerID\": \"<integer>\",\n        \"cancellation\": {\n          \"policy\": \"PR\",\n          \"frames\": [\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            },\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            }\n          ]\n        },\n        \"board\": {\n          \"code\": \"<string>\",\n          \"name\": \"<string>\"\n        },\n        \"rooms\": [\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          }\n        ],\n        \"remarks\": [\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          },\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          }\n        ],\n        \"promotions\": [\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          }\n        ]\n      },\n      {\n        \"code\": \"<string>\",\n        \"hotelId\": \"<integer>\",\n        \"pricing\": {\n          \"total\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"fee\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"taxes\": [\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            {\n              \"type\": \"<string>\",\n              \"included\": \"<boolean>\",\n              \"percent\": \"<double>\",\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          ],\n          \"flow\": [\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            },\n            {\n              \"accountId\": \"<integer>\",\n              \"buy\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"markup\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"sell\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              },\n              \"rate\": \"<double>\",\n              \"discount\": {\n                \"amount\": \"<double>\",\n                \"currency\": \"<string>\"\n              }\n            }\n          ]\n        },\n        \"conditions\": {\n          \"confirmation\": \"immediate\",\n          \"payment\": \"post\",\n          \"packageRate\": \"<boolean>\"\n        },\n        \"providerID\": \"<integer>\",\n        \"cancellation\": {\n          \"policy\": \"FR\",\n          \"frames\": [\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            },\n            {\n              \"from\": \"<string>\",\n              \"penalty\": \"<integer>\"\n            }\n          ]\n        },\n        \"board\": {\n          \"code\": \"<string>\",\n          \"name\": \"<string>\"\n        },\n        \"rooms\": [\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"type\": \"<string>\",\n            \"category\": \"<string>\",\n            \"bedding\": \"<string>\",\n            \"details\": {\n              \"beds\": \"<string>\",\n              \"bedrooms\": \"<string>\",\n              \"bathrooms\": \"<string>\",\n              \"view\": \"<string>\",\n              \"location\": \"<string>\",\n              \"amenities\": \"<string>\",\n              \"gender\": \"<string>\"\n            },\n            \"id\": \"<integer>\"\n          }\n        ],\n        \"remarks\": [\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          },\n          {\n            \"key\": \"<string>\",\n            \"value\": \"<string>\"\n          }\n        ],\n        \"promotions\": [\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          },\n          {\n            \"name\": \"<string>\",\n            \"percent\": \"<double>\"\n          }\n        ]\n      }\n    ],\n    \"hasMore\": \"<boolean>\",\n    \"total\": \"<integer>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e66e41fb-ed84-446d-8cda-52a638cb1060",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e8e3374e-e6dd-4d94-bace-7d14464df941",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3b2c343f-9e28-4735-b610-8b065d282075",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "6587a6f0-c640-43f5-af8c-4d76ddef7ba2",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a30b7e8a-d697-4041-9c9b-f470b7f16bbc",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ff4ad151-369d-4d5e-a807-0f13a0453898",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "poll",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3db3fa6d-0a32-46fc-9141-b5d89a56f5cd",
          "name": "Stream search results as SSE",
          "request": {
            "name": "Stream search results as SSE",
            "description": {
              "content": "Opens a Server-Sent-Events (`text/event-stream`) stream of session/offers/done\nframes. The only deviation from textbook SSE is that this is a `POST` (so it\ncarries the auth headers and the search body); the response is otherwise\ncanonical SSE, and each `offers`/`done` frame carries the resume cursor in the\nSSE `id:` line. A batch is flushed whenever `streaming.resultsPerPush` offers\naccumulate or `streaming.pushInterval` seconds elapse — whichever happens first.\nWhen the search is idle the server emits empty `offers` frames as keepalives so\ndead clients surface within seconds.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "results",
                "stream"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "text/event-stream"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "7b205ee2-ea28-473c-85c7-0638f8d498c7",
              "name": "SSE stream (`text/event-stream`): the first frame is a `session` event,\nfollowed by one or more `offers` frames (empty arrays during idle keepalive\nticks), and finally a single `done` frame. Each `offers`/`done` frame carries\nthe resume cursor in the SSE `id:` line (mirrored in the payload's `cursor`\nfield); the opening `session` frame has no `id:`. Frames are separated by a\nblank line.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "text/event-stream"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/event-stream"
                }
              ],
              "body": "<string>",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "0c04527c-9a6a-4a65-b63c-fb1c56776815",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ca9200f4-ee13-44b5-943d-e39d005dbd5e",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ba3fa9ed-7d26-4e1b-98ae-056e8fa7855f",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eff0afda-feca-41d1-bc02-1004dbd97c11",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "39b5faa7-5f2e-47a4-9b20-ebd85d6cee47",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1addf56b-da76-4f73-a0b1-36c24c077c3b",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4112cb38-ece6-499c-8b36-eb9aa85802e5",
          "name": "Resume an SSE stream from a cursor",
          "request": {
            "name": "Resume an SSE stream from a cursor",
            "description": {
              "content": "Same as `POST /api/hotels/results/stream` but resumes strictly **after**\nthe offer identified by the given cursor token. Use this when a streaming\nconnection was interrupted — the client passes back the `cursor` (the SSE\n`id:` / the `cursor` field of the last frame it processed) and continues\nwithout dupes or gaps.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "results",
                "stream",
                ":cursor"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "1I2YnhiBxvw",
                  "key": "cursor",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "text/event-stream"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "b2a69a8a-bafd-4ab3-b2d4-622705bb4043",
              "name": "SSE stream (`text/event-stream`): the first frame is a `session` event,\nfollowed by one or more `offers` frames (empty arrays during idle keepalive\nticks), and finally a single `done` frame. Each `offers`/`done` frame carries\nthe resume cursor in the SSE `id:` line (mirrored in the payload's `cursor`\nfield); the opening `session` frame has no `id:`. Frames are separated by a\nblank line.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "text/event-stream"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "text/event-stream"
                }
              ],
              "body": "<string>",
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "6a2fd6e1-02a8-4f3f-8835-4f396c59746d",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9b3c7171-712c-4917-9160-f67f0403b7bf",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7e1ffab0-1025-4b5b-a3e8-af20be5ace5e",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f625ee7d-eff6-4702-ad0e-41cc8e1e2c39",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "75ef2538-c0f6-44a3-b4bb-0ee01410acd6",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "01741e46-6dd7-491e-9692-ec379d9515d5",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "results",
                    "stream",
                    ":cursor"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Opaque cursor token marking the last entry the client already consumed. It is\nthe obfuscated form of the order-stream entry id (resume-only, and distinct from\nan offer's `code`); treat it as an opaque string. Results resume strictly\n**after** this cursor (no duplicates, no gaps). A token that cannot be decoded is\nrejected with `H008`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "1I2YnhiBxvw",
                      "key": "cursor"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 9278\n  },\n  \"timeout\": 30,\n  \"filters\": {\n    \"key_0\": \"string\"\n  },\n  \"streaming\": {\n    \"pushInterval\": 1,\n    \"resultsPerPush\": 1000\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "4f82a6b7-edbc-4df4-a750-5510e77421d0",
          "name": "Resolve the cancellation policy of one offer",
          "request": {
            "name": "Resolve the cancellation policy of one offer",
            "description": {
              "content": "Fills in a cancellation policy the search left unknown (`policy: \"NA\"`) by asking the\nowning provider, synchronously. For a provider that already returned the policy during\nsearch — or has no separate service for it — this is a no-op and the stored offer comes\nback as it was.\n\nThe body is the same search request sent to `/search` (the session ID is re-derived\nfrom it) and access is bound to the account that created the session. The result is\n**not** written back to the cache, so the stored offer keeps its `code` and stays exactly\nas delivered.\n\nIt checks no price: the offer comes back at the price it was delivered at. A price that\nmoved since the search is reported by `/check-availability/{code}` and `/pre-book/{code}`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "cancellation-policy",
                ":code"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "Jy5Tr",
                  "key": "code",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "09586d9c-3669-41e5-919e-994c340c6172",
              "name": "The offer, possibly with a field the provider filled in, at the price it was delivered at.\nNever carries advisories and is never written back, so the `code` is always the one that\nwas requested.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"code\": \"<string>\",\n    \"hotelId\": \"<integer>\",\n    \"pricing\": {\n      \"total\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"fee\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"taxes\": [\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        },\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        }\n      ],\n      \"flow\": [\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        },\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        }\n      ]\n    },\n    \"conditions\": {\n      \"confirmation\": \"on_request\",\n      \"payment\": \"post\",\n      \"packageRate\": \"<boolean>\"\n    },\n    \"providerID\": \"<integer>\",\n    \"cancellation\": {\n      \"policy\": \"NR\",\n      \"frames\": [\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        },\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        }\n      ]\n    },\n    \"board\": {\n      \"code\": \"<string>\",\n      \"name\": \"<string>\"\n    },\n    \"rooms\": [\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      }\n    ],\n    \"remarks\": [\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      },\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      }\n    ],\n    \"promotions\": [\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "32e68f52-1cc9-4298-807e-3fb2c945233e",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7ac3dba0-6ed6-41cb-8109-01a500def4f6",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b51c409a-1f38-4641-865a-3ab4335676bf",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9445fb88-d92e-47cd-9bfc-a4a829b5914d",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9f48f7c7-df28-4126-ac57-3544e898568d",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f740a362-b5a3-4bd7-836c-d721f2873b5c",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "73a0c502-6736-4cc2-a6f7-2ad683a49b0e",
              "name": "The provider operation itself failed (upstream timeout, auth, malformed response). The\nstored offer is left untouched: this operation only adds information, so a failure\nsays nothing about whether the offer is still bookable. `details` carries the native\nprovider message, which may be non-English.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancellation-policy",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "35d2bb8c-f370-4a23-b9f3-50d088bfa45c",
          "name": "Re-check one offer against the provider's live source",
          "request": {
            "name": "Re-check one offer against the provider's live source",
            "description": {
              "content": "Confirms that an offer is still bookable as delivered. Resellers commonly serve search\nresults from their own cache, so a room may already be sold — or repriced by a dynamic\nrate — by the time the user picks it.\n\nBody and access rules are identical to `/cancellation-policy/{code}`. Three outcomes:\n\n- **Confirmed** — `200` with the offer and no advisories.\n- **Changed** — `200` with the current offer under a **new** `code`, plus `warnings`\n  and/or `notices` describing each difference (the `CH` codes of `Notice`: price and\n  fee, cancellation policy, board, room name, confirmation, charges at the property,\n  payment terms). `status` stays `done`: a change is not a failure. The superseded\n  `code` is removed, so book the `code` returned here.\n- **Gone** — `409` with error `H013`. The offer is dropped from the session; a repeat\n  request for that `code` returns `H010`.\n\nAny other failure — `502` with error `H012`, or `422` with `H017` when the answer cannot\nbe priced — **also drops the offer**: one we could not confirm is not bookable, and the\nreason does not change that. Start a new `/search` to obtain a confirmable offer.\n\nThe prices compared are your account's (see `Pricing`), so a pricing rule edited or a rate\nmoved since the search raises `CH001` too, and `CH008` for a pay-at-hotel offer's `fee`.\n\nA provider that does not implement the operation returns the offer as it was — priced\nafresh like any answer — so the endpoint is always safe to call.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "check-availability",
                ":code"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "Jy5Tr",
                  "key": "code",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "03e6e25f-f5f9-4f17-9f2b-0167cd66e62c",
              "name": "The current offer. When nothing changed, there is no change advisory and the `code` is\nunchanged. When something did — in the provider's answer, or in the price your account\nsells at now, since pricing rules and rates are applied afresh — the payload is the\n**new** offer under a new `code` and every difference is listed: `warnings` for changes\nthat are worse for the customer, `notices` for better ones. `pre-book` may also warn\n`PR007`, which is about your account's pricing rules rather than the offer. `status` is\n`done` either way.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"code\": \"<string>\",\n    \"hotelId\": \"<integer>\",\n    \"pricing\": {\n      \"total\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"fee\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"taxes\": [\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        },\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        }\n      ],\n      \"flow\": [\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        },\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        }\n      ]\n    },\n    \"conditions\": {\n      \"confirmation\": \"on_request\",\n      \"payment\": \"post\",\n      \"packageRate\": \"<boolean>\"\n    },\n    \"providerID\": \"<integer>\",\n    \"cancellation\": {\n      \"policy\": \"PR\",\n      \"frames\": [\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        },\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        }\n      ]\n    },\n    \"board\": {\n      \"code\": \"<string>\",\n      \"name\": \"<string>\"\n    },\n    \"rooms\": [\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      }\n    ],\n    \"remarks\": [\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      },\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      }\n    ],\n    \"promotions\": [\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  },\n  \"warnings\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ],\n  \"notices\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ba6a3a24-7571-496a-b14e-a1a55549c03a",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d8761aaf-b4ce-40a7-bae8-ceba87145e04",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "590981fe-5394-406e-8810-d0ca18ee80a4",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d94ee736-1dd8-48b3-9c2b-39fb546666d9",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f553de24-31e4-4243-b382-10cbe2644b6b",
              "name": "The provider reports that this exact rate is no longer bookable. The offer has been\ndropped from the session, so it stops appearing in poll/stream batches and a repeat\nrequest for the same `code` returns `H010` without contacting the provider again.\n\n| Code | Description |\n|------|-------------|\n| `H013` | Offer is no longer available |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "10bac12f-4b74-4782-a4cf-983d66f80042",
              "name": "The offer cannot be priced — for instance no exchange rate for a conversion the chain of\naccounts needs, or no currency two of its accounts share. `details` carries the reason\ncode alone: `no_rate`, `no_shared_currency`, `unknown_currency`, `currency_mismatch`,\n`unknown_payment` or `no_path`. Each route keeps its own failure rule:\n`/check-availability` and `/pre-book` drop the offer; `/book` releases the hold it took\nand drops the offer. Never raised after a successful booking.\n\n| Code | Description |\n|------|-------------|\n| `H017` | The offer cannot be priced |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d5abba5f-71a3-4dd9-bb01-262b281ab1d5",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b5313178-f68c-4327-bf41-d459cf15129d",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bce137e4-3f6a-4e65-9c44-6f49182bb0ef",
              "name": "The revalidation could not be completed (upstream timeout, auth, malformed response),\nso **the offer has been dropped** — exactly as for a sold-out rate. An offer we could\nnot confirm is not bookable, and the reason does not change that; only the code tells\n`H012` and `H013` apart. A repeat request for the same `code` returns `H010`.\n\nStart a new `/search` to obtain a confirmable offer. `details` carries the native\nprovider message, which may be non-English.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed; the unconfirmed offer was dropped |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "check-availability",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "3960e8da-feee-4757-b3b9-58c456e0fa84",
          "name": "Run the provider's pre-book step for one offer",
          "request": {
            "name": "Run the provider's pre-book step for one offer",
            "description": {
              "content": "The pre-book / pre-reservation step, taken immediately before booking. Behaviourally\n**identical** to `/check-availability/{code}` — same body, same outcomes, same\nadvisories — and differs only in which provider operation is dispatched; for most\nproviders both map onto the same upstream call.\n\nUse it as the final confirmation in a booking flow: it revalidates price and\nconditions, and it lets the provider return a pre-book reference that the booking step\nwill use (kept server-side, never delivered).\n\nUnlike `/check-availability/{code}` it also delivers `pricing.flow` — how the price was\nbuilt, account by account — and, when your own account's pricing rules could not be\napplied to the offer (your account sold at its cost), the `PR007` warning.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "pre-book",
                ":code"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "Jy5Tr",
                  "key": "code",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "3c0f8a4b-d7c7-4925-bd74-8801e47a1806",
              "name": "The current offer. When nothing changed, there is no change advisory and the `code` is\nunchanged. When something did — in the provider's answer, or in the price your account\nsells at now, since pricing rules and rates are applied afresh — the payload is the\n**new** offer under a new `code` and every difference is listed: `warnings` for changes\nthat are worse for the customer, `notices` for better ones. `pre-book` may also warn\n`PR007`, which is about your account's pricing rules rather than the offer. `status` is\n`done` either way.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"code\": \"<string>\",\n    \"hotelId\": \"<integer>\",\n    \"pricing\": {\n      \"total\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"fee\": {\n        \"amount\": \"<double>\",\n        \"currency\": \"<string>\"\n      },\n      \"taxes\": [\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        },\n        {\n          \"type\": \"<string>\",\n          \"included\": \"<boolean>\",\n          \"percent\": \"<double>\",\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        }\n      ],\n      \"flow\": [\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        },\n        {\n          \"accountId\": \"<integer>\",\n          \"buy\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"markup\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"sell\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          \"rate\": \"<double>\",\n          \"discount\": {\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        }\n      ]\n    },\n    \"conditions\": {\n      \"confirmation\": \"on_request\",\n      \"payment\": \"post\",\n      \"packageRate\": \"<boolean>\"\n    },\n    \"providerID\": \"<integer>\",\n    \"cancellation\": {\n      \"policy\": \"PR\",\n      \"frames\": [\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        },\n        {\n          \"from\": \"<string>\",\n          \"penalty\": \"<integer>\"\n        }\n      ]\n    },\n    \"board\": {\n      \"code\": \"<string>\",\n      \"name\": \"<string>\"\n    },\n    \"rooms\": [\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"type\": \"<string>\",\n        \"category\": \"<string>\",\n        \"bedding\": \"<string>\",\n        \"details\": {\n          \"beds\": \"<string>\",\n          \"bedrooms\": \"<string>\",\n          \"bathrooms\": \"<string>\",\n          \"view\": \"<string>\",\n          \"location\": \"<string>\",\n          \"amenities\": \"<string>\",\n          \"gender\": \"<string>\"\n        },\n        \"id\": \"<integer>\"\n      }\n    ],\n    \"remarks\": [\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      },\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      }\n    ],\n    \"promotions\": [\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      },\n      {\n        \"name\": \"<string>\",\n        \"percent\": \"<double>\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  },\n  \"warnings\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ],\n  \"notices\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0d33e4c5-7801-4e3a-a2d5-2b455face616",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "04f47ce9-9c3f-4406-b593-2dd74bd00b77",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5dd0ff05-0721-426c-9828-42047e15dd5e",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "100826b7-708e-47c8-8940-a43b91716920",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e7f5073b-a83a-4a76-9362-55e1ec38a8e6",
              "name": "The provider reports that this exact rate is no longer bookable. The offer has been\ndropped from the session, so it stops appearing in poll/stream batches and a repeat\nrequest for the same `code` returns `H010` without contacting the provider again.\n\n| Code | Description |\n|------|-------------|\n| `H013` | Offer is no longer available |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c0b1b956-de65-4d72-a12e-27dd00440e47",
              "name": "The offer cannot be priced — for instance no exchange rate for a conversion the chain of\naccounts needs, or no currency two of its accounts share. `details` carries the reason\ncode alone: `no_rate`, `no_shared_currency`, `unknown_currency`, `currency_mismatch`,\n`unknown_payment` or `no_path`. Each route keeps its own failure rule:\n`/check-availability` and `/pre-book` drop the offer; `/book` releases the hold it took\nand drops the offer. Never raised after a successful booking.\n\n| Code | Description |\n|------|-------------|\n| `H017` | The offer cannot be priced |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "dab0e505-7296-408c-9c3c-a67217d1cd64",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3bdfbde4-1168-438c-9106-e21c79ae8a08",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "85acd296-ed76-4da2-9d75-e95aad6ae065",
              "name": "The revalidation could not be completed (upstream timeout, auth, malformed response),\nso **the offer has been dropped** — exactly as for a sold-out rate. An offer we could\nnot confirm is not bookable, and the reason does not change that; only the code tells\n`H012` and `H013` apart. A repeat request for the same `code` returns `H010`.\n\nStart a new `/search` to obtain a confirmable offer. `details` carries the native\nprovider message, which may be non-English.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed; the unconfirmed offer was dropped |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "pre-book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": \"<integer>\",\n        \"childAges\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"FR\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": 272\n  },\n  \"timeout\": 30\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2b971fdc-9379-4aa3-8c17-5e75f0507fec",
          "name": "Create the reservation for one offer",
          "request": {
            "name": "Create the reservation for one offer",
            "description": {
              "content": "Creates a real reservation with the provider that produced this offer.\n\nIt revalidates like `/pre-book/{code}` — same live call, same `CH` advisories when the\nprovider's answer differs — and then goes one step further: **an offer that reached the\nprovider is consumed**, booked or not, so one `code` can never produce two reservations\nand a repeat request returns `H010`.\n\n**A `200` does not necessarily mean a reservation exists**, and it can mean that for two\ndifferent reasons.\n\nSome providers book in two upstream steps — they block the rate first, which is when their\nreal price appears, and confirm it second. If the offer changed in between, the booking\nstops rather than buying something the customer did not agree to, and the reply carries the\ncurrent offer under a new code instead of a booking.\n\nSeparately, a request can reach the provider and its answer be unreadable — a timeout, a\n`5xx`, a truncated body. Whether a reservation was created is then genuinely unknown, and\nthe reply says so: `status: initialized`, with **no** `provider.reference`. That is not a\nfailure and not a reservation; it is an attempt, and resolving it is yours (see the\n`Unresolved` example).\n\nSo reading a `200` is two steps:\n\n1. `data.status` — a booking has one, an offer has no `status` field at all.\n2. `data.provider.reference` — present if and only if a reservation exists.\n\nSee the response examples.\n\nTwo things differ from the other single-offer routes:\n\n* **The body carries personal data.** `stay.rooms[]` is expanded from occupancy counts\n  into named guests, plus an optional holder, credit card, client reference and free\n  text for the hotel. The session ID is derived from the occupancy those guests imply,\n  so a party that does not reproduce the search resolves to a session that does not\n  exist (`H006`). Room order matters; child-age order does not. A provider that cannot\n  represent a non-guest holder rejects one with `V038` before the booking lock, hold or\n  booking request; the offer remains usable. Provider-specific wire restrictions are also\n  checked there: GoGlobal rejects non-ASCII guest names with `V039`, a guest last name\n  not beginning with two letters with `V041`, and card details with `V040`, without\n  contacting upstream. A provider that accepts only specific card networks rejects an\n  unsupported request card with `V045`; a missing card required by its payment method is\n  `V046`.\n* **The result is not stored here.** The booking is returned to the caller, who is the\n  system of record for it — which is why `provider.data` is delivered (see the schema).\n\nA provider that has no booking implementation answers `501` (`H014`) and the offer is\n**kept**: nothing was asked upstream, so nothing was learned about it.\n\n**Pricing.** The searched path is booked while it is still current; only when it is\ngone is it replaced, by the cheapest current path to the same provider contract at\nHold's net. The path is settled before Hold and fixed through Book. One pricing view\nserves the whole request: rules and rates stay fixed, while each fresh provider net is\nrecalculated along that path. If a path, rule or rate change since the search changes\nyour total or fee, it stops the gate (`CH001` or `CH008`, respectively). A gate abort\nanswers the offer at the held price it compared. The booking's `offer` and a\ngate-abort offer carry `pricing.flow`, and `PR007` when your own account's rules could not\nbe applied. A held offer that cannot be priced is `422` (`H017`): nothing is booked yet,\nso the hold is released and the offer dropped. After a successful booking there is no\n`H017`: the booked offer is priced from the provider's booking answer (a change from what\nyou agreed to raises its `CH` advisory), and only if that answer cannot be priced is the\nbooking answered with the `total` and `fee` the gate accepted — its taxes and every other\nterm being what the booking confirmed.\n\nA concurrent attempt on the same offer is refused with `409` (`H015`) rather than\nbooking twice.\n\n> **If the response never arrives**, a reservation may still exist upstream, and the offer\n> is dropped either way — it cannot be known whether the booking went through, so it must\n> not be bookable again. How that is reported depends on the provider, and a client should\n> handle both: one that distinguishes a delivered-but-unanswered request answers `200` with\n> `status: initialized` and no `provider.reference` (resolving the attempt is then yours —\n> ask the provider whether the booking exists, and record its real status and locator);\n> one that does not answers `502` (`H012`). The `reference` you sent is the key either\n> lookup takes, and on the `initialized` reply the provider's echo of it comes back in\n> `provider.data`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "book",
                ":code"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "Jy5Tr",
                  "key": "code",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "8d436677-77f0-4905-8c2d-b4df744db4da",
              "name": "The booking attempt finished without an error. **`data` has three shapes**, and telling\nthem apart takes two fields:\n\n1. `data.status` — a booking has one, an offer has no `status` field at all.\n2. `data.provider.reference` — **present if and only if a reservation exists.**\n\n* **A booking with a `reference`** — the reservation was created. Change advisories are\n  present only when the confirmed offer differed from the stored one, which is not a\n  failure: the booking exists either way (`PR007` is the one warning that is not a\n  change). The offer it was booked from is **gone** from the\n  session; `data.offer.code` names it for correlation only, and from here on the handle is\n  `data.provider.reference`.\n* **A booking with `status: initialized` and no `reference`** — the request reached the\n  provider and its answer could not be read, so whether a reservation exists is **unknown**.\n  There is no locator because none was ever returned. The offer is still dropped: it may\n  have been bought, so it must not be bookable again. `provider.data` carries the key we\n  sent upstream, and resolving the attempt is yours — ask the provider whether the booking\n  exists, then record its real status and locator. This is not `on_request`: that status\n  means a reservation exists and the hotel has not answered for it yet, which a caller\n  handles by waiting.\n* **An offer** — the rate changed while being held, so **nothing was booked**. Some\n  providers block the rate first and confirm it second, and the price they block at is\n  the real one; when it no longer matches what the customer agreed to, the booking stops.\n  `warnings`/`notices` say what changed and `data` is the current offer under a **new\n  code**. This is deliberately the same reply `/check-availability` and `/pre-book` give\n  for a changed offer: read `data` and re-send with the code it carries to confirm the\n  new terms, or do nothing to decline. Any hold is released immediately, so declining\n  costs nothing.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"status\": \"initialized\",\n    \"createdAt\": \"<dateTime>\",\n    \"offer\": {\n      \"code\": \"<string>\",\n      \"hotelId\": \"<integer>\",\n      \"pricing\": {\n        \"total\": {\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        },\n        \"fee\": {\n          \"amount\": \"<double>\",\n          \"currency\": \"<string>\"\n        },\n        \"taxes\": [\n          {\n            \"type\": \"<string>\",\n            \"included\": \"<boolean>\",\n            \"percent\": \"<double>\",\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          },\n          {\n            \"type\": \"<string>\",\n            \"included\": \"<boolean>\",\n            \"percent\": \"<double>\",\n            \"amount\": \"<double>\",\n            \"currency\": \"<string>\"\n          }\n        ],\n        \"flow\": [\n          {\n            \"accountId\": \"<integer>\",\n            \"buy\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"markup\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"sell\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"rate\": \"<double>\",\n            \"discount\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          },\n          {\n            \"accountId\": \"<integer>\",\n            \"buy\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"markup\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"sell\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            },\n            \"rate\": \"<double>\",\n            \"discount\": {\n              \"amount\": \"<double>\",\n              \"currency\": \"<string>\"\n            }\n          }\n        ]\n      },\n      \"conditions\": {\n        \"confirmation\": \"on_request\",\n        \"payment\": \"post\",\n        \"packageRate\": \"<boolean>\"\n      },\n      \"providerID\": \"<integer>\",\n      \"cancellation\": {\n        \"policy\": \"NA\",\n        \"frames\": [\n          {\n            \"from\": \"<string>\",\n            \"penalty\": \"<integer>\"\n          },\n          {\n            \"from\": \"<string>\",\n            \"penalty\": \"<integer>\"\n          }\n        ]\n      },\n      \"board\": {\n        \"code\": \"<string>\",\n        \"name\": \"<string>\"\n      },\n      \"rooms\": [\n        {\n          \"name\": \"<string>\",\n          \"type\": \"<string>\",\n          \"category\": \"<string>\",\n          \"bedding\": \"<string>\",\n          \"details\": {\n            \"beds\": \"<string>\",\n            \"bedrooms\": \"<string>\",\n            \"bathrooms\": \"<string>\",\n            \"view\": \"<string>\",\n            \"location\": \"<string>\",\n            \"amenities\": \"<string>\",\n            \"gender\": \"<string>\"\n          },\n          \"id\": \"<integer>\"\n        },\n        {\n          \"name\": \"<string>\",\n          \"type\": \"<string>\",\n          \"category\": \"<string>\",\n          \"bedding\": \"<string>\",\n          \"details\": {\n            \"beds\": \"<string>\",\n            \"bedrooms\": \"<string>\",\n            \"bathrooms\": \"<string>\",\n            \"view\": \"<string>\",\n            \"location\": \"<string>\",\n            \"amenities\": \"<string>\",\n            \"gender\": \"<string>\"\n          },\n          \"id\": \"<integer>\"\n        }\n      ],\n      \"remarks\": [\n        {\n          \"key\": \"<string>\",\n          \"value\": \"<string>\"\n        },\n        {\n          \"key\": \"<string>\",\n          \"value\": \"<string>\"\n        }\n      ],\n      \"promotions\": [\n        {\n          \"name\": \"<string>\",\n          \"percent\": \"<double>\"\n        },\n        {\n          \"name\": \"<string>\",\n          \"percent\": \"<double>\"\n        }\n      ]\n    },\n    \"holder\": {\n      \"firstName\": \"<string>\",\n      \"lastName\": \"<string>\",\n      \"email\": \"<email>\",\n      \"phone\": \"<string>\",\n      \"address\": \"<string>\",\n      \"city\": \"<string>\",\n      \"zip\": \"<string>\",\n      \"country\": \"<string>\"\n    },\n    \"rooms\": [\n      {\n        \"status\": \"initialized\",\n        \"adults\": [\n          {\n            \"title\": \"mrs\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          },\n          {\n            \"title\": \"prof\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"id\": \"<integer>\",\n        \"reference\": \"<string>\",\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"miss\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"ms\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      },\n      {\n        \"status\": \"cancelled\",\n        \"adults\": [\n          {\n            \"title\": \"ms\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          },\n          {\n            \"title\": \"ms\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"id\": \"<integer>\",\n        \"reference\": \"<string>\",\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"dr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ],\n    \"provider\": {\n      \"relationID\": \"<integer>\",\n      \"id\": \"<integer>\",\n      \"reference\": \"<string>\",\n      \"data\": {\n        \"key_0\": \"string\"\n      }\n    },\n    \"reference\": \"<string>\",\n    \"remarks\": [\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      },\n      {\n        \"key\": \"<string>\",\n        \"value\": \"<string>\"\n      }\n    ]\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  },\n  \"warnings\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ],\n  \"notices\": [\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    },\n    {\n      \"code\": \"<string>\",\n      \"message\": \"<string>\",\n      \"details\": \"<string>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d2efaf43-c7dd-4fae-9995-8c05413cc913",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1a4f6cb3-68fe-45d4-831d-affd6bbbd5e1",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "93cf5958-59ec-4253-b166-638d958de5a6",
              "name": "The session belongs to a different account.\n\n| Code | Description |\n|------|-------------|\n| `H007` | Search session belongs to another account |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "498971e0-017e-4691-85d1-b1ab81661c3e",
              "name": "The session does not exist or its validity window has expired — start a new search.\nOn the single-offer endpoints the offer or its provider may also be unresolvable.\n\n| Code | Description |\n|------|-------------|\n| `H006` | Search session not found or expired |\n| `H010` | Offer not found — the `code` is unknown, expired, superseded by a revalidation, or cannot be priced again (no origin record) |\n| `H011` | The offer's provider could not be resolved (the relation it was searched through is no longer one of your account's) |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "db46d231-a30e-42b8-a92a-b69e598a5666",
              "name": "The booking could not proceed. Two distinct causes share this status:\n\n| Code | Description | Offer |\n|------|-------------|-------|\n| `H013` | The provider reports the rate as no longer bookable | dropped |\n| `H015` | A booking for this offer is already in progress | kept |\n\n`H015` protects against a retry or a double submit creating a second reservation. It\nclears on its own once the in-flight attempt is well past its timeout; do not retry\nin a tight loop.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "107052a7-ed5d-47b0-927f-1f59a34b0449",
              "name": "The offer cannot be priced — for instance no exchange rate for a conversion the chain of\naccounts needs, or no currency two of its accounts share. `details` carries the reason\ncode alone: `no_rate`, `no_shared_currency`, `unknown_currency`, `currency_mismatch`,\n`unknown_payment` or `no_path`. Each route keeps its own failure rule:\n`/check-availability` and `/pre-book` drop the offer; `/book` releases the hold it took\nand drops the offer. Never raised after a successful booking.\n\n| Code | Description |\n|------|-------------|\n| `H017` | The offer cannot be priced |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unprocessable Entity (WebDAV) (RFC 4918)",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ec8a25fc-e726-47f7-98c4-c25751c476d3",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "cc57aa5c-8fd7-412f-b579-b85615f76b95",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "bb90174c-29d4-4128-b666-eea835b9e76b",
              "name": "This offer's provider has no booking implementation. Nothing was sent upstream, so\nnothing was learned about the offer and it **remains bookable** — unlike every other\nfailure here, it is not dropped, and the same offer may still be usable through another\nprovider.\n\n| Code | Description |\n|------|-------------|\n| `H014` | The provider does not support this operation |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Implemented",
              "code": 501,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "29b5b4d6-fde2-40ad-9d0f-637d1854bffb",
              "name": "The revalidation could not be completed (upstream timeout, auth, malformed response),\nso **the offer has been dropped** — exactly as for a sold-out rate. An offer we could\nnot confirm is not bookable, and the reason does not change that; only the code tells\n`H012` and `H013` apart. A repeat request for the same `code` returns `H010`.\n\nStart a new `/search` to obtain a confirmable offer. `details` carries the native\nprovider message, which may be non-English.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed; the unconfirmed offer was dropped |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "book",
                    ":code"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The offer's `code` as delivered by poll/stream — a content-derived hash and the\nbookable identifier. It is **not** a cursor and is used verbatim (no decoding). An\nunknown, expired, or superseded code is rejected with `H010`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "Jy5Tr",
                      "key": "code"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"search\": {\n    \"destinationId\": \"<integer>\",\n    \"hotelIds\": [\n      \"<integer>\"\n    ],\n    \"geo\": {\n      \"lat\": \"<float>\",\n      \"lon\": \"<float>\",\n      \"radius\": \"<integer>\"\n    }\n  },\n  \"stay\": {\n    \"checkIn\": \"<dateTime>\",\n    \"checkOut\": \"<dateTime>\",\n    \"rooms\": [\n      {\n        \"adults\": [\n          {\n            \"title\": \"mr\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\",\n            \"age\": \"<integer>\"\n          }\n        ],\n        \"children\": [\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mstr\",\n            \"gender\": \"male\",\n            \"countryCode\": \"<string>\"\n          },\n          {\n            \"age\": \"<integer>\",\n            \"firstName\": \"<string>\",\n            \"lastName\": \"<string>\",\n            \"title\": \"mr\",\n            \"gender\": \"female\",\n            \"countryCode\": \"<string>\"\n          }\n        ]\n      }\n    ]\n  },\n  \"guestCountry\": \"IL\",\n  \"currency\": \"<string>\",\n  \"customFields\": {\n    \"key_0\": \"string\",\n    \"key_1\": 3613\n  },\n  \"timeout\": 30,\n  \"holder\": {\n    \"firstName\": \"<string>\",\n    \"lastName\": \"<string>\",\n    \"email\": \"<email>\",\n    \"phone\": \"<string>\",\n    \"address\": \"<string>\",\n    \"city\": \"<string>\",\n    \"zip\": \"<string>\",\n    \"country\": \"<string>\"\n  },\n  \"reference\": \"hb\",\n  \"creditCard\": {\n    \"number\": \"<string>\",\n    \"expiration\": \"12/6189\",\n    \"cvv\": \"<string>\",\n    \"name\": \"<string>\"\n  },\n  \"specialRequests\": \"<string>\"\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "a2656c63-a73a-4001-86f6-065f49ef851b",
          "name": "Cancel a reservation",
          "request": {
            "name": "Cancel a reservation",
            "description": {
              "content": "Cancels a reservation with the provider that made it. Unlike every other hotel operation this one takes no search body: a booking outlives the search session that produced it, and this service does not persist bookings — the caller is the system of record and hands back the `provider` node returned by `/api/hotels/book/{code}`.\n\nThe reservation is named twice, and the two are different identifiers. The path carries **your** `reference`, the one `/book` required; the body carries the **provider's** node, including their own locator. Both are needed because this service stores nothing: it cannot translate your reference into a vendor locator, so you supply the locator, and it echoes your reference back so the answer says which reservation it is about.\n\nThe operation is idempotent by contract, which is what makes retrying the correct response to a failure whose answer was lost.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "cancel",
                ":reference"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "r1",
                  "key": "reference",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "f342c3d9-ab98-4f7c-a765-985967429f4c",
              "name": "The reservation is cancelled.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"status\": \"on_request\",\n    \"reference\": \"<string>\",\n    \"provider\": {\n      \"reference\": \"<string>\"\n    }\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "76a3c3e7-24f1-4ae1-aa53-ba32b64a71e0",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "76d1b4a5-83ea-4ec0-98f3-51690e0c3507",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0e0b9800-3fd5-4138-b263-72f5ce896b2c",
              "name": "The reservation could not be resolved. There is no session and no offer behind the\npost-booking endpoints, so the 404 means one of two different things. Shared by\n`/api/hotels/cancel/{reference}` and `/api/hotels/status/{reference}`, whose resolution path\nis one implementation.\n\n| Code | Description |\n|------|-------------|\n| `H011` | The provider relation could not be resolved: `provider.relationID` names no relation of this account, or it names one belonging to a different `provider.id`, or — when `provider.relationID` was omitted — `provider.id` does not resolve to exactly one current relation. This check is also the request's authorization, since the relation set is scoped to the caller's own subtree |\n| `H016` | The provider reports no such booking. Raising it requires a vendor code that proves absence: on `/cancel` GoGlobal publishes one, and on `/status` RateHawk does for a booking attempt its creation check states was not created (one of its named final failures) while Hotelbeds, Restel and GoGlobal do not — so on those three a status check for an unknown reference is an ordinary `H012` rather than this. RateHawk's `order_not_found` is not such a statement on either path (on cancel it also names an order already cancelled) and is answered `H012` |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d3c7c323-cf3d-4df2-a85c-5691130f482e",
              "name": "The post-booking JSON request exceeds 64 KiB (`H001`).",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Request Entity Too Large",
              "code": 413,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "db9ec99d-544b-4098-a718-0a213894b668",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b0ae4d7d-57e2-4efe-8912-248d7e9844f9",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "340fe0c1-895a-4ab7-835f-080be2a5d905",
              "name": "This provider has no cancellation implementation. Nothing was sent upstream.\n\n| Code | Description |\n|------|-------------|\n| `H014` | The provider does not support this operation |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Implemented",
              "code": 501,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "c959c14e-d69f-4920-a160-3f1a394d27fc",
              "name": "The cancellation could not be confirmed (upstream timeout, auth, malformed response, or\nany vendor answer that is not one of the two unambiguous signals — no such booking, or\nalready cancelled). Nothing is consumed by this failure — cancellation carries no lock\nand drops nothing — so retrying with the same body is the documented remedy. The\nmapping is deliberately conservative: `H012` only costs a retry, whereas a wrong `H016`\nwould send the caller hunting for a typo in a correct reference, and a wrong success\nwould report a live reservation as gone.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "cancel",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "7c5adf87-dfd3-48d9-bfad-de3876b32e21",
          "name": "Read a reservation's status",
          "request": {
            "name": "Read a reservation's status",
            "description": {
              "content": "Reports what one reservation currently looks like at the provider that made it. It takes the same path parameter and body as `/api/hotels/cancel/{reference}` and identifies the reservation the same way — a booking outlives the search session that produced it, and this service does not persist bookings, so the caller is the system of record and hands back the `provider` node returned by `/api/hotels/book/{code}`.\n\nUnlike every other hotel operation this one only **reads**. Nothing is consumed by a failure, no lock is taken, and there is no such thing as an ambiguous outcome: a failed status check leaves the reservation exactly as it was, so retrying is always safe.\n\nTwo vendor limits are worth knowing. `H016` (\"no such booking\") is raised only where the vendor states absence by name — RateHawk does, both for an unknown identifier and for a booking it reports as never created, while Hotelbeds, Restel and GoGlobal publish no such status — so on those providers an unknown reference comes back as an ordinary `H012`, because a wrong 404 would send the caller hunting for a typo in a correct reference. A handle for a booking reported as `initialized` is answerable here for the same reason it is accepted at all: the provider knows from the handle that the attempt was never resolved, and asks the upstream call that can settle it. And a provider may be unable to distinguish a reservation cancelled *with fees* from a live one, in which case it reports `confirmed`; this endpoint is therefore not proof that a booking was never cancelled — the caller's own record is.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "hotels",
                "status",
                ":reference"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "r1",
                  "key": "reference",
                  "disabled": false,
                  "description": {
                    "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            },
            "auth": null
          },
          "response": [
            {
              "id": "3796afdf-5cf6-47e9-a36a-8e149e08c26a",
              "name": "The reservation's current state.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"status\": \"on_request\",\n    \"reference\": \"<string>\",\n    \"provider\": {\n      \"reference\": \"<string>\"\n    }\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8db9532c-8170-4a38-b280-b4709ab1c1ab",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4bf5da81-011a-48e0-8964-fe4f9e2de635",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1c95e212-460d-414d-92e2-19e860d4e6da",
              "name": "The reservation could not be resolved. There is no session and no offer behind the\npost-booking endpoints, so the 404 means one of two different things. Shared by\n`/api/hotels/cancel/{reference}` and `/api/hotels/status/{reference}`, whose resolution path\nis one implementation.\n\n| Code | Description |\n|------|-------------|\n| `H011` | The provider relation could not be resolved: `provider.relationID` names no relation of this account, or it names one belonging to a different `provider.id`, or — when `provider.relationID` was omitted — `provider.id` does not resolve to exactly one current relation. This check is also the request's authorization, since the relation set is scoped to the caller's own subtree |\n| `H016` | The provider reports no such booking. Raising it requires a vendor code that proves absence: on `/cancel` GoGlobal publishes one, and on `/status` RateHawk does for a booking attempt its creation check states was not created (one of its named final failures) while Hotelbeds, Restel and GoGlobal do not — so on those three a status check for an unknown reference is an ordinary `H012` rather than this. RateHawk's `order_not_found` is not such a statement on either path (on cancel it also names an order already cancelled) and is answered `H012` |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "9af9a14c-0b07-47f6-bacd-3bb1ad7c376d",
              "name": "The post-booking JSON request exceeds 64 KiB (`H001`).",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Request Entity Too Large",
              "code": 413,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "345690ce-ac5a-4b2f-9f38-598fdba40d91",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "ba3dc079-9ec2-4cb6-bfc9-849d1eead495",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "47560da2-3130-4f5a-96b0-9861212a8256",
              "name": "This provider has no status implementation. Nothing was sent upstream.\n\n| Code | Description |\n|------|-------------|\n| `H014` | The provider does not support this operation |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Not Implemented",
              "code": 501,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "a37d1229-ef8d-4e88-b158-dd0286cd5f3b",
              "name": "The status could not be read (upstream timeout, auth, malformed response, or a vendor\nstatus this service cannot interpret). **Nothing was changed** — the operation only\nreads — so retrying with the same body is always safe and is the documented remedy.\n\nAn uninterpretable vendor status is reported here rather than guessed at: both available\nguesses are harmful, since `confirmed` would tell the caller they hold a room that may be\ngone and `cancelled` would write off one that may be live.\n\n| Code | Description |\n|------|-------------|\n| `H012` | Provider operation failed |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "hotels",
                    "status",
                    ":reference"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) The booking's `reference` — the identifier you supplied to `/api/hotels/book/{code}` and\nreceived back in `data.reference`. It is used verbatim.\n\nIt is **your** reference, not the provider's. The vendor's own locator travels in the body,\ninside the `provider` node, and comes back under `provider.reference`.\n\nBecause it appears here in a URL path, it is restricted to RFC 3986 unreserved characters\n(`A-Z a-z 0-9 - . _ ~`) and to 20 characters — the same rules `/book` applied when it\naccepted the value, and reported with the same codes (`V043`, `V033`).\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "r1",
                      "key": "reference"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  },
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "POST",
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"provider\": {\n    \"id\": \"<integer>\",\n    \"reference\": \"<string>\",\n    \"relationID\": \"<integer>\",\n    \"data\": {\n      \"key_0\": 6392,\n      \"key_1\": 119\n    }\n  }\n}",
                  "options": {
                    "raw": {
                      "headerFamily": "json",
                      "language": "json"
                    }
                  }
                }
              },
              "status": "Bad Gateway",
              "code": 502,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Static",
      "description": "Our own geography and hotel content: countries, destinations, hotels, images and\ntimezones. A search returns hotel **ids**; these endpoints say what those ids mean, so\na client can fetch the content once and keep it.\n\nEverything here is a `GET` with no body. Cacheable successful responses carry an `ETag`\n(plus `Last-Modified` where the data has a modification time); the change feed and every\nerror use `Cache-Control: no-store`.\n",
      "item": [
        {
          "id": "cf6d2454-b09a-415f-a389-ec4ca14dccaa",
          "name": "List every country",
          "request": {
            "name": "List every country",
            "description": {
              "content": "A few hundred rows that change almost never — the endpoint most worth caching.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "countries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "6d96d646-5a46-4aaf-a802-a650e40a99ea",
              "name": "Every country.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    {\n      \"id\": \"<string>\",\n      \"name\": \"<string>\",\n      \"continent\": \"<string>\",\n      \"region\": \"<string>\"\n    },\n    {\n      \"id\": \"<string>\",\n      \"name\": \"<string>\",\n      \"continent\": \"<string>\",\n      \"region\": \"<string>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3e8cb661-9c0b-4d16-8827-290f4f3fc1fa",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "4e955ec3-fb30-46d9-994c-5d93ce3ce3a4",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "231cc4bd-5260-47b3-af7e-7fd9feff36ec",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "061ab42e-0f70-4cdb-8bac-b1c84d765525",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": []
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "b69b3e29-4d95-4d04-b7e7-ecbbe90805df",
          "name": "List a country's destination ids",
          "request": {
            "name": "List a country's destination ids",
            "description": {
              "content": "All ids in one response — fetch detail from `/api/static/destinations/{ids}`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "countries",
                ":countryId",
                "destinations"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "CC",
                  "key": "countryId",
                  "disabled": false,
                  "description": {
                    "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "00cf9484-f1af-4ece-a0e2-827f169401b9",
              "name": "Complete list of ids.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    \"<integer>\",\n    \"<integer>\"\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8ca2d453-e21f-4438-b78f-169c34a8c148",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "daa48e00-8f84-47fb-8a12-03da5c8d4fef",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4723dfbe-dde8-4141-b481-6539bade91c4",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "b7dc1ade-1dcf-4142-a66b-3f8c8a4df991",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "e6879404-3be5-4bd2-a83b-a6d9b64b3f24",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "countries",
                    ":countryId",
                    "destinations"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ISO 3166-1 alpha-2 code, case-insensitive.",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "CC",
                      "key": "countryId"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2882b1cf-3254-4626-b271-6dc52a9475ed",
          "name": "Get destination detail",
          "request": {
            "name": "Get destination detail",
            "description": {
              "content": "Only active destinations are returned, so an id that is unknown or retired is simply\nabsent from the response rather than an error.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "destinations",
                ":ids"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "436b8ad6-8e2a-4416-bbdd-66cee8bcae76",
              "name": "Destination detail. Inactive and unknown ids are absent.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    {\n      \"id\": \"<integer>\",\n      \"searchable\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"type\": \"rural\",\n      \"countryId\": \"<string>\",\n      \"geo\": {\n        \"lat\": \"<double>\",\n        \"lon\": \"<double>\"\n      },\n      \"seoName\": \"<string>\"\n    },\n    {\n      \"id\": \"<integer>\",\n      \"searchable\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"type\": \"rural\",\n      \"countryId\": \"<string>\",\n      \"geo\": {\n        \"lat\": \"<double>\",\n        \"lon\": \"<double>\"\n      },\n      \"seoName\": \"<string>\"\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eb80a1da-5aa5-44d9-a48f-47970a9c8577",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "b4d7d672-0fcf-4395-8949-f57308793b87",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8423223f-03a7-402b-bb59-401003282695",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "88f6cfaa-dcaf-42f0-9eb0-c6a04a958638",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d2b82ff5-86a5-439d-914d-042dda58fc43",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9dd88c6e-9523-46ff-9a0d-526a2c09a44d",
          "name": "List the hotel ids of one or more destinations",
          "request": {
            "name": "List the hotel ids of one or more destinations",
            "description": {
              "content": "Grouped by destination. `surroundings` holds hotels attached to a destination as nearby\nrather than inside it.\n\nEvery active relationship for the requested destinations is returned in one response.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "destinations",
                ":ids",
                "hotels"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "2268b75a-8992-4d48-accf-fba6cc6d7f52",
              "name": "Complete hotel-id lists, grouped by destination.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    {\n      \"destinationId\": \"<integer>\",\n      \"hotelIds\": [\n        \"<integer>\",\n        \"<integer>\"\n      ],\n      \"surroundings\": [\n        \"<integer>\",\n        \"<integer>\"\n      ]\n    },\n    {\n      \"destinationId\": \"<integer>\",\n      \"hotelIds\": [\n        \"<integer>\",\n        \"<integer>\"\n      ],\n      \"surroundings\": [\n        \"<integer>\",\n        \"<integer>\"\n      ]\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0f0a9f58-a341-43b1-a7ca-38820224d735",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "f6771de2-2525-4956-a676-3697316d3566",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "33c436d3-32dd-4153-aebb-4e93d7aff195",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3d42ab90-4f64-49a5-9e69-dfd827ef803b",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fed99d95-223c-40e9-b94f-72ca60dcfe4c",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "destinations",
                    ":ids",
                    "hotels"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "30d273f7-0800-425f-a83a-fb87ac6cb0b6",
          "name": "Get hotel detail",
          "request": {
            "name": "Get hotel detail",
            "description": {
              "content": "Everything needed to render a property — name, address, stars, description, facilities,\nremark — plus `mainImage`, the cover.\n\nThe cover is here so a client painting a list of search results can show a picture per\nhotel without fetching the whole gallery. `mainImage` is **absent** when no cover is\nassigned or the assigned one has been withdrawn; it is never replaced by another picture\nfrom the gallery.\n\nThe full gallery lives at `/api/static/hotels/{ids}/images`.\n\nThese records are the only ones carrying a modification time, so this is the only\nendpoint that also sends `Last-Modified`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "hotels",
                ":ids"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "0dc80ef3-d78c-4c58-b2d6-0e28bc6a2d56",
              "name": "Hotel detail, including the cover image. Inactive and unknown ids are absent.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Last-Modified",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    {\n      \"id\": \"<integer>\",\n      \"name\": \"<string>\",\n      \"address\": \"<string>\",\n      \"zip\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"fax\": \"<string>\",\n      \"stars\": \"<double>\",\n      \"geo\": {\n        \"lat\": \"<double>\",\n        \"lon\": \"<double>\"\n      },\n      \"preferred\": \"<boolean>\",\n      \"top\": \"<boolean>\",\n      \"seoName\": \"<string>\",\n      \"updated\": \"<long>\",\n      \"description\": \"<string>\",\n      \"facilities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"remark\": \"<string>\",\n      \"mainImage\": {\n        \"id\": \"024327\",\n        \"url\": \"<uri>\",\n        \"title\": \"<string>\",\n        \"width\": \"<integer>\",\n        \"height\": \"<integer>\",\n        \"main\": \"<boolean>\"\n      }\n    },\n    {\n      \"id\": \"<integer>\",\n      \"name\": \"<string>\",\n      \"address\": \"<string>\",\n      \"zip\": \"<string>\",\n      \"phone\": \"<string>\",\n      \"fax\": \"<string>\",\n      \"stars\": \"<double>\",\n      \"geo\": {\n        \"lat\": \"<double>\",\n        \"lon\": \"<double>\"\n      },\n      \"preferred\": \"<boolean>\",\n      \"top\": \"<boolean>\",\n      \"seoName\": \"<string>\",\n      \"updated\": \"<long>\",\n      \"description\": \"<string>\",\n      \"facilities\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"remark\": \"<string>\",\n      \"mainImage\": {\n        \"id\": \"1632649\",\n        \"url\": \"<uri>\",\n        \"title\": \"<string>\",\n        \"width\": \"<integer>\",\n        \"height\": \"<integer>\",\n        \"main\": \"<boolean>\"\n      }\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5862c1e0-ed93-4c55-a925-fe3275afaede",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "26f9dc16-92c3-4333-9da5-3447719bf6e8",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "27e43f2a-601e-4f30-8da9-c23b3ab25bd1",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "fb1c7409-d174-43ba-820b-b46eeb35a170",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "eda9b051-bf2d-4bcd-b047-4af1cfffe34d",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "2d6d5b9d-396e-4204-967e-6cd3983009c4",
          "name": "Get hotel image galleries",
          "request": {
            "name": "Get hotel image galleries",
            "description": {
              "content": "Images in catalogue order, with the cover flagged `main: true`. The cover is a member of\nthe gallery, not an alternative to it.\n\nA hotel with no images is omitted from the response rather than returned empty.\n\nIts id cap is configured independently from the other operations and currently defaults\nto 100. A hotel can carry over a hundred pictures, so this cap can be tightened without\nreducing the hotel-detail batch size.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "hotels",
                ":ids",
                "images"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "13af276d-5112-45fc-853c-0abd1a0d32c3",
              "name": "Image galleries. Hotels with no images are omitted.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": [\n    {\n      \"hotelId\": \"<integer>\",\n      \"images\": [\n        {\n          \"id\": \"5679256522\",\n          \"url\": \"<uri>\",\n          \"title\": \"<string>\",\n          \"width\": \"<integer>\",\n          \"height\": \"<integer>\",\n          \"main\": \"<boolean>\"\n        },\n        {\n          \"id\": \"4000\",\n          \"url\": \"<uri>\",\n          \"title\": \"<string>\",\n          \"width\": \"<integer>\",\n          \"height\": \"<integer>\",\n          \"main\": \"<boolean>\"\n        }\n      ]\n    },\n    {\n      \"hotelId\": \"<integer>\",\n      \"images\": [\n        {\n          \"id\": \"128207\",\n          \"url\": \"<uri>\",\n          \"title\": \"<string>\",\n          \"width\": \"<integer>\",\n          \"height\": \"<integer>\",\n          \"main\": \"<boolean>\"\n        },\n        {\n          \"id\": \"953257339\",\n          \"url\": \"<uri>\",\n          \"title\": \"<string>\",\n          \"width\": \"<integer>\",\n          \"height\": \"<integer>\",\n          \"main\": \"<boolean>\"\n        }\n      ]\n    }\n  ]\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "1ac7b38d-7453-442b-a74a-8a3aafcb602e",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "8b37c451-3e55-4478-870f-029746d9e83f",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "825f1da4-da62-4c0a-a239-badbd6dc44f5",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7ae9aa80-4bb4-4a56-aabb-9e9bc1d65845",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "621600bf-55e1-4df1-9cda-70b6bb2f0777",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "hotels",
                    ":ids",
                    "images"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f3c90e29-f672-46d3-9a39-35ab03561c9f",
          "name": "List hotels changed since a timestamp",
          "request": {
            "name": "List hotels changed since a timestamp",
            "description": {
              "content": "Refresh a local copy of the catalogue without pulling all of it. `active` contains\ncurrently active hotels to fetch from `/api/static/hotels/{ids}`; `deactivated` contains\nevery changed hotel whose current status is not `1`, so clients can remove or explain it.\n\nThe lower bound is inclusive (`updated >= timestamp`) so second-resolution timestamps\ncannot lose an update at the boundary. Safe duplicates are therefore possible. The scan\nis bounded by `updated <= asOf`, which freezes the result while its id-ordered pages are\nconsumed.\n\n**Store the `asOf` from the response and use it as the next sync's `timestamp`.** It is\nthe moment the scan started, and it is carried inside the cursor so every page of one\nscan reports the same value. A hotel modified while the scan was running has an\n`updated` past that mark, so the next sync picks it up — nothing is lost even though\npages are ordered by id.\n\nThis is the one endpoint that is never cached: every distinct timestamp is a distinct\nanswer. It sends `Cache-Control: no-store` and no `ETag`.\n\nThe timestamp must be within the last 180 days and must not be in the future. Older\nclients must bootstrap a fresh catalogue copy.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "changes",
                "hotels",
                ":timestamp"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "<integer>"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                    "type": "text/plain"
                  },
                  "key": "after",
                  "value": "<string>"
                }
              ],
              "variable": [
                {
                  "type": "any",
                  "value": "<long>",
                  "key": "timestamp",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "78169cce-0642-4696-a627-3a503b138ed3",
              "name": "One page of active and deactivated hotel ids changed since the requested timestamp. Never cached.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "changes",
                    "hotels",
                    ":timestamp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                        "type": "text/plain"
                      },
                      "key": "after",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<long>",
                      "key": "timestamp"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "Always `no-store`.",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": "<string>"
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"active\": [\n      \"<integer>\",\n      \"<integer>\"\n    ],\n    \"deactivated\": [\n      \"<integer>\",\n      \"<integer>\"\n    ],\n    \"asOf\": \"<long>\",\n    \"nextCursor\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "4aa22f90-c4f1-41bb-8c0f-9586f0bec859",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "changes",
                    "hotels",
                    ":timestamp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                        "type": "text/plain"
                      },
                      "key": "after",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<long>",
                      "key": "timestamp"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0b62f5c7-3d55-4331-86d4-0c4da77602ef",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "changes",
                    "hotels",
                    ":timestamp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                        "type": "text/plain"
                      },
                      "key": "after",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<long>",
                      "key": "timestamp"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d354f766-da8a-4bb3-8338-5e1c185d8495",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "changes",
                    "hotels",
                    ":timestamp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                        "type": "text/plain"
                      },
                      "key": "after",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<long>",
                      "key": "timestamp"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "7803ad89-6e6e-4dd2-8d1c-50e146662300",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "changes",
                    "hotels",
                    ":timestamp"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "Change-feed page size. Defaults to `static.change_page_limit_default` (100) and is\nclamped to `static.change_page_limit_max` (100).\n",
                        "type": "text/plain"
                      },
                      "key": "limit",
                      "value": "<integer>"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "The `nextCursor` from the previous page. Opaque — do not construct or parse it.\n",
                        "type": "text/plain"
                      },
                      "key": "after",
                      "value": "<string>"
                    }
                  ],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Unix seconds. Hotels modified at or after this instant are returned. Use the `asOf` from\nthe previous sync; the inclusive boundary can repeat ids but cannot lose same-second\nupdates. Must be within the configured 180-day lookback and not in the future.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<long>",
                      "key": "timestamp"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "f8446232-8b87-4050-82cf-0293672132b7",
          "name": "Resolve the timezones a set of hotels spans",
          "request": {
            "name": "Resolve the timezones a set of hotels spans",
            "description": {
              "content": "Returns one group per distinct timezone, because a list of hotels can legitimately cover\nseveral. Hotels with no resolvable zone — unknown, inactive, or holding no coordinates —\nare reported in `unresolved` rather than dropped.\n\nThe answer is an IANA name and needs no dates: the name determines the offset for any\ninstant, summer or winter.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "timezones",
                "hotels",
                ":ids"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "606fc299-4f4b-44e3-8a0d-2ed1ba42c716",
              "name": "The timezones the target spans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"groups\": [\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      },\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ],\n    \"unresolved\": [\n      \"<integer>\",\n      \"<integer>\"\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "3e2d7914-b85d-4543-b0f3-d201bed23ef6",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "89dd87d9-6689-47b0-9d42-4195d710d346",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "0a580ae2-fda5-4624-ae4a-2dcd9f3656fa",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f2ad7c8a-1ed3-4cbe-9034-4122ae4c9e43",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "089eb7fe-8344-486c-a84c-7797b65c0dc7",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "hotels",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "9eb555e4-804e-4d52-a518-fac60b109cba",
          "name": "Resolve the timezones of one or more destinations",
          "request": {
            "name": "Resolve the timezones of one or more destinations",
            "description": {
              "content": "One group per distinct zone across the destinations asked about; groups carry no\n`hotelIds`, because a destination names no hotel. Destinations that resolve to nothing\nare listed in `unresolved`.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "timezones",
                "destinations",
                ":ids"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                  "key": "ids",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "92aba600-596e-4817-8f8b-66ea366a6fbf",
              "name": "The timezones the target spans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"groups\": [\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      },\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ],\n    \"unresolved\": [\n      \"<integer>\",\n      \"<integer>\"\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "5b4d71d5-ba2d-457c-b82b-63398ec36e8a",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "10e5d1c6-1c76-472a-8891-99e486cf7015",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "406939e3-13ed-47ac-a8a2-3de5dc6cebad",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "d494df85-4b24-42f2-bf21-3168dc4ff31a",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "be011c1a-8951-430e-9d9f-58c9c0354709",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "destinations",
                    ":ids"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) Comma-separated positive integers. Every operation has an independent configured cap;\nall currently default to 100.\n\nIds are deduplicated and sorted server-side, so `15,12,15` and `12,15` are the same\nrequest and share one `ETag`.\n",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "5,974,2445,32,93947,603102698,098585612,37856897",
                      "key": "ids"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "id": "c7cf7c6b-5a22-40f0-9652-29bb2d7ea247",
          "name": "Resolve the timezone at a point",
          "request": {
            "name": "Resolve the timezone at a point",
            "description": {
              "content": "One group, with no `hotelIds`. Ocean positions resolve to a nautical `Etc/GMT±N` zone,\nso in practice any valid coordinate has an answer; a point the resolver knows nothing\nabout returns an empty `groups` list rather than a default.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "api",
                "static",
                "timezones",
                "geo",
                ":lat",
                ":lon"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "<double>",
                  "key": "lat",
                  "disabled": false,
                  "description": {
                    "content": "(Required) ",
                    "type": "text/plain"
                  }
                },
                {
                  "type": "any",
                  "value": "<double>",
                  "key": "lon",
                  "disabled": false,
                  "description": {
                    "content": "(Required) ",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "AETHER-APPLICATION-KEY",
                "value": "{{apiKey}}"
              },
              {
                "key": "AETHER-ACCESS-TOKEN",
                "value": "{{accessToken}}"
              }
            ],
            "method": "GET",
            "body": {},
            "auth": null
          },
          "response": [
            {
              "id": "9fc3af86-d13b-4924-b6a3-f31c2a14083f",
              "name": "The timezones the target spans.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"done\",\n  \"data\": {\n    \"groups\": [\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      },\n      {\n        \"zone\": \"<string>\",\n        \"hotelIds\": [\n          \"<integer>\",\n          \"<integer>\"\n        ]\n      }\n    ],\n    \"unresolved\": [\n      \"<integer>\",\n      \"<integer>\"\n    ]\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "8b0f7205-6aaf-4f24-9ab7-5b7c058826e7",
              "name": "The payload has not changed since the `ETag` you sent in `If-None-Match`.\n\nThis response carries **no body** — the one place the API does not use the standard\nenvelope, because HTTP forbids a body on a `304`. Reuse your stored copy.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "method": "GET",
                "body": {}
              },
              "status": "Not Modified",
              "code": 304,
              "header": [
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "ETag",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Cache-Control",
                  "value": ""
                }
              ],
              "cookie": [],
              "_postman_previewlanguage": "text"
            },
            {
              "id": "3c41f849-b551-4f38-83cd-ddecfdc10c2a",
              "name": "Invalid request. Validation error codes start with `V`, request parse errors use `H001`.\n\n| Code | Description |\n|------|-------------|\n| `H001` | Request body is malformed or missing required top-level fields |\n| `H008` | Invalid `cursor` path parameter (token cannot be decoded) |\n| `H009` | `cursor` was issued under a different `filters` — restart without a cursor |\n| `V001` | Exactly one of search.destinationId / hotelIds / geo must be provided |\n| `V022` | `filters` is malformed (e.g. a known key has a non-boolean value) |\n| `V002` | stay.rooms must contain 1–4 rooms |\n| `V003` | Each room must have 1–4 adults |\n| `V004` | Each room can have at most 4 children |\n| `V005` | Child age must be 0–17 inclusive |\n| `V006` | stay.checkIn must be RFC 3339 with timezone |\n| `V007` | stay.checkOut must be RFC 3339 with timezone |\n| `V008` | stay.checkOut must be on or after stay.checkIn |\n| `V009` | currency must be 3 characters (ISO 4217) |\n| `V010` | guestCountry must be 2 characters (ISO 3166-1 alpha-2) |\n| `V011` | search.hotelIds must contain 1–250 elements |\n| `V012` | search.geo.lat must be in range [-90, 90] |\n| `V013` | search.geo.lon must be in range [-180, 180] |\n| `V014` | search.geo.radius must be in range [1, 50] km |\n| `V015` | timeout must be in range [5, 300] seconds |\n| `V016` | streaming.pushInterval must be in range [1, 10] seconds |\n| `V017` | streaming.resultsPerPush must be in range [100, 10000] |\n| `V018` | destinationId/hotelIds must contain only positive integers |\n| `V019` | currency is not supported by the account (not one of the currencies the requesting account trades in, or not an ISO 4217 code); `/search` only |\n| `V020` | guestCountry is not supported |\n| `V021` | stay length must not exceed 31 days |\n| `V023` | Each room can have at most 6 guests in total |\n| `V024` | Guest or holder name is invalid |\n| `V025` | Guest title is missing or unsupported |\n| `V026` | Child age is required |\n| `V027` | Holder email is invalid |\n| `V028` | Holder phone is invalid |\n| `V029` | Country code is invalid |\n| `V030` | Card number is invalid |\n| `V031` | Card expiration is invalid |\n| `V032` | Card CVV is invalid |\n| `V033` | reference exceeds 20 characters |\n| `V034` | Guest gender is unsupported |\n| `V035` | specialRequests exceeds 1024 characters |\n| `V036` | Holder email and phone are required with a card |\n| `V037` | An optional adult age must be 18–120 inclusive |\n| `V038` | Holder must match the first adult when the selected provider cannot represent a non-guest holder |\n| `V039` | Guest name must be ASCII for the selected provider |\n| `V040` | Card details are unsupported by the selected provider integration |\n| `V041` | Guest last name must begin with two letters for the selected provider |\n| `V042` | reference is missing |\n| `V043` | reference contains a character a URL path cannot carry — only `A-Z a-z 0-9 - . _ ~` are accepted |\n| `V044` | specialRequests exceeds what the selected provider accepts |\n| `V045` | Card network is unsupported by the selected provider |\n| `V046` | Card is required by the selected provider payment method |\n\n`V033`, `V042` and `V043` are answered by `/book`, which accepts the reference, and by\n`/cancel/{reference}` and `/status/{reference}`, which carry it in the path. One rule, one\nset of codes: a reference a booking could be made under must be one a later operation can\nname.",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f4e5cffe-5526-4397-8905-10b3140286d1",
              "name": "Authorization error. Possible error codes:\n\n| Code | Description |\n|-----|----------|\n| A001 | Missing AETHER-APPLICATION-KEY header |\n| A002 | Missing AETHER-ACCESS-TOKEN header |\n| A003 | API key not found or disabled |\n| A004 | Access token not found or account/agent is disabled |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Unauthorized",
              "code": 401,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "35a1f14c-99e6-46de-83a1-9fd7d9a2b5be",
              "name": "Rate limit exceeded. The API key has exhausted the current request window.\nRetry after the number of seconds stated in `Retry-After`.\n\n| Code | Description |\n|------|-------------|\n| A010 | Rate limit exceeded |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Too Many Requests",
              "code": 429,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Limit",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "X-RateLimit-Remaining",
                  "value": ""
                },
                {
                  "disabled": false,
                  "description": {
                    "content": "",
                    "type": "text/plain"
                  },
                  "key": "Retry-After",
                  "value": ""
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            },
            {
              "id": "f8309612-20cb-46eb-9a2b-709574667da3",
              "name": "Internal service error.\n\n| Code | Description |\n|------|-------------|\n| `H002` | Internal search failure (initialize session or read results) |\n| `H003` | Failed to resolve providers for the requesting account |\n| `H004` | Failed to load plugin properties for the resolved providers |",
              "originalRequest": {
                "url": {
                  "path": [
                    "api",
                    "static",
                    "timezones",
                    "geo",
                    ":lat",
                    ":lon"
                  ],
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "query": [],
                  "variable": [
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lat"
                    },
                    {
                      "disabled": false,
                      "description": {
                        "content": "(Required) ",
                        "type": "text/plain"
                      },
                      "type": "any",
                      "value": "<double>",
                      "key": "lon"
                    }
                  ]
                },
                "header": [
                  {
                    "key": "Accept",
                    "value": "application/json"
                  }
                ],
                "method": "GET",
                "body": {}
              },
              "status": "Internal Server Error",
              "code": 500,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": \"error\",\n  \"error\": {\n    \"code\": \"<string>\",\n    \"message\": \"<string>\",\n    \"details\": \"<string>\"\n  },\n  \"meta\": {\n    \"request_id\": \"<string>\",\n    \"request_time\": \"<long>\",\n    \"processing_time\": \"<long>\",\n    \"handled_by\": \"<string>\"\n  }\n}",
              "cookie": [],
              "_postman_previewlanguage": "json"
            }
          ],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    }
  ],
  "event": [],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://dev.mi6.hubwayz.com"
    },
    {
      "key": "apiKey",
      "value": "",
      "description": "Your application API key (AETHER-APPLICATION-KEY)"
    },
    {
      "key": "accessToken",
      "value": "",
      "description": "Your agent access token (AETHER-ACCESS-TOKEN)"
    }
  ],
  "info": {
    "_postman_id": "e37e6872-a267-4cbe-b12b-56311e603aea",
    "name": "mishor6 API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "Travel product aggregator for hotels, transfers, and other services.\n\nDownloads: this specification as [openapi.yaml](openapi.yaml), and a\n[Postman collection](postman-collection.json) made from it — set its `apiKey` and `accessToken`\nvariables, and every `/api` request carries them.\n",
      "type": "text/plain"
    }
  }
}
