مستندات
مستندات
راهنمای اتصال به API نوبتدهی و افزودن ویجت رزرو به سایت شما.
نمونه (ماک): آدرسها، کلیدها و پاسخها واقعی نیستند و فقط ساختار مستندات را نشان میدهند.
- آدرس پایه
- https://api.example.com/v1
- نسخه
- v1
شروع
معرفی
API نوبتدهی به شما اجازه میدهد نمایهی ارائهدهنده، سرویسها، بازههای خالی و رزروها را در برنامهی خودتان بخوانید و بسازید. اگر فقط یک دکمهی رزرو میخواهید، بهجای API از ویجت استفاده کنید.
https://api.example.com/v1همهی پاسخها JSON هستند و زمانها بهصورت ISO 8601 با منطقهی زمانی ارائهدهنده برمیگردند.
شروع
شروع سریع
در سه قدم اولین رزرو را بسازید: سرویسها را بگیرید، بازهی خالی را پیدا کنید، رزرو را ثبت کنید.
# 1) list services
curl https://api.example.com/v1/providers/ilia-salon/services \
-H "Authorization: Bearer hg_test_xxxxxxxx"
# 2) find free slots
curl "https://api.example.com/v1/providers/ilia-salon/availability?service=svc_color&date=2026-10-10" \
-H "Authorization: Bearer hg_test_xxxxxxxx"
# 3) book one
curl -X POST https://api.example.com/v1/bookings \
-H "Authorization: Bearer hg_test_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"service":"svc_color","start":"2026-10-10T10:30:00+03:30"}'شروع
احراز هویت
هر درخواست باید کلید API را در هدر Authorization بفرستد. کلیدهای hg_test فقط روی دادهی آزمایشی کار میکنند و کلیدهای hg_live روی دادهی واقعی.
Authorization: Bearer hg_test_xxxxxxxxکلید را هرگز در کد سمت مرورگر نگذارید. برای رزرو از سمت مشتری از ویجت یا سرور خودتان استفاده کنید.
API نوبتدهی
ارائهدهندهها
GET/providers/{slug}
نمایهی عمومی یک ارائهدهنده یا کسبوکار را برمیگرداند.
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| slug | string | بله | شناسهی اختصاصی در لینک نمایه. |
{
"slug": "ilia-salon",
"name": "Ilia Salon",
"kind": "business",
"timezone": "Asia/Tehran",
"services": 3
}API نوبتدهی
سرویسها
GET/providers/{slug}/services
فهرست سرویسهای قابلرزرو را میدهد؛ مدت هر سرویس ثابت یا متغیر است.
{
"data": [
{ "id": "svc_cut", "name": "Haircut", "duration": 45, "fixed": true },
{ "id": "svc_color", "name": "Colour & highlights", "duration": 90, "fixed": true },
{ "id": "svc_skin", "name": "Skin cleansing", "duration": null, "fixed": false }
]
}API نوبتدهی
بازههای خالی
GET/providers/{slug}/availability
بازههای خالیِ یک روز را لحظهای از تقویم ارائهدهنده محاسبه میکند.
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| service | string | بله | شناسهی سرویس. |
| date | YYYY-MM-DD | بله | روز مورد نظر. |
| context | "independent" | "business" | خیر | زمینهی رزرو؛ پیشفرض همان زمینهی نمایه است. |
/providers/ilia-salon/availability?service=svc_color&date=2026-10-10API نوبتدهی
رزروها
POST/bookings
یک نوبت میسازد. اگر بازه پر شده باشد، خطای 409 برمیگردد.
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| service | string | بله | شناسهی سرویس. |
| start | ISO 8601 | بله | شروع نوبت؛ باید یکی از بازههای خالی باشد. |
| customer | object | خیر | نام و شمارهی تماس؛ اگر نیامد، از مشتری واردشده خوانده میشود. |
| note | string | خیر | یادداشت برای ارائهدهنده. |
{
"id": "bk_8f2a",
"status": "confirmed",
"service": "svc_color",
"start": "2026-10-10T10:30:00+03:30",
"end": "2026-10-10T12:00:00+03:30"
}DELETE/bookings/{id}
نوبت را لغو میکند و بازه را دوباره آزاد میکند.
API نوبتدهی
مشتریها
GET/customers/{id}
پروفایل مشتری و تاریخچهی نوبتها را برای ارائهدهنده برمیگرداند.
{
"id": "cus_31c9",
"bookings": 6,
"last_visit": "2026-09-21",
"notes": ["prefers mornings"]
}API نوبتدهی
وبهوکها
برای اطلاع از تغییر نوبتها یک آدرس ثبت کنید تا رویدادهایی مثل booking.created و booking.cancelled به آن ارسال شود. هر درخواست با هدر X-Signature امضا میشود.
{
"event": "booking.created",
"data": { "id": "bk_8f2a", "service": "svc_color", "start": "2026-10-10T10:30:00+03:30" }
}ویجت رزرو
افزودن ویجت
ویجت رزرو با دو خط به سایت شما اضافه میشود؛ بدون سرور و بدون کلید API.
<script src="https://cdn.example.com/booking-widget.js" defer></script>
<div data-booking-widget="ilia-salon"></div>ویجت رزرو
گزینههای ویجت
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| data-booking-widget | string | بله | شناسهی ارائهدهنده. |
| data-theme | "dark" | "light" | خیر | پوستهی نمایش. |
| data-lang | "fa" | "en" | خیر | زبان و جهت ویجت. |
| data-service | string | خیر | انتخاب ازپیش سرویس. |
ویجت رزرو
رویدادهای ویجت
ویجت رویدادهای مرورگر را روی همان عنصر منتشر میکند تا بتوانید مثلاً یک پیام تشکر نشان دهید.
document
.querySelector("[data-booking-widget]")
.addEventListener("booking:confirmed", (e) => {
console.log("confirmed", e.detail.id);
});مرجع
خطاها
خطاها با کد وضعیت HTTP و یک بدنهی JSON شامل code و message برمیگردند.
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| 400 | invalid_request | خیر | پارامتر نامعتبر یا ناقص. |
| 401 | unauthorized | خیر | کلید موجود نیست یا نامعتبر است. |
| 404 | not_found | خیر | ارائهدهنده، سرویس یا نوبت پیدا نشد. |
| 409 | slot_taken | خیر | بازه هماکنون رزرو شده است. |
| 429 | rate_limited | خیر | تعداد درخواست بیش از حد. |
{
"error": { "code": "slot_taken", "message": "This slot is no longer free." }
}مرجع
محدودیت نرخ
هر کلید در هر دقیقه تا ۶۰ درخواست مجاز است. هدرهای X-RateLimit-Remaining و Retry-After وضعیت را نشان میدهند.
مرجع
تغییرات
| نام | نوع | الزامی | توضیح |
|---|---|---|---|
| v1.2 | 2026-10 | خیر | ویجت: رویداد booking:confirmed و گزینهی data-service. |
| v1.1 | 2026-09 | خیر | وبهوکها و امضای X-Signature. |
| v1.0 | 2026-08 | خیر | نخستین نسخه: ارائهدهندهها، سرویسها، بازهها و رزروها. |
سؤالی ماند؟
با ما حرف بزن