Referință API
Toate rutele pornesc de la adresa CRM-ului dvs. (https://<adresa CRM>), doar HTTPS. Cheia — în antetul Authorization: Bearer tk_<key_id>_<secret>, dreptul cheii — rental:site. Mai jos — același conținut ca în fișierul OpenAPI; pachetul @type/site-client oferă metode tipizate pentru aceste rute. Descrierile câmpurilor din schemă sunt deocamdată în rusă.
Versiunea schemei: 0.1.0 · OpenAPI (JSON)
Rute
POST /booking-requests
/api/modules/rental/site/booking-requests
Заявка с формы сайта (ключ проверяется раньше полей: без ключа — 401, а не 422) → сделка-бронь на этапе «Заявка», источник site, с расчётом цены. Повтор request_id — тот же ответ. Занятые даты, блокировка, мин. срок или гостей больше максимума — 422 rental_unavailable.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Corpul cererii
Schemă: SiteBookingRequestIn
Răspunsuri
| Cod | Schemă | Descriere |
|---|
201 | SiteBookingRequestOut | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | | rental_unavailable (violations) или ошибка полей |
429 | | too_many_attempts, Retry-After |
GET /groups
/api/modules/rental/site/groups
Группы (районы) с числом неархивных объектов — фильтр каталога.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | listă SiteGroup | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /legacy-urls
/api/modules/rental/site/legacy-urls
Старые адреса товаров WooCommerce → объект и его ЧПУ: таблица 301 в плагине.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | listă SiteLegacyUrl | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /occupancy
/api/modules/rental/site/occupancy
Занятые интервалы по объектам (подтверждённые брони и блокировки), без гостей и сумм; особые даты периода — для подсветки в календаре.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
date_from | query | string (date) | da | |
date_to | query | string (date) | da | Не включительно; не больше 400 дней |
unit_ids | query | listă string (uuid) | null | | |
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SiteOccupancyOut | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | | invalid_period — больше 400 дней |
429 | | too_many_attempts, Retry-After |
GET /photos/{account_id}/{product_id}/{file}
/api/modules/rental/site/photos/{account_id}/{product_id}/{file}
Постоянная публичная ссылка на фото объекта (без ключа, для <img> на сайте): 302 на временную ссылку превью WebP 1920 (без EXIF), Cache-Control: public, max-age=3000. Оригинал наружу не отдаётся: перенесённое фото, у которого превью ещё строится, — 503 с Retry-After: 60. Только фото неархивных объектов аккаунта с включённым модулем; иначе 404.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
account_id | path | string (uuid) | da | |
product_id | path | string (uuid) | da | |
file | path | string | da | |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
302 | | На превью WebP в хранилище |
404 | | Нет фото |
422 | HTTPValidationError | Validation Error |
503 | | photo_processing — превью ещё строится, Retry-After |
GET /ping
/api/modules/rental/site/ping
Проверка подключения плагина: аккаунт, валюта, языки текстов, время заезда и выезда.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SiteInfo | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /prices
/api/modules/rental/site/prices
Цена и доступность всех объектов на даты — фильтр каталога «цена за выбранные даты».
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
check_in | query | string (date) | da | |
check_out | query | string (date) | da | |
guests | query | integer | | |
group_id | query | string (uuid) | null | | |
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SitePricesOut | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /quote
/api/modules/rental/site/quote
Калькулятор: цена каждой ночи, скидки каталога, итог; нарушения (занято, мин. срок, гостей больше максимума). Тот же расчёт, что в CRM.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
unit_id | query | string (uuid) | da | |
check_in | query | string (date) | da | |
check_out | query | string (date) | da | |
guests | query | integer | | |
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SiteQuoteOut | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /units
/api/modules/rental/site/units
Все неархивные объекты с текстами на lang, фото по постоянным ссылкам, удобствами и базовой ценой. updated_at — версия для кэша плагина.
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
lang | query | ro · en · ru | | Язык текстов; нет текста — румынский |
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SiteUnitsOut | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
GET /units/{unit_id}
/api/modules/rental/site/units/{unit_id}
Cheie API cu dreptul rental:site.
Parametri
| Nume | Unde | Tip | Oblig. | Descriere |
|---|
unit_id | path | string (uuid) | da | |
lang | query | ro · en · ru | | Язык текстов; нет текста — румынский |
x-type-visitor-ip | antet | string | null | | IP посетителя сайта |
Răspunsuri
| Cod | Schemă | Descriere |
|---|
200 | SiteUnit | |
400 | | api_key_misplaced — ключ в query, cookie или теле |
401 | | api_key_invalid — ключ не принят (причина — в журнале сервера) |
403 | | scope_missing — нет права rental:site; scope_unavailable — модуль выключен |
404 | | not_found — нет объекта или он в архиве |
422 | HTTPValidationError | Validation Error |
429 | | too_many_attempts, Retry-After |
Scheme
Application
valori: auto · manual
AppliedDiscount
Сработавшая скидка каталога (§19.10): на строку — её доля, в итогах — всего.
| Câmp | Tip | Oblig. | Descriere |
|---|
amount | string | da | На сколько уменьшила сумму (с TVA, как gross) |
application | Application | da | |
discount_id | string (uuid) | da | |
kind | DiscountKind | da | |
name | string | da | |
DiscountKind
valori: line · deal
I18n3
Тексты на языках сайта: ro (основной), en, ru.
| Câmp | Tip | Oblig. | Descriere |
|---|
en | string | | |
ro | string | | |
ru | string | | |
Night
| Câmp | Tip | Oblig. | Descriere |
|---|
base | string | da | |
date | string (date) | da | |
price | string | da | |
special_date_id | string (uuid) | null | | |
special_name | string | null | | |
SiteBookingRequestIn
Заявка с формы сайта → сделка-бронь на этапе «Заявка» с расчётом цены. Клиент — по телефону или e-mail (найден — привязывается, нет — создаётся контакт). Нужен телефон или e-mail. Антиспам: hp (скрытое поле-ловушка) непустое или elapsed_ms < 3000 — ответ как при успехе, но сделка не создаётся. Повтор с тем же request_id (досылка из очереди плагина) не создаёт вторую сделку и возвращает тот же ответ.
| Câmp | Tip | Oblig. | Descriere |
|---|
check_in | string (date) | da | |
check_out | string (date) | da | |
consent | true | da | Согласие на обработку персональных данных |
elapsed_ms | integer ≥ 0 | da | Сколько форма была открыта до отправки, мс |
email | string (email) | null | | |
guests | integer ≥ 1, ≤ 100 | | Implicit: 1. |
hp | string ≤ 200 | | Поле-ловушка: скрыто от людей, должно быть пустым |
lang | ro · en · ru | | Implicit: "ro". |
message | string | null | | |
name | string ≥ 1, ≤ 200 | da | |
page_url | string | null | | |
phone | string | null | | |
request_id | string (uuid) | da | UUID заявки, создаёт плагин — идемпотентность |
unit_id | string (uuid) | da | |
utm | object → string | null | | |
SiteBookingRequestOut
| Câmp | Tip | Oblig. | Descriere |
|---|
currency | string | da | |
nights | integer | da | |
request_id | string (uuid) | da | |
status | "received" | da | |
total | string | da | |
SiteDiscount
| Câmp | Tip | Oblig. | Descriere |
|---|
ends_on | string (date) | null | da | Последний день действия; null — бессрочно |
name | string | da | |
value | string | da | |
value_type | percent · fixed | da | fixed — сумма за ночь |
SiteGroup
| Câmp | Tip | Oblig. | Descriere |
|---|
id | string (uuid) | da | |
name | string | da | |
units_count | integer | da | |
SiteInfo
| Câmp | Tip | Oblig. | Descriere |
|---|
account_name | string | da | |
check_in_time | string | da | |
check_out_time | string | da | |
currency | string | da | |
key_name | string | da | |
languages | listă ro · en · ru | da | Языки, на которых есть тексты объектов |
timezone | string | da | |
SiteLegacyUrl
| Câmp | Tip | Oblig. | Descriere |
|---|
gone | boolean | da | Объект удалён — ответить 410 Gone |
lang | string | da | |
path | string | da | Путь старого адреса (/ro/product/<slug>/): товар WooCommerce или прежний слаг объекта — ключ для 301 |
slug | string | null | da | ЧПУ объекта на языке старого адреса; null — объект удалён |
unit_id | string (uuid) | da | |
url | string | da | Старый адрес: товар WooCommerce или путь прежнего слага |
SitePhoto
| Câmp | Tip | Oblig. | Descriere |
|---|
position | integer | da | |
url | string | da | Постоянная публичная ссылка /api/modules/rental/site/photos/{account_id}/{product_id}/{file} (без ключа) |
SitePrice
| Câmp | Tip | Oblig. | Descriere |
|---|
available | boolean | da | |
per_night | string | null | da | Средняя цена ночи с учётом скидок |
per_night_before | string | null | da | Средняя цена ночи до скидок |
subtotal | string | null | da | Итог до скидок; null — даты недоступны |
total | string | null | da | Итог после скидок; null — даты недоступны |
unit_id | string (uuid) | da | |
violations | listă SiteViolation | da | |
SitePricesOut
| Câmp | Tip | Oblig. | Descriere |
|---|
check_in | string (date) | da | |
check_out | string (date) | da | |
currency | string | da | |
guests | integer | da | |
nights | integer | da | |
units | listă SitePrice | da | |
SiteQuoteOut
| Câmp | Tip | Oblig. | Descriere |
|---|
available | boolean | da | Нет блокирующих нарушений — можно отправить заявку |
check_in | string (date) | da | |
check_out | string (date) | da | |
currency | string | da | |
discounts | listă AppliedDiscount | da | |
guests | integer | da | |
nights | integer | da | |
per_night | listă Night | da | |
subtotal | string | da | |
total | string | da | |
unit_id | string (uuid) | da | |
violations | listă SiteViolation | da | |
SiteRange
| Câmp | Tip | Oblig. | Descriere |
|---|
end | string (date) | da | Не включительно: день выезда свободен для заезда |
start | string (date) | da | |
SiteSpecialDay
| Câmp | Tip | Oblig. | Descriere |
|---|
end | string (date) | da | Включительно |
min_nights | integer | null | da | |
name | string | da | |
start | string (date) | da | |
unit_ids | listă string (uuid) | null | da | null — все объекты |
SiteUnit
| Câmp | Tip | Oblig. | Descriere |
|---|
address | string | null | da | |
amenities | listă string | da | Удобства на языке lang (нет перевода — румынский), по порядку справочника |
area_m2 | string | null | da | Площадь, м² |
base_price | string | da | Цена ночи без скидок — «старая» при discount |
bathrooms | integer | da | |
beds | integer | null | da | |
check_in_time | string | da | |
check_out_time | string | da | |
currency | string | da | |
description | string | da | |
discount | SiteDiscount | null | da | Скидка в price; null — без скидки |
district | string | null | da | |
floor | integer | null | da | Этаж |
group_id | string (uuid) | null | da | |
group_name | string | null | da | |
has_balcony | boolean | da | |
has_living | boolean | da | |
has_terrace | boolean | da | |
id | string (uuid) | da | |
lang | ro · en · ru | da | Язык текстов; нет текста на языке — румынский |
lat | number | null | da | |
lng | number | null | da | |
max_guests | integer | da | |
name | string | da | |
names | I18n3 | da | |
photos | listă SitePhoto | da | |
position | integer | da | |
price | string | da | Цена ночи («от») с безусловной скидкой на объект, действующей сегодня; особые даты не входят. Нет скидки — равна base_price |
rooms | string | null | da | |
rooms_count | integer | null | da | Комнат; 0 — студия |
slug | string | da | ЧПУ на языке lang (нет — румынский); хранится, уникален среди объектов, при переименовании не меняется |
slugs | object → string | da | ЧПУ на всех языках — для hreflang |
updated_at | string (date-time) | da | |
SiteUnitBusy
| Câmp | Tip | Oblig. | Descriere |
|---|
busy | listă SiteRange | da | Подтверждённые брони и блокировки, слитые в интервалы; без гостей и сумм. Заявки дат не занимают и не показываются |
unit_id | string (uuid) | da | |
SiteUnitsOut
| Câmp | Tip | Oblig. | Descriere |
|---|
lang | ro · en · ru | da | |
units | listă SiteUnit | da | Объекты без архивных, по порядку |
updated_at | string (date-time) | null | da | Последнее изменение — версия кэша |
SiteViolation
Нарушения расчёта для сайта: без tentative_overlap (заявки других гостей не видны).
| Câmp | Tip | Oblig. | Descriere |
|---|
blocking | boolean | da | Бронь не сохранится (иначе — предупреждение) |
code | dates_invalid · min_nights · max_guests · occupied · tentative_overlap · blocked · unit_archived | da | |
params | object | | |
ValidationError
| Câmp | Tip | Oblig. | Descriere |
|---|
ctx | object | | |
input | any | | |
loc | listă string | integer | da | |
msg | string | da | |
type | string | da | |