Создание визита
Создание визита транспорта на площадке Заездо с использованием ранее синхронизированных справочников и ответственного менеджера. Метод не создаёт площадки, контрагентов, автомобили или водителей.
https://app.zaezdo.pro/api/v1/visitsНа этой странице
Подготовка к созданию визита#
- Справочники предварительно синхронизируются отдельными
PUT-методами. Создание визита не создаёт и не обновляет вложенные сущности. - Площадка и контрагент должны существовать и быть активными. Автомобиль и водитель необязательны, но если переданы — тоже должны быть найдены и активны.
- Ответственный обязателен: пользователь активен, имеет действующую учётную запись, роль MANAGER и доступ менеджера к указанной площадке.
- Метод проверяет, может ли указанный пользователь быть ответственным за визит на выбранной площадке.
- Отсутствие настроенных мест обслуживания, зон ожидания, сотрудников КПП и табло само по себе не блокирует создание визита.
- Если запрос отклонён при проверке, визит не создаётся. Ранее созданные справочники остаются без изменений.
- Начальный статус — PLANNED («Запланирован»); допуск определяется правилами площадки.
Параметры запроса#
Передайте внешние идентификаторы заранее подготовленных площадки, контрагента и, если используются, автомобиля и водителя. Ответственного сопоставьте в карточке пользователя через поле «Идентификатор для синхронизации с 1С».
Тело запроса передается в формате JSON. В *_source_id передаются идентификаторы из внешней системы.
| Параметр | Обяз. | Описание |
|---|---|---|
| external_id | Да | Постоянный ID визита во внешней системе, до 80 символов. |
| site_source_id | Да | ID площадки во внешней системе. |
| planned_arrival_at | Да | Дата и время прибытия в формате ГГГГ-ММ-ДД ЧЧ:ММ. |
| purpose | Да | Цель визита: LOADING — «Погрузка»; UNLOADING — «Разгрузка»; SERVICE — «Служебный визит»; OTHER — «Другое». |
| counterparty_source_id | Да | ID ранее зарегистрированного контрагента. |
| responsible_user_source_id | Да | ID пользователя в 1С, сопоставленного с пользователем Заездо. Назначается ответственным за визит после проверки его прав. |
| vehicle_source_id | Нет | ID автомобиля, если он известен на этапе планирования. |
| driver_source_id | Нет | ID водителя, если он известен на этапе планирования. |
| basis | Нет | Основание визита, не более 500 символов. |
Пример запроса#
POST /api/v1/visits HTTP/1.1
Host: app.zaezdo.pro
Authorization: Bearer ВАШ_API_ТОКЕН
Content-Type: application/json
{
"external_id": "ТД00-000015",
"site_source_id": "WH-SEVER",
"planned_arrival_at": "2026-11-03 10:30",
"purpose": "UNLOADING",
"counterparty_source_id": "CP-0042",
"responsible_user_source_id": "AfoninGA",
"vehicle_source_id": "VEH-0085",
"driver_source_id": "DRV-0017",
"basis": "Поставка по заявке №123"
}{
"external_id": "ТД00-000015",
"site_source_id": "WH-SEVER",
"planned_arrival_at": "2026-11-03 10:30",
"purpose": "UNLOADING",
"counterparty_source_id": "CP-0042",
"responsible_user_source_id": "AfoninGA",
"vehicle_source_id": "VEH-0085",
"driver_source_id": "DRV-0017",
"basis": "Поставка по заявке №123"
}curl --request POST \
--url "https://app.zaezdo.pro/api/v1/visits" \
--header "Authorization: Bearer ВАШ_API_ТОКЕН" \
--header "Content-Type: application/json" \
--data '{
"external_id": "ТД00-000015",
"site_source_id": "WH-SEVER",
"planned_arrival_at": "2026-11-03 10:30",
"purpose": "UNLOADING",
"counterparty_source_id": "CP-0042",
"responsible_user_source_id": "AfoninGA",
"vehicle_source_id": "VEH-0085",
"driver_source_id": "DRV-0017",
"basis": "Поставка по заявке №123"
}'vehicle_source_id и driver_source_id можно не передавать. Если они указаны, соответствующие автомобиль и водитель должны существовать и быть активны.
Успешные ответы#
{
"id": "VST-EXAMPLE001",
"external_id": "ТД00-000015",
"created": true,
"status": "PLANNED",
"admission_status": "UNDEFINED"
}{
"id": "VST-EXAMPLE001",
"external_id": "ТД00-000015",
"created": false,
"status": "PLANNED",
"admission_status": "UNDEFINED"
}При первом создании визита status = PLANNED («Запланирован»). Значение admission_status зависит от поля «Допуск на площадку» в карточке площадки: UNDEFINED («Не определён») при режиме «Требует ручной проверки»; ALLOWED («Разрешён») при режиме «Разрешен при наличии сведений».
Поля ответа и допуск
| Поле | Значение |
|---|---|
| id | Внутренний идентификатор созданного визита в Заездо. |
external_id | Идентификатор визита во внешней системе, полученный в запросе. |
| created | true — создан новый; false — возвращён уже существующий. |
| status | Статус визита. При первом создании — PLANNED («Запланирован»); при повторе — актуальное значение. |
admission_status | Статус допуска. При создании — UNDEFINED («Не определён») или ALLOWED («Разрешён»); в дальнейшем возможны DENIED («Запрещён») и REVOKED («Отозван»). |
ДОПУСТИМЫЕ ЗНАЧЕНИЯ ADMISSION_STATUS
| Значение | Описание | При создании |
|---|---|---|
| UNDEFINED | Допуск не определён; требуется решение по допуску. | Устанавливается, если в карточке площадки поле «Допуск на площадку» имеет значение «Требует ручной проверки». |
| ALLOWED | Допуск разрешён. | Устанавливается, если в карточке площадки поле «Допуск на площадку» имеет значение «Разрешен при наличии сведений». |
| DENIED | Допуск запрещён. | Нет |
| REVOKED | Ранее выданный допуск отозван. | Нет |
После создания визита статус допуска может изменяться по действующим правилам Заездо; повторный запрос возвращает актуальный статус существующего визита.
Повторная отправка визита#
Один external_id обозначает один визит вашей внешней системы. При потере ответа повторяйте исходный запрос без изменения external_id и его данных.
| Ситуация | Результат |
|---|---|
| Визит ещё не создан. | Выполняются поиск и проверки. При успехе — 201, created: true. |
| Визит создан по тому же исходному запросу. | 200, created: false. Возвращается тот же id; новый визит не создаётся. |
| Визит создан, но исходные данные запроса отличаются. | 409, VISIT_ALREADY_EXISTS. Существующий визит не изменяется. |
Для повтора сравниваются первоначально переданные данные, а не текущая карточка визита после ручного редактирования. Успешный повтор возвращает актуальные статусы существующего визита.
Проверка повтора выполняется до поиска справочников и проверки возможности нового создания. Поэтому запрос, по которому визит уже создан, не становится ошибочным только из-за наступившего планового времени или последующего изменения справочников.
HTTP 409 · EXTERNAL_ID УЖЕ ИСПОЛЬЗОВАН С ДРУГИМИ ДАННЫМИ
{
"code": "VISIT_ALREADY_EXISTS",
"message": "Визит с указанным external_id уже существует с другими исходными данными.",
"request_id": "req-example-conflict"
}Порядок проверки запроса#
Метод использует внешний идентификатор площадки, контрагента и ответственного пользователя, а также автомобиля и водителя, если они указаны. Проверка наличия этих записей выполняется отдельно от проверки параметров и возможности создания визита.
Запрос проходит этапы в порядке, указанном ниже. При ошибке возвращается HTTP-статус соответствующего этапа; последующие этапы не выполняются.
| Этап | Результат |
|---|---|
| 1. Авторизация | 401 — нет действующего токена или интеграция отключена. 403 — компания отключена. |
| 2. Чтение тела запроса | 415 — неверный Content-Type. 400 — JSON не удалось прочитать. |
| 3. Проверка параметров | 422 — отсутствуют обязательные параметры, неверны тип, длина, формат даты или значение purpose. Поиск справочников ещё не выполняется. |
| 4. Проверка повтора | 200 — этот визит уже создан по тому же исходному запросу. 409 — external_id уже использован с другими исходными данными. |
| 5. Поиск записей справочников | 404 — не найдена площадка, контрагент, ответственный пользователь, указанный автомобиль или водитель. Возвращаются все ошибки поиска. |
| 6. Проверка возможности создания | 422 — все записи найдены, но одна из них отключена, ответственного нельзя назначить или время прибытия прошло. Возвращаются все независимые нарушения этого этапа. |
| 7. Создание визита | 201 — визит создан. Дальнейшая обработка визита выполняется в Заездо. |
Обработка прекращается на первом этапе с ошибками. В errors[] перечисляются все обнаруженные ошибки только этого этапа. Ошибки поиска и проверки возможности создания не смешиваются в одном ответе.
Когда возвращается 404, а когда 422
404 — идентификатор передан корректно, но запись по нему не найдена. 422 — нужно исправить данные запроса либо условия, при которых допускается создание визита.
| Ситуация | Ответ |
|---|---|
Не передан обязательный site_source_id. | 422 · REQUIRED |
site_source_id передан с неверным типом или превышает допустимую длину. | 422 · INVALID_SITE_SOURCE_ID |
site_source_id корректен, но площадки с таким идентификатором нет. | 404 · SITE_NOT_FOUND |
| Площадка найдена, но отключена; все остальные переданные записи тоже найдены. | 422 · SITE_INACTIVE |
| Площадка не найдена, а менеджер неактивен. | Сначала 404 · SITE_NOT_FOUND. Активность менеджера проверяется после успешного поиска всех записей. |
| purpose некорректен, а контрагент не найден. | Сначала 422 · INVALID_PURPOSE. Поиск контрагента начнётся после исправления параметров. |
| Дата корректна по формату, но уже прошла; площадка не найдена. | Сначала 404 · SITE_NOT_FOUND. Проверка прошедшего времени выполняется после поиска. |
| Не найдены площадка и контрагент. | Один ответ 404 с двумя элементами errors[]. |
| Все записи найдены; площадка отключена и время прибытия прошло. | Один ответ 422 с двумя элементами errors[]. |
Коды и описания ошибок#
| Поле ответа | Значение |
|---|---|
| code | Общая категория ошибки. |
| message | Общее описание ошибки. |
| errors[] | Конкретные ошибки: field — параметр запроса; code — код причины; message — точный текст. |
request_id | Идентификатор запроса для обращения в поддержку. |
Конкретные причины HTTP 404 и 422 перечисляются в errors[]. Возвращаются все независимые ошибки того этапа, на котором остановилась проверка.
| HTTP · код / поле | Точный текст сообщения |
|---|---|
| 400HTTPINVALID_JSON | Не удалось прочитать JSON тела запроса. |
| 401HTTPUNAUTHORIZED | Требуется действующий Bearer-токен интеграции. |
| 403HTTPTENANT_INACTIVE | Компания отключена в Заездо. |
| 404HTTPRESOURCE_NOT_FOUND | Не найдены записи по переданным идентификаторам. |
| 409HTTPVISIT_ALREADY_EXISTS | Визит с указанным external_id уже существует с другими исходными данными. |
| 415HTTPUNSUPPORTED_MEDIA_TYPE | Передайте тело запроса с Content-Type: application/json. |
| 422HTTPVALIDATION_ERROR | Ошибка проверки данных визита. |
| 429HTTPRATE_LIMITED | Превышено допустимое количество запросов. Повторите запрос позже. |
| 500HTTPINTERNAL_ERROR | Внутренняя ошибка Заездо. |
| 503HTTPSERVICE_UNAVAILABLE | Сервис Заездо временно недоступен. |
| 422ПолеREQUIREDexternal_id | Укажите идентификатор визита во внешней системе. |
| 422ПолеINVALID_EXTERNAL_IDexternal_id | external_id должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеREQUIREDsite_source_id | Укажите идентификатор площадки. |
| 422ПолеINVALID_SITE_SOURCE_IDsite_source_id | Идентификатор площадки должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеREQUIREDcounterparty_source_id | Укажите идентификатор контрагента. |
| 422ПолеINVALID_COUNTERPARTY_SOURCE_IDcounterparty_source_id | Идентификатор контрагента должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеREQUIREDresponsible_user_source_id | Укажите идентификатор ответственного менеджера. |
| 422ПолеINVALID_RESPONSIBLE_USER_SOURCE_IDresponsible_user_source_id | Идентификатор ответственного должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеINVALID_VEHICLE_SOURCE_IDvehicle_source_id | Идентификатор автомобиля должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеINVALID_DRIVER_SOURCE_IDdriver_source_id | Идентификатор водителя должен быть строкой длиной от 1 до 80 символов. |
| 422ПолеREQUIREDplanned_arrival_at | Укажите плановую дату и время прибытия. |
| 422ПолеINVALID_DATETIMEplanned_arrival_at | Передайте плановую дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ. |
| 422ПолеREQUIREDpurpose | Укажите цель визита. |
| 422ПолеINVALID_PURPOSEpurpose | Допустимые значения цели визита: LOADING, UNLOADING, SERVICE, OTHER. |
| 422ПолеINVALID_BASISbasis | Основание визита должно быть строкой. |
| 422ПолеMAX_LENGTH_EXCEEDEDbasis | Основание визита не должно превышать 500 символов. |
| 404ПолеSITE_NOT_FOUNDsite_source_id | Площадка с указанным site_source_id не найдена. |
| 404ПолеCOUNTERPARTY_NOT_FOUNDcounterparty_source_id | Контрагент с указанным counterparty_source_id не найден. |
| 404ПолеMANAGER_NOT_FOUNDresponsible_user_source_id | Пользователь с указанным responsible_user_source_id не найден. |
| 404ПолеVEHICLE_NOT_FOUNDvehicle_source_id | Автомобиль с указанным vehicle_source_id не найден. |
| 404ПолеDRIVER_NOT_FOUNDdriver_source_id | Водитель с указанным driver_source_id не найден. |
| 422ПолеSITE_INACTIVEsite_source_id | Площадка отключена. |
| 422ПолеCOUNTERPARTY_INACTIVEcounterparty_source_id | Контрагент отключён. |
| 422ПолеMANAGER_INACTIVEresponsible_user_source_id | Ответственный сотрудник отключён. |
| 422ПолеMANAGER_NO_ACCOUNTresponsible_user_source_id | У ответственного сотрудника нет действующей учётной записи в Заездо. |
| 422ПолеMANAGER_NOT_MANAGERresponsible_user_source_id | Ответственному сотруднику не назначена роль «Менеджер». |
| 422ПолеMANAGER_NO_SITE_ACCESSresponsible_user_source_id | Ответственный менеджер не имеет доступа к указанной площадке. |
| 422ПолеVEHICLE_INACTIVEvehicle_source_id | Автомобиль отключён. |
| 422ПолеDRIVER_INACTIVEdriver_source_id | Водитель отключён. |
| 422ПолеARRIVAL_IN_PASTplanned_arrival_at | Плановое время прибытия не может быть в прошлом. |
Ниже приведены точные значения code и message. Подробности ошибок 404 и 422 находятся в массиве errors[].
RESOURCE_NOT_FOUND относится к площадке, контрагенту, ответственному пользователю, автомобилю или водителю, указанным в запросе. Он не означает отсутствие создаваемого визита.
Условия возникновения ошибок
Каждая строка задаёт одну ошибку: field — параметр запроса; code — её машинный код; message — точный текст. Если на этапе найдено несколько независимых ошибок, они возвращаются отдельными элементами errors[].
Параметры запроса · HTTP 422
На этом этапе не выполняются поиск записей, проверка их активности и прав менеджера. Для planned_arrival_at проверяются наличие и корректность даты и времени в формате ГГГГ-ММ-ДД ЧЧ:ММ, но не наступление указанного времени.
Необязательные параметры vehicle_source_id, driver_source_id и basis можно не передавать. Для переданных значений действуют ограничения из таблицы.
Поиск записей справочников · HTTP 404
Поиск начинается после успешной проверки параметров и отсутствия ранее выполненного запроса с тем же external_id. Все переданные идентификаторы проверяются независимо.
Автомобиль и водитель ищутся только при наличии vehicle_source_id и driver_source_id. Отключённая запись считается найденной. Если хотя бы одна запись не найдена, возвращается 404; проверка возможности создания в этом запросе не выполняется.
Возможность создания визита · HTTP 422
Этот этап выполняется, только когда все указанные площадка, контрагент, ответственный пользователь, автомобиль и водитель найдены. В ответ включаются все независимые нарушения этого этапа.
Если у сотрудника вообще нет роли MANAGER, возвращается MANAGER_NOT_MANAGER; MANAGER_NO_SITE_ACCESS применяется, когда роль менеджера есть, но не действует на площадке визита.
Примеры ответов при ошибке
В HTTP 404 и 422 возвращается один ответ с непустым массивом errors[]. Один ненайденный объект или одна ошибка — один элемент; несколько — несколько элементов. Верхнеуровневый код при этом не меняется.
HTTP 404 · НЕ НАЙДЕНЫ ПЛОЩАДКА И КОНТРАГЕНТ
{
"code": "RESOURCE_NOT_FOUND",
"message": "Не найдены записи по переданным идентификаторам.",
"errors": [
{
"field": "site_source_id",
"code": "SITE_NOT_FOUND",
"message": "Площадка с указанным site_source_id не найдена."
},
{
"field": "counterparty_source_id",
"code": "COUNTERPARTY_NOT_FOUND",
"message": "Контрагент с указанным counterparty_source_id не найден."
}
],
"request_id": "req-example-404"
}Примеры HTTP 422
ЭТАП ПАРАМЕТРОВ · НЕ УКАЗАНА ПЛОЩАДКА И НЕВЕРНАЯ ЦЕЛЬ
{
"code": "VALIDATION_ERROR",
"message": "Ошибка проверки данных визита.",
"errors": [
{
"field": "site_source_id",
"code": "REQUIRED",
"message": "Укажите идентификатор площадки."
},
{
"field": "purpose",
"code": "INVALID_PURPOSE",
"message": "Допустимые значения цели визита: LOADING, UNLOADING, SERVICE, OTHER."
}
],
"request_id": "req-example-format"
}Поиск справочников не выполнялся. После исправления параметров запрос нужно отправить заново.
ЭТАП ВОЗМОЖНОСТИ СОЗДАНИЯ · ПЛОЩАДКА ОТКЛЮЧЕНА И ВРЕМЯ ПРОШЛО
{
"code": "VALIDATION_ERROR",
"message": "Ошибка проверки данных визита.",
"errors": [
{
"field": "site_source_id",
"code": "SITE_INACTIVE",
"message": "Площадка отключена."
},
{
"field": "planned_arrival_at",
"code": "ARRIVAL_IN_PAST",
"message": "Плановое время прибытия не может быть в прошлом."
}
],
"request_id": "req-example-rules"
}Все переданные записи найдены. Визит не создан из-за перечисленных ограничений.
Что делать во внешней системе
Проверяйте HTTP-статус и code. Если ответ содержит errors[], обрабатывайте каждый элемент по field и code и показывайте пользователю все errors[].message. Если errors[] отсутствует, показывайте общий message.
| Ответ | Что делать |
|---|---|
| 400 / 415 | Исправьте JSON или заголовок Content-Type. |
| 401 / 403 | Проверьте токен, активность интеграции и компании. |
| 422 | Исправьте указанные данные или устраните ограничения в Заездо. Повторите запрос с тем же external_id. |
| 404 | Передайте отсутствующие справочники соответствующими PUT-методами. Для пользователя проверьте ручное сопоставление source_id. Затем повторите запрос с тем же external_id. |
| 409 | Визит уже создан с другими исходными данными. Не меняйте external_id только ради обхода ошибки: это может создать лишний визит. |
| 429 | Выдержите паузу из заголовка Retry-After и повторите запрос без изменения external_id и данных. |
| 500 / 503 или обрыв связи | Результат записи может быть неизвестен. После паузы повторите исходный запрос с тем же external_id и теми же данными. При повторяющемся сбое передайте request_id поддержке. |
Пример использования для 1С#
Задача: передать из 1С заявку на разгрузку на складе "WH-SEVER" на 3 ноября 2026 года, 10:30. У контрагента "CP-0042" ответственным назначен менеджер "AfoninGA". Идентификатор заявки — "ТД00-000015".
Шаг 1. Подготовьте доступ и данные
Получите API-токен в настройках интеграции Заездо. Во всех запросах ниже замените ВАШ_API_ТОКЕН его значением. Запросы отправляются по HTTPS на app.zaezdo.pro.
До создания визита передайте справочники отдельными методами. Для примера используются следующие идентификаторы:
| Справочник и идентификатор | Подготовительный запрос |
|---|---|
| Площадка "WH-SEVER" | PUT /api/v1/sites/WH-SEVER |
| Контрагент "CP-0042" | PUT /api/v1/counterparties/CP-0042 |
| Автомобиль "VEH-0085" | PUT /api/v1/vehicles/VEH-0085 |
| Водитель "DRV-0017" | PUT /api/v1/drivers/DRV-0017 |
В теле каждого PUT-запроса передаются данные соответствующего справочника. Дождитесь успешного ответа 201 или 200. Если автомобиль или водитель пока неизвестен, пропустите их подготовку и не включайте их идентификаторы в запрос визита.
В карточке нужного пользователя Заездо вручную укажите "AfoninGA" в поле «Идентификатор для синхронизации с 1С». Пользователь должен быть активен, иметь действующую учётную запись и роль «Менеджер» на площадке "WH-SEVER".
В 1С закрепите external_id = "ТД00-000015" за этой заявкой до отправки визита. При повторной отправке той же заявки идентификатор не меняйте.
Шаг 2. Проверьте ответственного
GET /api/v1/users/AfoninGA?site_source_id=WH-SEVER HTTP/1.1
Host: app.zaezdo.pro
Authorization: Bearer ВАШ_API_ТОКЕН
Accept: application/jsonТело запроса не передаётся. В ответе HTTP 200 проверьте поле can_be_responsible_for_site.allowed. Для продолжения его значение должно быть true.
Шаг 3. Отправьте запрос создания визита
Сформируйте JSON из данных заявки 1С. Дата передаётся в формате ГГГГ-ММ-ДД ЧЧ:ММ.
POST /api/v1/visits HTTP/1.1
Host: app.zaezdo.pro
Authorization: Bearer ВАШ_API_ТОКЕН
Content-Type: application/json
{
"external_id": "ТД00-000015",
"site_source_id": "WH-SEVER",
"planned_arrival_at": "2026-11-03 10:30",
"purpose": "UNLOADING",
"counterparty_source_id": "CP-0042",
"responsible_user_source_id": "AfoninGA",
"vehicle_source_id": "VEH-0085",
"driver_source_id": "DRV-0017",
"basis": "Поставка по заявке №123"
}Шаг 4. Сохраните результат в 1С
УСПЕШНОЕ СОЗДАНИЕ · HTTP 201 CREATED
{
"id": "VST-EXAMPLE001",
"external_id": "ТД00-000015",
"created": true,
"status": "PLANNED",
"admission_status": "UNDEFINED"
}Найдите в 1С заявку по external_id = "ТД00-000015". При необходимости сохраните для неё id = "VST-EXAMPLE001" и отметьте успешную передачу. PLANNED означает «Запланирован», UNDEFINED — «Не определён»: визит создан, но допуск на площадку ещё не разрешён. Дальнейшее управление допуском предполагается на стороне Заездо.
Если запрос не завершился успешно
Если users вернул allowed: false, устраните причину из reason до отправки визита. При ошибке POST обработайте все элементы errors[] согласно блоку «Что делать во внешней системе» на этой странице; не отмечайте заявку как успешно переданную.
Если ответ POST потерян, повторите тот же запрос с тем же external_id и теми же данными. Ответ 200 с created: false означает, что визит уже создан: сохраните возвращённый id без создания новой заявки.