https://vzl.one/api/v1/booking
Інтеграції для Beauty Studio
Додайте онлайн-запис віджетом або підключіть власну серверну інтеграцію через API.API-токени
Створюйте окремий токен для кожного сайту або серверної інтеграції.Безпечна інтеграція запису
API навмисно має вузький доступ і прив'язане до вибраного бізнесу.
- Можна отримати послуги, команду й вільний час та створити запис.
- Немає доступу до списку клієнтів, CRM або історії записів.
- Викликайте API лише зі свого сервера — не вставляйте токен у JavaScript сайту.
Документація Booking API
Повний довідник для серверної інтеграції онлайн-запису: від отримання послуг і вільного часу до безпечного створення запису та обробки помилок.
Рекомендований порядок інтеграції
Перед створенням запису завжди отримуйте актуальні ідентифікатори та доступний час із API.
- 1Отримайте послугиПокажіть клієнту активні послуги та збережіть service_id.
- 2Оберіть спеціалістаВідфільтруйте команду за service_id та збережіть employee_id.
- 3Перевірте часОтримайте свіжий список слотів безпосередньо перед підтвердженням.
- 4Створіть записПередайте точне значення starts_at із відповіді availability.
Авторизація для кожного запиту
Додайте Bearer-токен до заголовка Authorization. Кожен токен прив’язаний до одного бізнесу.
Authorization: Bearer $VUZOL_API_TOKEN
Accept: application/json
Для кожного токена діє ліміт: до 120 запитів читання та до 30 запитів запису за 60 секунд. Відповідь 429 містить заголовок Retry-After з кількістю секунд до повторної спроби.
Помилки та безпечне відновлення
API повертає стандартний HTTP-статус і поле detail з поясненням. Не створюйте запис повторно без перевірки причини помилки.
Немає Bearer-токена, токен відкликано або передано з помилкою. Створіть новий токен чи перевірте заголовок Authorization.
Бізнес видалено, вимкнено або він більше не належить власнику токена.
Послуга, співробітник або бізнес із переданим ідентифікатором не існує чи недоступний для онлайн-запису.
Слот уже зайнятий, закритий, минув або став недоступним через зміну графіка, перерву, вихідний, закриту дату чи тимчасове закриття бізнесу.
Відсутнє обов’язкове поле, значення порожнє, телефон некоректний або query-параметр не відповідає формату чи дозволеному діапазону.
Ліміт для токена вичерпано. Зачекайте час із заголовка Retry-After, а потім повторіть запит.
Availability показує стан на момент перевірки. Інший клієнт або адміністратор може зайняти чи закрити цей час до POST-запиту, тому фінальним підтвердженням завжди є відповідь 201 від appointments.
- Повторно викличте availability з тим самим service_id та employee_id.
- Покажіть клієнту оновлений список і попросіть обрати інший starts_at.
- Повторіть POST лише з новим значенням starts_at; не надсилайте старий слот у циклі.
HTTP/1.1 409 Conflict
Content-Type: application/json
{"detail":"Цей слот вже недоступний. Оберіть інший час."}
Endpoints і приклади
Усі секції відкриті: параметри, готові curl-запити, приклади відповідей і помилки можна переглянути без додаткових кліків.
GET/api/v1/booking/businessПублічні дані цього бізнесу
Повертає дані бізнесу, до якого прив’язаний токен, включно з публічною адресою сторінки запису.
curl -H "Authorization: Bearer $VUZOL_API_TOKEN" \
https://vzl.one/api/v1/booking/business
{
"data": {
"id": "business_01",
"name": "Vuzol Studio",
"slug": "vuzol-studio",
"phone": "+380501112233",
"address": "Kyiv",
"logo_url": "https://cdn.example.com/logo.png",
"booking_url": "https://vzl.one/book/vuzol-studio"
}
}
GET/api/v1/booking/servicesПослуги, доступні для онлайн-запису
Повертає лише активні послуги, які можна записати онлайн. Використовуйте id послуги в наступних запитах.
curl -H "Authorization: Bearer $VUZOL_API_TOKEN" \
https://vzl.one/api/v1/booking/services
{
"data": [
{
"id": "service_01",
"name": "Consultation",
"category": "Services",
"description": "60-minute consultation",
"duration_minutes": 60,
"price": 900.0
}
]
}
GET/api/v1/booking/teamСпівробітники для вибраної послуги
Повертає активних співробітників бізнесу. Якщо передати service_id, список буде обмежений спеціалістами, призначеними на цю послугу.
| Поле | Обов’язковість | Опис |
|---|---|---|
service_idstring · query | Необов’язково | ID послуги з /services. Якщо не передавати, API поверне всю доступну команду. |
curl -H "Authorization: Bearer $VUZOL_API_TOKEN" \
"https://vzl.one/api/v1/booking/team?service_id=SERVICE_ID"
{
"data": [
{
"id": "employee_01",
"full_name": "Iryna Kovalenko",
"role": "Specialist",
"photo_url": "https://cdn.example.com/iryna.jpg"
}
]
}
GET/api/v1/booking/availabilityДоступні дати й часові слоти
Розраховує доступний час з урахуванням тривалості послуги, графіка, перерв, відпусток, закритих дат, уже створених записів і статусу бізнесу.
| Поле | Обов’язковість | Опис |
|---|---|---|
service_idstring · query | Обов’язково | ID активної онлайн-послуги з /services. |
employee_idstring · query | Необов’язково | ID конкретного спеціаліста з /team. Без нього повертаються слоти всіх доступних співробітників. |
start_datedate · YYYY-MM-DD | Необов’язково | Перший день пошуку. За замовчуванням — поточна дата сервера. |
daysinteger · 1–31 | Необов’язково | Кількість календарних днів для пошуку. За замовчуванням 7, дозволено від 1 до 31. |
Для POST /appointments передавайте starts_at без змін саме з цього списку. Самостійно сформований час може не збігатися з кроком календаря або графіком.
curl -H "Authorization: Bearer $VUZOL_API_TOKEN" \
"https://vzl.one/api/v1/booking/availability?service_id=SERVICE_ID&employee_id=EMPLOYEE_ID&start_date=2026-09-10&days=7"
{
"data": [
{
"employee_id": "employee_01",
"employee_name": "Iryna Kovalenko",
"starts_at": "2026-09-10T14:00",
"date": "2026-09-10",
"time": "14:00"
}
],
"meta": {
"service_id": "service_01",
"employee_id": "employee_01",
"start_date": "2026-09-10",
"days": 7
}
}
POST/api/v1/booking/appointmentsСтворити новий онлайн-запис
Створює клієнта або оновлює його картку за номером телефону, резервує слот і повертає публічне посилання на підтвердження запису.
| Поле | Обов’язковість | Опис |
|---|---|---|
service_idstring · max 100 | Обов’язково | ID послуги, для якої було отримано слот. |
employee_idstring · max 100 | Обов’язково | ID співробітника з вибраного слота. |
starts_atstring · ISO 8601 | Обов’язково | Точне ISO-значення starts_at із відповіді /availability. Не переформатовуйте і не округлюйте його. |
client_namestring · max 120 | Обов’язково | Ім’я клієнта, яке буде показано в календарі та CRM. |
client_phonestring · max 40 | Обов’язково | Дійсний контактний номер клієнта. Використовується для пошуку або створення картки клієнта. |
notesstring · max 2000 | Необов’язково | Необов’язковий коментар до запису. Якщо приміток немає, передайте порожній рядок або не додавайте поле. |
curl -X POST https://vzl.one/api/v1/booking/appointments \
-H "Authorization: Bearer $VUZOL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"service_id": "SERVICE_ID",
"employee_id": "EMPLOYEE_ID",
"starts_at": "2026-09-10T14:00",
"client_name": "Iryna Kovalenko",
"client_phone": "+380501112233",
"notes": "First visit"
}'
{
"data": {
"booking_id": "appointment_01",
"status": "booked",
"service_id": "service_01",
"employee_id": "employee_01",
"starts_at": "2026-09-10T14:00",
"ends_at": "2026-09-10T15:00",
"receipt_url": "https://vzl.one/book/vuzol-studio/appointments/PUBLIC_TOKEN"
}
}