Adrasis™

Getting started

Authenticate with the Distribution Partner API and make your first request.

Use these steps to obtain a credential, request an access token, and call a live endpoint.

Base URL

The Distribution Partner API uses this base URL:

https://ari.console.adrasis.com/api/v1

Use HTTPS and application/json for JSON request bodies. Field names use snake_case, dates use ISO 8601, and currencies use ISO 4217 codes. Resources use opaque identifiers except hotels, places and countries. The Adrasis hotel id is a decimal string such as "72259", including in a hotel's public_id or property_public_id field. Store it as a string; see Hotel id. A place is addressed by its Adrasis place id, a decimal string such as "87066", and a country by its ISO code such as "TR"; see Place id. The access token identifies the partner account, so requests do not need a tenant path segment or header.

Send Accept-Encoding: gzip (or br) with every request. Answers are then compressed, and a large search answer travels at about a tenth of its size. Without the header the answer is plain JSON.

Examples use illustrative IDs, tokens and dates. Use IDs from your own catalogue, a fresh token and future travel dates when making a real request. Response timestamps illustrate the example; let the server choose request_time unless you need to preserve one evaluation instant.

Building and certifying

You build and certify in the certification environment. Its base URL and your certification credential come with your onboarding pack. It runs the same API version as live. Its catalogue holds the hotels named in your onboarding pack, with the same hotel ids as live and test rates and availability. Bookings there reach no property, hold no real allotment and generate no charges.

When running tests:

  • Cancel every booking. A booking holds test allotment until it is cancelled. Repeated tests that do not cancel can return SOLD_OUT.
  • Use dates several months ahead to reduce collisions between test runs.

When certification passes, you receive a live credential for https://ari.console.adrasis.com/api/v1. The integration flow stays the same; the base URL, the credential and the catalogue change.

Partner certification lists the test cases to run, the information to show the traveller, and the evidence to send before going live.

Step 1: Obtain a credential

The seller you connect to issues your credentials from Connectivity > Sales channels > API partners in its Console and sends them to you. One account can own multiple independently named credentials; a credential never selects a profile. Each credential can have either or both scopes:

  • distribution:read: content, availability, and search endpoints.
  • distribution:booking: prebook, book, and cancel endpoints.

Three authentication mechanisms are available:

Mechanism Use case
OAuth 2.0 client credentials (recommended) Default for new integrations. Provides a client_id and client_secret.
HTTP Basic For partners that cannot exchange credentials for a token.
API key For simple machine-to-machine clients.

The plaintext secret (client_secret, Basic password, or API key) is displayed only once when the credential is created. Store it securely. If it is lost, rotate the credential.

The examples below use OAuth 2.0. See Authentication for the Basic and API key options.

Step 2: Request an access token

Exchange the OAuth credential for an access token with the client_credentials grant:

curl -s -X POST \
  https://ari.console.adrasis.com/api/v1/oauth/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=client_credentials' \
  -d 'client_id=YOUR_CLIENT_ID' \
  -d 'client_secret=YOUR_CLIENT_SECRET'

The response is a short-lived bearer token:

{
  "access_token": "<ACCESS_TOKEN>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "distribution:read distribution:booking",
  "issued_at": 1748851200
}

The token is valid for expires_in seconds, which is 3600 in this example. This grant does not issue a refresh token. Request a new access token after it expires.

Step 3: Make an authenticated request

Send the token in the Authorization header.

List your properties

