ضيوف
ضيوفDheuof
v1.0 ← العودة
REST API · DEVELOPER DOCUMENTATION

توثيق الـ API

واجهات برمجية RESTful لتكاملات الطرف الثالث · تعتمد JSON وتستخدم JWT للمصادقة

Base URL
https://api.dheuof.com/v1
نسخة
v1.0
Format
JSON · REST
Auth
Bearer JWT

المصادقة · Authentication

نوع المصادقة: Bearer Token (JWT)
الـ Header: Authorization: Bearer <token>
Content-Type: application/json
الرمز (token) يُستلم عند تسجيل الدخول عبر POST /api/login · صالح لمدة 24 ساعة.
حدود الطلبات (Rate Limits): 1000 طلب / ساعة لكل مفتاح API. عند تجاوز الحد ترجع الاستجابة 429 Too Many Requests
🔑
المصادقة
POST /api/login تسجيل دخول المشترك والحصول على JWT
Request
Response
{
  "username": "manager@hotel.sa",
  "password": "••••••••",
  "client_id": "00001"  // رقم المنشأة
}
POST /api/logout إنهاء الجلسة وإبطال الرمز
Request
Response
// لا يحتاج body — يستخدم Bearer token في الـ header
Authorization: Bearer <token>
GET /api/status حالة الجلسة الحالية والمستخدم
Request
Response
GET https://api.dheuof.com/v1/api/status
Authorization: Bearer <token>
🛎
الضيوف والحجوزات
GET /api/guests قائمة الضيوف مع بحث وتصفية
Parameterالنوعإلزاميالوصف
limitintegerاختياريعدد النتائج (افتراضي: 20، حد أقصى: 100)
offsetintegerاختيارينقطة البداية للصفحة (default: 0)
searchstringاختياريبحث بالاسم أو البريد أو رقم الجواز
Request
Response
GET https://api.dheuof.com/v1/api/guests?limit=20&offset=0&search=أحمد
POST /api/guests إضافة ضيف جديد إلى قاعدة البيانات
Request Body
Response
{
  "name": "فاطمة العتيبي",              // مطلوب
  "email": "fatima@example.com",
  "phone": "+966509876543",             // مطلوب
  "nationality": "SA",
  "id_number": "1xxxxxxxxx",
  "id_type": "national_id",             // national_id | passport | iqama
  "notes": "ضيف VIP"
}
GET /api/bookings قائمة الحجوزات مع فلاتر الحالة والتاريخ والقناة
Parameterالنوعإلزاميالوصف
statusstringاختياريconfirmed | pending | cancelled | checked_in | checked_out
fromdateاختياريتاريخ البداية (YYYY-MM-DD)
todateاختياريتاريخ النهاية (YYYY-MM-DD)
channelstringاختياريdirect | booking_com | airbnb | expedia
limitintegerاختياريعدد النتائج (default: 20)
Request
Response
GET https://api.dheuof.com/v1/api/bookings?status=confirmed&from=2026-06-01&to=2026-06-30
POST /api/bookings إنشاء حجز جديد
Request Body
Response
{
  "guest_id": 1,
  "room_id": 105,
  "check_in": "2026-06-10",
  "check_out": "2026-06-14",
  "adults": 2,
  "children": 0,
  "channel": "direct",
  "notes": "طلب غرفة هادئة"
}
PUT /api/bookings/{id} تعديل حجز قائم (التواريخ، الغرفة، الحالة)
Request Body
Response
// PUT /api/bookings/BK-20260601-001
{
  "check_out": "2026-06-16",      // تمديد الإقامة
  "status": "confirmed",
  "notes": "تم التمديد بطلب الضيف"
}
🏨
الغرف والأسعار
GET /api/rooms قائمة الغرف وأنواعها والأسعار الأساسية
Request
Response
GET https://api.dheuof.com/v1/api/rooms
GET /api/rooms/availability إتاحة الغرف لفترة زمنية محددة
Parameterالنوعإلزاميالوصف
check_indateمطلوبتاريخ الوصول (YYYY-MM-DD)
check_outdateمطلوبتاريخ المغادرة (YYYY-MM-DD)
typestringاختياريstandard | deluxe | suite | family
Request
Response
GET https://api.dheuof.com/v1/api/rooms/availability?check_in=2026-06-10&check_out=2026-06-14
📡
القنوات
POST /api/channels/booking-com/webhook استقبال حجوزات Booking.com عبر Webhook
Payload (من Booking.com)
Response
{
  "event": "booking.new",
  "booking_id": "BCOM-9876543",
  "property_id": "00001",
  "check_in": "2026-06-15",
  "check_out": "2026-06-18",
  "guest_name": "John Smith",
  "room_type": "standard",
  "total_amount": 1050.00,
  "currency": "SAR"
}
GET /api/channels/status/{client_id} حالة اتصال قنوات التوزيع للمنشأة
Request
Response
GET https://api.dheuof.com/v1/api/channels/status/00001
🧾
الفواتير
GET /api/invoices قائمة الفواتير الإلكترونية
Request
Response
GET https://api.dheuof.com/v1/api/invoices?limit=10&status=paid
POST /api/invoices إنشاء فاتورة إلكترونية جديدة
Request Body
Response
{
  "booking_id": "BK-20260601-001",
  "amount": 1400.00,
  "currency": "SAR",
  "include_vat": true,
  "send_email": true,
  "send_whatsapp": false
}
🔔
Webhook Events

أضف عنوان URL لاستقبال الأحداث تلقائياً. يتم إرسال طلب POST بمحتوى JSON لكل حدث.

booking.created
حجز جديد تم إنشاؤه
booking.cancelled
تم إلغاء حجز
booking.modified
تعديل على حجز قائم
checkin.completed
تمّ تسجيل وصول الضيف
checkout.completed
تمّ تسجيل مغادرة الضيف
payment.succeeded
دفعة ناجحة
payment.failed
فشلت عملية الدفع
مثال على حمولة Webhook:
{
  "event": "booking.created",
  "timestamp": "2026-06-02T12:00:00Z",
  "client_id": "00001",
  "data": {
    "booking_id": "BK-20260602-004",
    "guest_name": "أحمد الغامدي",
    "check_in": "2026-06-15",
    "check_out": "2026-06-18",
    "room_id": 202,
    "total_amount": 1050.00
  },
  "signature": "sha256=abc123..."  // للتحقق من صحة المصدر
}
رموز الأخطاء
HTTP Codeالرمزالوصف
200okتمّت العملية بنجاح
400bad_requestبيانات الطلب غير صحيحة أو ناقصة
401unauthorizedرمز المصادقة غير صالح أو منتهي
403forbiddenلا تملك صلاحية هذه العملية
404not_foundالعنصر المطلوب غير موجود
422validation_errorخطأ في التحقق من صحة البيانات
429rate_limitedتجاوزت حد الطلبات (1000/ساعة)
500server_errorخطأ داخلي في الخادم