REST API · DEVELOPER DOCUMENTATION
توثيق الـ API
واجهات برمجية RESTful لتكاملات الطرف الثالث · تعتمد JSON وتستخدم 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 | النوع | إلزامي | الوصف |
|---|---|---|---|
| limit | integer | اختياري | عدد النتائج (افتراضي: 20، حد أقصى: 100) |
| offset | integer | اختياري | نقطة البداية للصفحة (default: 0) |
| search | string | اختياري | بحث بالاسم أو البريد أو رقم الجواز |
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 | النوع | إلزامي | الوصف |
|---|---|---|---|
| status | string | اختياري | confirmed | pending | cancelled | checked_in | checked_out |
| from | date | اختياري | تاريخ البداية (YYYY-MM-DD) |
| to | date | اختياري | تاريخ النهاية (YYYY-MM-DD) |
| channel | string | اختياري | direct | booking_com | airbnb | expedia |
| limit | integer | اختياري | عدد النتائج (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_in | date | مطلوب | تاريخ الوصول (YYYY-MM-DD) |
| check_out | date | مطلوب | تاريخ المغادرة (YYYY-MM-DD) |
| type | string | اختياري | 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..." // للتحقق من صحة المصدر
}
رموز الأخطاء