curl -s \
  https://ari.console.adrasis.com/api/v1/properties?limit=2 \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'
{
  "properties": [
    {
      "public_id": "72259",
      "name": "Grand Bosphorus Hotel",
      "slug": "grand-bosphorus-hotel",
      "star_rating": 5,
      "property_type": {
        "public_id": "propertyTypePublicId",
        "code": "property_type.hotel",
        "name": "Hotel"
      },
      "location": {
        "country_code": "TR",
        "latitude": "40.9906",
        "longitude": "29.0274",
        "address": "Caferağa, Kadıköy, İstanbul",
        "administrative_areas": [
          {
            "place_id": "32937",
            "place_type": "province_state",
            "name": "Istanbul"
          },
          {
            "place_id": "33481",
            "place_type": "district",
            "name": "Kadıköy"
          },
          {
            "place_id": "33484",
            "place_type": "neighborhood",
            "name": "Caferağa"
          }
        ],
        "destinations": [
          {
            "place_id": "33481",
            "place_type": "district",
            "name": "Kadıköy"
          },
          {
            "place_id": "87093",
            "place_type": "city",
            "name": "Istanbul"
          },
          {
            "place_id": "32937",
            "place_type": "province_state",
            "name": "Istanbul"
          }
        ]
      },
      "currency_code": "TRY",
      "timezone_iana": "Europe/Istanbul",
      "content_updated_at": "2026-06-01T08:30:00Z"
    }
  ],
  "pagination": {
    "limit": 2,
    "has_more": true,
    "next_cursor": "<OPAQUE_CURSOR>"
  }
}

When has_more is true, send the returned next_cursor unchanged as cursor and repeat the first request's filters. Continue until has_more is false; never parse or construct a cursor:

curl -s \
  'https://ari.console.adrasis.com/api/v1/properties?limit=2&cursor=<OPAQUE_CURSOR>' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'
curl -s -X POST \
  https://ari.console.adrasis.com/api/v1/properties/availability \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
    "property_ids": ["72259"],
    "checkin": "2026-06-10",
    "checkout": "2026-06-13",
    "occupancy": [{ "adults": 2 }],
    "allocation_strategy": "flexible",
    "currency_code": "TRY",
    "country_code": "TR"
  }'
{
  "currency_code": "TRY",
  "request_time": "2026-06-02T12:00:00Z",
  "selection_token_expires_at": "2026-06-02T12:15:00Z",
  "results": [
    {
      "property_id": "72259",
      "allocations": [
        {
          "allocation_id": "alc_5f3a9c1d8e7b4a2f6c0d9e8b7a6f5c4d",
          "selection_token": "sel1.active.<opaque>",
          "rooms": 1,
          "strategy": "single-room",
          "grand_total": "9000.00",
          "grand_total_before_promotion": "9000.00",
          "currency_code": "TRY",
          "slots": [
            {
              "room_public_id": "r3Tz9Lm0",
              "rate_plan_public_id": "rp_bar",
              "currency_code": "TRY",
              "stay_total": "9000.00",
              "status": "AVAILABLE"
            }
          ]
        }
      ]
    }
  ]
}

Bulk search accepts 1..200 unique property_ids and returns exactly the best zero-or-one allocation per property. Add max_offers_per_property to also get each property's cheapest offers, one room type and one rate plan each: 1 for the cheapest, 10 for the ten cheapest, or "all" for every offer. Add include: ["cancellation_quote", "selectable_quantity"] to get each slot's cancellation terms and each allocation's rooms left; without them the answer is exactly the one described here. It never accepts max_offers, limit, or alternative breadth fields. allocations[0] has the lowest exact accommodation amount. Its grand_total includes exclusive tax collected with the booking; tax is added after ranking, so this is not a guarantee of the lowest total after tax. To inspect choices for one property, use POST /properties/{property_public_id}/offers/search, which returns best_allocation and complete room_offers. Each room product carries a selection_token and selectable_quantity. Prebook accepts either the whole-party token or one to nine room tokens in selection_tokens.

In each slot, room_public_id and rate_plan_public_id together identify what is offered. rate_plan_public_id is a sale condition (board, cancellation terms, restrictions) shared by the rooms it is sold in, so it repeats across the rooms that sell it; see Currencies, occupancy & allocations.

Pass the chosen selection_token, not allocation_id or reconstructed search fields, to accommodation prebook. Then pass the returned prebook_token to book. See The booking flow for the complete request.

Next steps