الأخطاء
كل إخفاق هو مستند مشكلة وفق RFC 7807 مع رمز ثابت قابل للقراءة آليًا.
تفاصيل المشكلة
الاستجابات التي ليست 2xx تحمل application/problem+json مع status و title و detail، ورمز code ثابت (snake_case)، وحقل field اختياري يسمّي خاصية الطلب المسببة للخطأ، و traceId لتذكره عند التواصل مع الدعم.
{
"type": "https://dubaitrip.com/docs/api/errors#price_changed",
"title": "Price changed",
"status": 409,
"detail": "The fare is now 412.50 USD (was 398.00 USD). Re-price and confirm.",
"code": "price_changed",
"traceId": "00-3f2a…"
}الرموز التي ستصادفها
401 api_key_invalid، api_signature_invalid، api_timestamp_skew، api_nonce_reused، api_token_invalid — مشكلات في المصادقة. 403 api_scope_missing (مفتاحك يفتقر إلى الصلاحية)، api_ip_not_allowed، api_partner_suspended. 429 api_rate_limited، api_quota_exceeded. 400 validation_failed (مع field). 404 search_session_not_found، order_not_found، booking_not_found. 409 offer_expired، rate_expired، price_changed. 402 insufficient_credit (في الإنتاج فقط — اشحن وديعتك). 502 supplier_error — فشل مورّد الطيران أو الفندق؛ أعد البحث.
إعادة المحاولة بأمان
أعد محاولة 429 بعد انقضاء Retry-After، و 502/503/504 مع تراجع أُسّي. لا تُعِد أبدًا محاولة أي خطأ 4xx غير 429. لا تُعِد محاولة العمليات الملزِمة (الطلبات، والحجوزات، والإصدار، والإلغاء) إلا باستخدام Idempotency-Key نفسه. إذا انتهت صلاحية جلسة البحث (404)، فابدأ بحثًا جديدًا — معرّفات العروض ومفاتيح الأسعار غير صالحة عبر الجلسات.