Перейти до вмісту

Partner API v1

Компактний API запису з обмеженими правами.

Усі відповіді мають no-store. Застосунок, визначений ключем, задає tenant, дозволені scope, локації та необов’язкові обмеження origin/IP.

Кінцеві точки

GET/api/partner/v1/catalog

Опубліковані послуги й дозволені локації. Використовуйте обмежену пагінацію limit/cursor.

catalog.read
GET/api/partner/v1/catalog/specialists

Опубліковані спеціалісти, звужені підтримуваними фільтрами послуги й локації.

catalog.read
GET/api/partner/v1/availability

Обмежений перелік вільних слотів з урахуванням поточного часу підготовки, розкладу й місткості.

availability.read
POST/api/partner/v1/bookings

Гостьовий запис зі згодою на зв’язок, external_reference та Idempotency-Key.

booking.create
GET/api/partner/v1/bookings/{pbr_reference}

Представлення запису, що належить застосунку, і поточна версія керування.

booking.manage
POST/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Створіть нову логічну операцію й ключ; ніколи не змінюйте повторюваний запит.
Довідник API | Feny для розробників