Authentification
Deux méthodes d’authentification, toutes deux liées à votre identifiant de clé : les requêtes signées (recommandé) ou les jetons Bearer OAuth 2 de type client credentials.
- Requêtes signées (HMAC-SHA256)
- OAuth 2 : identifiants client (client credentials)
- Identifiants de clé, secrets et renouvellement
- Liste d’autorisation IP
Requêtes signées (HMAC-SHA256)
Envoyez X-API-Key, X-Timestamp, X-Nonce et X-Signature à chaque appel. La signature couvre la méthode, la cible exacte de la requête (chemin et chaîne de requête), l’horodatage, le nonce et le hachage du corps, de sorte qu’une requête rejouée ou modifiée échoue à la vérification. Un décalage d’horloge de cinq minutes au plus est toléré ; la réutilisation d’un nonce dans les dix minutes est rejetée avec 401 api_nonce_reused.
Calculez la signature sur les octets bruts que vous envoyez réellement. Sérialisez votre JSON une seule fois, hachez exactement ces octets et envoyez ces mêmes octets comme corps — resérialiser après la signature est la cause la plus fréquente de 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 : identifiants client (client credentials)
Si signer chaque requête ne convient pas à votre stack, échangez votre identifiant de clé et votre secret contre un jeton Bearer de courte durée via POST /v1/oauth/token (grant_type=client_credentials, encodé en formulaire). Les jetons sont valables 30 minutes et portent les portées qui vous sont accordées ; vous pouvez en demander un sous-ensemble avec le paramètre scope.
Envoyez le jeton sous la forme Authorization: Bearer, accompagné de X-API-Key, à chaque appel. L’identifiant de clé est revérifié à chaque requête : révoquer une clé invalide donc immédiatement ses jetons.
curl -X POST "https://api.dubaitrip.com/v1/oauth/token" \
-d grant_type=client_credentials -d client_id=$KEY_ID -d client_secret=$SECRETIdentifiants de clé, secrets et renouvellement
Les clés de bac à sable commencent par dt_sbx_, les clés de production par dt_live_. Une clé appartient à un seul environnement et à un seul partenaire. Les secrets ne s’affichent qu’une fois — à la création, au renouvellement et via le lien de révélation — et sont stockés sous forme hachée de notre côté.
Renouvelez depuis le portail développeur : un nouvel identifiant de clé et un nouveau secret sont émis tandis que l’ancienne clé continue de fonctionner pendant la période de grâce que vous choisissez (jusqu’à sept jours), pour basculer sans interruption. La révocation est immédiate.
Liste d’autorisation IP
Vous pouvez restreindre chaque environnement à un ensemble d’adresses IPv4/IPv6 ou de plages CIDR dans le portail développeur. Les requêtes provenant de toute autre adresse sont refusées avec 403 api_ip_not_allowed, même correctement signées. Laissez la liste vide pour accepter toute origine.