Кінцеві точки
GET
/api/partner/v1/catalogОпубліковані послуги й дозволені локації. Використовуйте обмежену пагінацію limit/cursor.
catalog.readGET
/api/partner/v1/catalog/specialistsОпубліковані спеціалісти, звужені підтримуваними фільтрами послуги й локації.
catalog.readGET
/api/partner/v1/availabilityОбмежений перелік вільних слотів з урахуванням поточного часу підготовки, розкладу й місткості.
availability.readPOST
/api/partner/v1/bookingsГостьовий запис зі згодою на зв’язок, external_reference та Idempotency-Key.
booking.createGET
/api/partner/v1/bookings/{pbr_reference}Представлення запису, що належить застосунку, і поточна версія керування.
booking.managePOST
/api/partner/v1/bookings/{pbr_reference}/actions/{cancel|reschedule}Версійна ідемпотентна зміна життєвого циклу за поточними правилами запису.
booking.manageАвторизація, конверти й трасування запитів
http
GET /api/partner/v1/catalog?locale=en&limit=2 HTTP/1.1
Authorization: Bearer fnx_test_example_key_not_a_real_credential
Accept-Language: en
Origin: https://partner.example
HTTP/1.1 200 OK
Cache-Control: private, no-store
Referrer-Policy: no-referrer
X-Request-Id: <request_id>
X-RateLimit-Limit: <limit>
X-RateLimit-Remaining: <remaining>
X-RateLimit-Reset: <unix_seconds>
{
"data": { "services": [], "next_cursor": null },
"meta": { "request_id": "<request_id>", "version": "v1" }
}Політика scope й облікових даних
| Область | Маршрути | Межі |
|---|---|---|
| catalog.read | Каталог і спеціалісти | Лише поточні опубліковані дані, дозволені політикою локацій облікових даних. |
| availability.read | Доступність | Лише обмежені доступні слоти за поточними правилами запису, місткості й часу підготовки. |
| booking.create | Створення запису | Потрібні явна згода клієнта, external_reference та Idempotency-Key. |
| booking.manage | Читання запису й дії | Лише посилання pbr_, що належить застосунку; для дій також потрібен expected_version. |
| webhooks.manage | Центр керування власника | Webhook налаштовується в захищеному кабінеті власника, а не через публічний API-маршрут. |
Створення запису
http
POST /api/partner/v1/bookings HTTP/1.1
Authorization: Bearer fnx_test_example_key_not_a_real_credential
Idempotency-Key: 7b1d9ed1-7f34-4ddf-9e01-example
Content-Type: application/json
{
"service_id": "<published_service_id>",
"location_id": "<optional_allowed_location_id>",
"date": "2026-09-21",
"start_time": "10:00",
"external_reference": "partner-order-1042",
"customer": {
"name": "Test customer",
"phone": "+15550001111",
"consent_to_contact": true
}
}Поточна структура запису
- Partner API v1 створює одну послугу на запис. Документоване поле service_id є одиничним; вигадані поля service_ids або composition_mode відхиляються.
- Складений послідовний або паралельний запис доступний через підписаний віджет Feny і власний потік запису, де канонічний механізм перевіряє комбінації, місткість персоналу й чинні правила бізнесу.
- Не розкривайте облікові дані Partner API в коді браузера. Для вбудовування використовуйте публічні id і версію віджета, а виклики API виконуйте на довіреному сервері.
Пагінація й обмежене читання
http
GET /api/partner/v1/catalog?locale=en&limit=25&cursor=<next_cursor> HTTP/1.1
Authorization: Bearer fnx_test_example_key_not_a_real_credential
{
"data": {
"services": ["..."],
"next_cursor": "<opaque_cursor_or_null>"
},
"meta": { "request_id": "<request_id>", "version": "v1" }
}Правила пагінації
- Читання каталогу й спеціалістів приймає limit від 1 до 50 (типово 25). Доступність приймає від 1 до 96 (типово 48).
- Передавайте next_cursor точно у отриманому вигляді. Він непрозорий: його не можна декодувати, створювати, передавати між непов’язаними запитами чи використовувати після зміни фільтрів.
- next_cursor доступності позначає час початку останнього повернутого слота саме для цього запиту. null означає, що наступної сторінки немає.
- Доступність є поточним читанням, а не резервуванням. Прочитайте її знову й дозвольте запиту створення виконати остаточну серверну перевірку місткості.
Ідемпотентні дії із записом
http
POST /api/partner/v1/bookings/<pbr_reference>/actions/cancel HTTP/1.1
Authorization: Bearer fnx_test_example_key_not_a_real_credential
Idempotency-Key: 11111111-2222-4333-8444-example
Content-Type: application/json
{ "expected_version": 3 }Політика ідемпотентності й версій
- Використовуйте один Idempotency-Key на 16–128 символів для однієї логічної операції запису. Після невизначеного результату повторіть точний запит; для нової операції створіть новий ключ.
- Ніколи не використовуйте ключ ідемпотентності повторно зі зміненими даними. API повертає 409 idempotency_key_reused замість припущень про головний запит.
- Отримайте керований запис перед скасуванням або перенесенням і передайте останню версію як expected_version. Застаріла версія може повернути 409 booking_version_conflict.
- Не кодуйте дані клієнта, облікові дані чи інші чутливі значення в Idempotency-Key або external_reference.
Помилки й повторні спроби
| Умова | Відповідь | Дія партнера |
|---|---|---|
| Недійсний або прострочений ключ | 401 invalid_api_key | Ротуйте ключ або виберіть правильне середовище; не повторюйте запит з іншим tenant selector. |
| Немає scope або діє обмеження облікових даних | 403 insufficient_scope / credential_restricted | Змініть політику застосунку в Центрі керування власника. |
| Недійсний запит або запис недоступний | 400 invalid_request / 409 booking_unavailable | Виправте дані або отримайте поточну доступність; зберігайте початковий ключ лише для тієї самої логічної операції. |
| Запис не знайдено | 404 not_found | Не робіть висновків про стан tenant і не повторюйте з іншим selector. |
| Відповідь про квоту | 429 rate_limited | Дотримуйтеся Retry-After і заголовків ліміту. Повторюйте лише після вказаного часу з обмеженою затримкою. |
| Тимчасова відповідь сервісу | 503 service_unavailable | Використовуйте обмежену експоненційну затримку з jitter; зберігайте той самий ключ лише для тієї самої операції. |
| Ключ ідемпотентності повторно використано зі зміненими даними | 409 idempotency_key_reused | Створіть нову логічну операцію й ключ; ніколи не змінюйте повторюваний запит. |
Feny