Аутентификация
Два способа аутентификации, оба привязаны к ID вашего ключа: подписанные запросы (рекомендуется) или bearer-токены OAuth 2 client credentials.
- Подписанные запросы (HMAC-SHA256)
- OAuth 2 client credentials
- ID ключей, секреты и ротация
- Список разрешённых IP
Подписанные запросы (HMAC-SHA256)
Передавайте X-API-Key, X-Timestamp, X-Nonce и X-Signature в каждом вызове. Подпись охватывает метод, точную цель запроса (путь и строку запроса), метку времени, nonce и хеш тела, поэтому повторённый или изменённый запрос не проходит проверку. Допускается расхождение часов до пяти минут; повторное использование nonce в течение десяти минут отклоняется с 401 api_nonce_reused.
Вычисляйте подпись по тем же сырым байтам, которые отправляете. Сериализуйте JSON один раз, хешируйте именно эти байты и отправляйте их же в качестве тела — повторная сериализация после подписи — самая частая причина api_signature_invalid.
const payload = JSON.stringify(body);
const ts = Math.floor(Date.now() / 1000);
const nonce = randomBytes(16).toString("hex");
const bodyHash = createHash("sha256").update(payload).digest("hex");
const canonical = ["POST", "/v1/flights/search", ts, nonce, bodyHash].join("\n");
const signature = createHmac("sha256", SECRET).update(canonical).digest("hex");OAuth 2 client credentials
Если подписывать каждый запрос в вашем стеке неудобно, обменяйте ID ключа и секрет на короткоживущий bearer-токен через POST /v1/oauth/token (grant_type=client_credentials, form-encoded). Токены живут 30 минут и содержат выданные вам скоупы; параметром scope можно запросить их подмножество.
Передавайте токен как Authorization: Bearer вместе с X-API-Key в каждом вызове. ID ключа проверяется при каждом запросе, поэтому отзыв ключа сразу делает недействительными его токены.
curl -X POST "https://api.dubaitrip.com/v1/oauth/token" \
-d grant_type=client_credentials -d client_id=$KEY_ID -d client_secret=$SECRETID ключей, секреты и ротация
Ключи sandbox начинаются с dt_sbx_, ключи продакшена — с dt_live_. Ключ относится к одному окружению и одному партнёру. Секреты показываются один раз — при создании, при ротации и по ссылке раскрытия — и хранятся у нас только в виде хеша.
Ротация выполняется в портале разработчика: выдаются новый ID ключа и секрет, а старый ключ продолжает работать в течение выбранного вами льготного периода (до семи дней), так что переключиться можно без простоя. Отзыв действует немедленно.
Список разрешённых IP
При желании в портале разработчика можно привязать каждое окружение к набору адресов IPv4/IPv6 или диапазонов CIDR. Запросы с любых других адресов отклоняются с 403 api_ip_not_allowed, даже если они правильно подписаны. Оставьте список пустым, чтобы принимать запросы откуда угодно.