인증
두 가지 인증 방식이 있으며 둘 다 키 ID에 연결됩니다: 서명된 요청(권장) 또는 OAuth 2 client-credentials Bearer 토큰.
서명된 요청(HMAC-SHA256)
모든 호출에 X-API-Key, X-Timestamp, X-Nonce, X-Signature를 보내세요. 서명은 메서드, 정확한 요청 대상(경로와 쿼리), 타임스탬프, nonce, 본문 해시를 포함하므로 재전송되거나 변조된 요청은 검증에 실패합니다. 최대 5분의 시각 차이는 허용되며, 10분 이내에 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 클라이언트 자격 증명
모든 요청에 서명하는 방식이 사용 중인 스택에 맞지 않는다면, POST /v1/oauth/token(grant_type=client_credentials, 폼 인코딩)에서 키 ID와 시크릿을 수명이 짧은 Bearer 토큰으로 교환하세요. 토큰은 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=$SECRET키 ID, 시크릿, 교체
샌드박스 키는 dt_sbx_로, 프로덕션 키는 dt_live_로 시작합니다. 키는 하나의 환경과 하나의 파트너에 속합니다. 시크릿은 생성 시, 교체 시, 확인 링크를 통해 한 번만 표시되며 당사에는 해시 형태로 저장됩니다.
개발자 포털에서 교체하세요. 새 키 ID와 시크릿이 발급되고, 기존 키는 선택한 유예 기간(최대 7일) 동안 계속 작동하므로 서비스 중단 없이 전환할 수 있습니다. 폐기는 즉시 적용됩니다.
IP 허용 목록
개발자 포털에서 각 환경을 특정 IPv4/IPv6 주소 또는 CIDR 범위로 제한할 수 있습니다(선택). 그 밖의 주소에서 온 요청은 올바르게 서명되었더라도 403 api_ip_not_allowed로 거부됩니다. 모든 출처를 허용하려면 목록을 비워 두세요.