К содержимому
Type — API сайта
Разделы

Справочник API

Все маршруты — от адреса вашей CRM (https://<адрес CRM>), только HTTPS. Ключ — в заголовке Authorization: Bearer tk_<key_id>_<secret>, право ключа — rental:site. Ниже — то же, что в файле OpenAPI; пакет @type/site-client даёт к этим маршрутам типизированные методы.

Версия схемы: 0.1.0 · OpenAPI (JSON)

Маршруты

POST /booking-requests

/api/modules/rental/site/booking-requests

Заявка с формы сайта (ключ проверяется раньше полей: без ключа — 401, а не 422) → сделка-бронь на этапе «Заявка», источник site, с расчётом цены. Повтор request_id — тот же ответ. Занятые даты, блокировка, мин. срок или гостей больше максимума — 422 rental_unavailable.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Тело запроса

Схема: SiteBookingRequestIn

Ответы

КодСхемаОписание
201SiteBookingRequestOut
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422rental_unavailable (violations) или ошибка полей
429too_many_attempts, Retry-After

GET /groups

/api/modules/rental/site/groups

Группы (районы) с числом неархивных объектов — фильтр каталога.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200массив SiteGroup
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /legacy-urls

/api/modules/rental/site/legacy-urls

Старые адреса товаров WooCommerce → объект и его ЧПУ: таблица 301 в плагине.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200массив SiteLegacyUrl
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /occupancy

/api/modules/rental/site/occupancy

Занятые интервалы по объектам (подтверждённые брони и блокировки), без гостей и сумм; особые даты периода — для подсветки в календаре.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
date_fromquerystring (date)да
date_toquerystring (date)даНе включительно; не больше 400 дней
unit_idsqueryмассив string (uuid) | null
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SiteOccupancyOut
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422invalid_period — больше 400 дней
429too_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.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
account_idpathstring (uuid)да
product_idpathstring (uuid)да
filepathstringда

Ответы

КодСхемаОписание
302На превью WebP в хранилище
404Нет фото
422HTTPValidationErrorValidation Error
503photo_processing — превью ещё строится, Retry-After

GET /ping

/api/modules/rental/site/ping

Проверка подключения плагина: аккаунт, валюта, языки текстов, время заезда и выезда.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SiteInfo
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /prices

/api/modules/rental/site/prices

Цена и доступность всех объектов на даты — фильтр каталога «цена за выбранные даты».

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
check_inquerystring (date)да
check_outquerystring (date)да
guestsqueryinteger
group_idquerystring (uuid) | null
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SitePricesOut
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /quote

/api/modules/rental/site/quote

Калькулятор: цена каждой ночи, скидки каталога, итог; нарушения (занято, мин. срок, гостей больше максимума). Тот же расчёт, что в CRM.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
unit_idquerystring (uuid)да
check_inquerystring (date)да
check_outquerystring (date)да
guestsqueryinteger
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SiteQuoteOut
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /units

/api/modules/rental/site/units

Все неархивные объекты с текстами на lang, фото по постоянным ссылкам, удобствами и базовой ценой. updated_at — версия для кэша плагина.

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
langqueryro · en · ruЯзык текстов; нет текста — румынский
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SiteUnitsOut
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

GET /units/{unit_id}

/api/modules/rental/site/units/{unit_id}

Ключ API с правом rental:site.

Параметры

ИмяГдеТипОбяз.Описание
unit_idpathstring (uuid)да
langqueryro · en · ruЯзык текстов; нет текста — румынский
x-type-visitor-ipзаголовокstring | nullIP посетителя сайта

Ответы

КодСхемаОписание
200SiteUnit
400api_key_misplaced — ключ в query, cookie или теле
401api_key_invalid — ключ не принят (причина — в журнале сервера)
403scope_missing — нет права rental:site; scope_unavailable — модуль выключен
404not_found — нет объекта или он в архиве
422HTTPValidationErrorValidation Error
429too_many_attempts, Retry-After

Схемы

Application

значения: auto · manual

AppliedDiscount

Сработавшая скидка каталога (§19.10): на строку — её доля, в итогах — всего.

ПолеТипОбяз.Описание
amountstringдаНа сколько уменьшила сумму (с TVA, как gross)
applicationApplicationда
discount_idstring (uuid)да
kindDiscountKindда
namestringда

DiscountKind

значения: line · deal

HTTPValidationError

ПолеТипОбяз.Описание
detailмассив ValidationError

I18n3

Тексты на языках сайта: ro (основной), en, ru.

ПолеТипОбяз.Описание
enstring
rostring
rustring

Night

ПолеТипОбяз.Описание
basestringда
datestring (date)да
pricestringда
special_date_idstring (uuid) | null
special_namestring | null

SiteBookingRequestIn

Заявка с формы сайта → сделка-бронь на этапе «Заявка» с расчётом цены. Клиент — по телефону или e-mail (найден — привязывается, нет — создаётся контакт). Нужен телефон или e-mail. Антиспам: hp (скрытое поле-ловушка) непустое или elapsed_ms < 3000 — ответ как при успехе, но сделка не создаётся. Повтор с тем же request_id (досылка из очереди плагина) не создаёт вторую сделку и возвращает тот же ответ.

ПолеТипОбяз.Описание
check_instring (date)да
check_outstring (date)да
consenttrueдаСогласие на обработку персональных данных
elapsed_msinteger ≥ 0даСколько форма была открыта до отправки, мс
emailstring (email) | null
guestsinteger ≥ 1, ≤ 100 По умолчанию: 1.
hpstring ≤ 200Поле-ловушка: скрыто от людей, должно быть пустым
langro · en · ru По умолчанию: "ro".
messagestring | null
namestring ≥ 1, ≤ 200да
page_urlstring | null
phonestring | null
request_idstring (uuid)даUUID заявки, создаёт плагин — идемпотентность
unit_idstring (uuid)да
utmobject → string | null

SiteBookingRequestOut

ПолеТипОбяз.Описание
currencystringда
nightsintegerда
request_idstring (uuid)да
status"received"да
totalstringда

SiteDiscount

ПолеТипОбяз.Описание
ends_onstring (date) | nullдаПоследний день действия; null — бессрочно
namestringда
valuestringда
value_typepercent · fixedдаfixed — сумма за ночь

SiteGroup

ПолеТипОбяз.Описание
idstring (uuid)да
namestringда
units_countintegerда

SiteInfo

ПолеТипОбяз.Описание
account_namestringда
check_in_timestringда
check_out_timestringда
currencystringда
key_namestringда
languagesмассив ro · en · ruдаЯзыки, на которых есть тексты объектов
timezonestringда

SiteLegacyUrl

ПолеТипОбяз.Описание
gonebooleanдаОбъект удалён — ответить 410 Gone
langstringда
pathstringдаПуть старого адреса (/ro/product/<slug>/): товар WooCommerce или прежний слаг объекта — ключ для 301
slugstring | nullдаЧПУ объекта на языке старого адреса; null — объект удалён
unit_idstring (uuid)да
urlstringдаСтарый адрес: товар WooCommerce или путь прежнего слага

SiteOccupancyOut

ПолеТипОбяз.Описание
date_fromstring (date)да
date_tostring (date)да
special_datesмассив SiteSpecialDayда
unitsмассив SiteUnitBusyда

SitePhoto

ПолеТипОбяз.Описание
positionintegerда
urlstringдаПостоянная публичная ссылка /api/modules/rental/site/photos/{account_id}/{product_id}/{file} (без ключа)

SitePrice

ПолеТипОбяз.Описание
availablebooleanда
per_nightstring | nullдаСредняя цена ночи с учётом скидок
per_night_beforestring | nullдаСредняя цена ночи до скидок
subtotalstring | nullдаИтог до скидок; null — даты недоступны
totalstring | nullдаИтог после скидок; null — даты недоступны
unit_idstring (uuid)да
violationsмассив SiteViolationда

SitePricesOut

ПолеТипОбяз.Описание
check_instring (date)да
check_outstring (date)да
currencystringда
guestsintegerда
nightsintegerда
unitsмассив SitePriceда

SiteQuoteOut

ПолеТипОбяз.Описание
availablebooleanдаНет блокирующих нарушений — можно отправить заявку
check_instring (date)да
check_outstring (date)да
currencystringда
discountsмассив AppliedDiscountда
guestsintegerда
nightsintegerда
per_nightмассив Nightда
subtotalstringда
totalstringда
unit_idstring (uuid)да
violationsмассив SiteViolationда

SiteRange

ПолеТипОбяз.Описание
endstring (date)даНе включительно: день выезда свободен для заезда
startstring (date)да

SiteSpecialDay

ПолеТипОбяз.Описание
endstring (date)даВключительно
min_nightsinteger | nullда
namestringда
startstring (date)да
unit_idsмассив string (uuid) | nullдаnull — все объекты

SiteUnit

ПолеТипОбяз.Описание
addressstring | nullда
amenitiesмассив stringдаУдобства на языке lang (нет перевода — румынский), по порядку справочника
area_m2string | nullдаПлощадь, м²
base_pricestringдаЦена ночи без скидок — «старая» при discount
bathroomsintegerда
bedsinteger | nullда
check_in_timestringда
check_out_timestringда
currencystringда
descriptionstringда
discountSiteDiscount | nullдаСкидка в price; null — без скидки
districtstring | nullда
floorinteger | nullдаЭтаж
group_idstring (uuid) | nullда
group_namestring | nullда
has_balconybooleanда
has_livingbooleanда
has_terracebooleanда
idstring (uuid)да
langro · en · ruдаЯзык текстов; нет текста на языке — румынский
latnumber | nullда
lngnumber | nullда
max_guestsintegerда
namestringда
namesI18n3да
photosмассив SitePhotoда
positionintegerда
pricestringдаЦена ночи («от») с безусловной скидкой на объект, действующей сегодня; особые даты не входят. Нет скидки — равна base_price
roomsstring | nullда
rooms_countinteger | nullдаКомнат; 0 — студия
slugstringдаЧПУ на языке lang (нет — румынский); хранится, уникален среди объектов, при переименовании не меняется
slugsobject → stringдаЧПУ на всех языках — для hreflang
updated_atstring (date-time)да

SiteUnitBusy

ПолеТипОбяз.Описание
busyмассив SiteRangeдаПодтверждённые брони и блокировки, слитые в интервалы; без гостей и сумм. Заявки дат не занимают и не показываются
unit_idstring (uuid)да

SiteUnitsOut

ПолеТипОбяз.Описание
langro · en · ruда
unitsмассив SiteUnitдаОбъекты без архивных, по порядку
updated_atstring (date-time) | nullдаПоследнее изменение — версия кэша

SiteViolation

Нарушения расчёта для сайта: без tentative_overlap (заявки других гостей не видны).

ПолеТипОбяз.Описание
blockingbooleanдаБронь не сохранится (иначе — предупреждение)
codedates_invalid · min_nights · max_guests · occupied · tentative_overlap · blocked · unit_archivedда
paramsobject

ValidationError

ПолеТипОбяз.Описание
ctxobject
inputany
locмассив string | integerда
msgstringда
typestringда