Создание или обновление контрагента
Передача контрагента из 1С в Заездо. Метод создаёт запись по новому source_id или обновляет реквизиты ранее переданной записи. Контактные лица, телефоны и email этим методом не передаются.
https://app.zaezdo.pro/api/v1/counterparties/{source_id}На этой странице
Параметры запроса#
Отправьте полный набор реквизитов записи. По новому source_id метод создаст запись; по существующему — обновит её. В каждом запросе передавайте API-токен в заголовке Authorization.
Адрес: https://app.zaezdo.pro/api/v1/counterparties/{source_id}. Параметр source_id обязателен, передаётся в URL; ограничения указаны в таблице ниже. Query-параметры не используются.
Тело запроса — объект JSON. Параметры ниже передаются как при создании, так и при обновлении.
| Параметр | Обяз. | Описание |
|---|---|---|
| source_id | Да | source_id — непустая строка длиной от 1 до 80 символов. Регистр символов имеет значение. Не допускаются управляющие символы, пробелы по краям и разделители пути / и \. Кириллица допустима; в URL её нужно кодировать в UTF-8. Идентификатор передаётся в пути URL; повторять его в JSON не следует. |
| name | Да | Наименование. Строка от 1 до 300 символов. |
| inn | Нет* | ИНН. Строка из 10 или 12 цифр с корректным контрольным числом. |
| kpp | Нет* | КПП. Строка из 9 цифр; требуется при ИНН из 10 цифр. |
| comment | Нет | Комментарий. Строка; ограничение длины на уровне поля не установлено. |
* ИНН и КПП можно не передавать вместе. При ИНН из 10 цифр КПП обязателен. При ИНН из 12 цифр КПП должен быть пустым. КПП без ИНН не допускается.
Пример запроса#
PUT /api/v1/counterparties/CP-0042 HTTP/1.1
Host: app.zaezdo.pro
Authorization: Bearer ВАШ_API_ТОКЕН
Content-Type: application/json
{
"name": "ООО «Пример Логистика»",
"inn": "7701234560",
"kpp": "770101001",
"comment": "Поставщик"
}{
"name": "ООО «Пример Логистика»",
"inn": "7701234560",
"kpp": "770101001",
"comment": "Поставщик"
}curl --request PUT \
--url "https://app.zaezdo.pro/api/v1/counterparties/CP-0042" \
--header "Authorization: Bearer ВАШ_API_ТОКЕН" \
--header "Content-Type: application/json" \
--data '{
"name": "ООО «Пример Логистика»",
"inn": "7701234560",
"kpp": "770101001",
"comment": "Поставщик"
}'Успешные ответы#
{
"id": "CP-EXAMPLE001",
"source_id": "CP-0042",
"created": true,
"is_active": true
}{
"id": "CP-EXAMPLE001",
"source_id": "CP-0042",
"created": false,
"is_active": true
}Для существующего source_id возвращается HTTP 200 с тем же набором полей и created: false. Значение id сохраняется, остальные поля отражают результат операции. Если данные не изменились, ответ также 200 и created: false.
| Поле ответа | Значение |
|---|---|
| id | Идентификатор записи в Заездо. Для последующих PUT и создания визита сохранять его не обязательно. |
source_id | Идентификатор из URL. Используйте его в соответствующем поле запроса visits. |
| created | true — запись создана; false — обработана существующая запись. |
is_active | true — запись активна; false — отключена и не может использоваться для нового визита. |
Создание, обновление и повторы#
PUT передаёт полное состояние полей, перечисленных в описании метода. При повторе с тем же source_id данные этих полей заменяются значениями из запроса. Поэтому в каждом запросе передавайте все значения, которые нужно сохранить.
| Переданное значение | Результат |
|---|---|
| Обязательное поле | Передаётся и при создании, и при обновлении. Пустое значение недопустимо. |
Необязательное поле отсутствует, null или "" | При создании остаётся пустым; при обновлении прежнее значение очищается. |
| Поле не предусмотрено методом | Ошибка 422 UNKNOWN_FIELD. Запись не сохраняется. |
Для обычных строк убираются пробелы по краям; пустая строка после этого считается незаполненным значением. Для source_id пробелы не исправляются автоматически. Необязательные поля принимают строку или null; у обязательных полей тип — string.
Активность и повторные запросы
Новая запись активна. При обновлении сохраняется её текущая активность: отключённая запись автоматически не включается. Поле is_active возвращается в ответе, но не принимается для изменения через PUT. Настройки, не входящие в метод, остаются без изменений.
Первая запись возвращает 201 и created: true. Обновление или повтор — 200 и created: false. Повтор одинакового запроса не создаёт новую запись.
Правила для этого справочника
Обновляются только name, inn, kpp и comment. Активность и контактные лица не изменяются.
Для совпадений проверяется пара ИНН + КПП у организаций либо ИНН из 12 цифр у ИП. Если эти реквизиты принадлежат другой записи, возвращается 409: автоматического объединения нет.
При отсутствии ИНН поиск по наименованию не выполняется. Чтобы не создать дубликаты, используйте неизменный source_id; одинаковые названия сами по себе не доказывают совпадение контрагентов.
Идентификатор ответственного менеджера в этом методе не передаётся. При создании визита 1С отдельно указывает responsible_user_source_id своего ответственного за контрагента.
Проверка ИНН и КПП
| Переданные реквизиты | Условие сохранения |
|---|---|
| ИНН и КПП не заполнены | Допускается: для создания достаточно наименования. |
| ИНН организации: 10 цифр | Контрольное число ИНН корректно; КПП заполнен и содержит 9 цифр. |
| ИНН ИП: 12 цифр | Контрольные числа ИНН корректны; КПП не заполнен. |
| КПП заполнен, ИНН пуст | Ошибка INN_REQUIRED_FOR_KPP. |
Если формат ИНН некорректен, проверка контрольного числа не выполняется. Условия КПП, зависящие от длины ИНН, проверяются после определения его типа. Для одного КПП возвращается одна причина: отсутствие, неверный формат либо запрет для ИП.
Порядок проверки запроса#
| Этап | Результат |
|---|---|
| 1. Авторизация | 401 при проблеме с токеном; 403 при отключённой компании. |
2. Чтение JSON | 415 при неверном Content-Type; 400 при нечитаемом JSON. |
| 3. Проверка параметров | 422: в errors[] возвращаются все независимые ошибки обязательности, типов, длины и реквизитов. |
| 4. Поиск и проверка конфликтов | Запись ищется по source_id. Проверяются совпадения, описанные в правилах метода. При конфликте — 409; изменений нет. |
| 5. Сохранение | Если запись не найдена — создать и вернуть 201. Если найдена — обновить и вернуть 200. При отклонении запроса данные не меняются. |
После ошибки следующий этап не выполняется. Ошибки параметров 422 и конфликты 409 не смешиваются. Отсутствие записи по source_id не даёт 404: это штатный случай создания.
Коды и описания ошибок#
| Поле ответа | Значение |
|---|---|
| code | Общая категория ошибки. |
| message | Общее описание ошибки. |
| errors[] | Конкретные ошибки: field — параметр запроса; code — код причины; message — точный текст. |
request_id | Идентификатор запроса для обращения в поддержку. |
При HTTP 409 и 422 конкретные причины возвращаются в errors[]. Ниже приведены все коды этого метода и точные тексты сообщений.
| HTTP · код / поле | Точный текст сообщения |
|---|---|
| 400HTTPINVALID_JSON | Не удалось прочитать JSON тела запроса. |
| 401HTTPUNAUTHORIZED | Требуется действующий Bearer-токен интеграции. |
| 403HTTPTENANT_INACTIVE | Компания отключена в Заездо. |
| 409HTTPRESOURCE_CONFLICT | Невозможно сохранить запись из-за конфликта данных. |
| 415HTTPUNSUPPORTED_MEDIA_TYPE | Передайте тело запроса с Content-Type: application/json. |
| 422HTTPVALIDATION_ERROR | Ошибка проверки данных справочника. |
| 429HTTPRATE_LIMITED | Превышено допустимое количество запросов. Повторите запрос позже. |
| 500HTTPINTERNAL_ERROR | Внутренняя ошибка Заездо. |
| 503HTTPSERVICE_UNAVAILABLE | Сервис Заездо временно недоступен. |
| 422ПолеBODY_MUST_BE_OBJECT$ | Тело запроса должно быть объектом JSON. |
| 422ПолеINVALID_SOURCE_IDsource_id | Некорректный идентификатор записи во внешней системе. |
| 422ПолеUNKNOWN_FIELDИмя лишнего поля | Параметр не поддерживается этим методом. |
| 422ПолеINVALID_COMMENTcomment | Комментарий должен быть строкой или null. |
| 422ПолеREQUIREDname | Укажите наименование контрагента. |
| 422ПолеINVALID_NAMEname | Наименование контрагента должно быть строкой длиной от 1 до 300 символов. |
| 422ПолеINVALID_INNinn | ИНН должен содержать 10 цифр для организации или 12 цифр для ИП. |
| 422ПолеINVALID_INN_CHECKSUMinn | Некорректный ИНН: не совпадает контрольное число. |
| 422ПолеINN_REQUIRED_FOR_KPPinn | Укажите ИНН, если передан КПП. |
| 422ПолеINVALID_KPPkpp | КПП должен содержать 9 цифр. |
| 422ПолеKPP_REQUIREDkpp | Требуется указать КПП. |
| 422ПолеKPP_NOT_ALLOWEDkpp | Для ИП КПП не указывается. |
| 409ПолеCOUNTERPARTY_DETAILS_CONFLICTinn | Контрагент с указанными ИНН и КПП либо ИНН ИП уже существует, но не сопоставлен с переданным source_id. |
Для BODY_MUST_BE_OBJECT поле field содержит "$" — весь JSON. Для UNKNOWN_FIELD в field возвращается фактически переданное лишнее имя, например is_active.
REQUIRED возвращается, когда обязательного поля нет либо оно равно null или пустой строке. Если поле заполнено, но имеет неверный тип или длину, возвращается соответствующий код INVALID_… . Две ошибки об одном и том же нарушении не дублируются.
Как разрешить конфликт 409
Если другая запись имеет те же реквизиты, по которым проверяются совпадения, метод не объединяет записи автоматически и не меняет их source_id. Критерии совпадения указаны для каждого справочника. Отключённые записи участвуют в проверке конфликтов.
Верхнеуровневый код — RESOURCE_CONFLICT; сообщение — «Невозможно сохранить запись из-за конфликта данных.». В errors[] возвращается:
ПРИМЕР ОТВЕТА · HTTP 409
{
"code": "RESOURCE_CONFLICT",
"message": "Невозможно сохранить запись из-за конфликта данных.",
"errors": [
{
"field": "inn",
"code": "COUNTERPARTY_DETAILS_CONFLICT",
"message": "Контрагент с указанными ИНН и КПП либо ИНН ИП уже существует, но не сопоставлен с переданным source_id."
}
],
"request_id": "req-counterparties-conflict"
}- Проверьте, не существует ли соответствующая запись в справочнике Заездо.
- Если запись существует и соответствует объекту внешней системы, укажите в её карточке правильный «Идентификатор для синхронизации с 1С».
- Повторите исходный
PUT-запрос с тем жеsource_id.
Пример ошибки параметров
HTTP 422 · НЕСКОЛЬКО ОШИБОК В ОДНОМ ОТВЕТЕ
{
"code": "VALIDATION_ERROR",
"message": "Ошибка проверки данных справочника.",
"errors": [
{
"field": "name",
"code": "REQUIRED",
"message": "Укажите наименование контрагента."
},
{
"field": "kpp",
"code": "KPP_REQUIRED",
"message": "Требуется указать КПП."
}
],
"request_id": "req-counterparties-validation"
}Покажите все errors[].message, исправьте перечисленные поля и повторите PUT с тем же source_id. При 409 сначала разрешите конфликт; при 500, 503 или потере ответа повторяйте прежний запрос после паузы.
Повтор после временной ошибки
При 429 учитывайте Retry-After. При 500, 503 или потере ответа повторите тот же PUT после паузы. Если вместо JSON получен ответ сетевого шлюза, ориентируйтесь на HTTP-статус; request_id в таком ответе может отсутствовать.
Пример использования для 1С#
Перед передачей заявки выполните PUT /api/v1/counterparties/CP-0042 с реквизитами контрагента. После успешного ответа и is_active: true используйте "CP-0042" в визите. При 409 сначала разрешите сопоставление, не создавая новый внешний идентификатор.
ФРАГМЕНТ ЗАПРОСА POST /api/v1/visits
{
"counterparty_source_id": "CP-0042"
}При изменении наименования или реквизитов в 1С отправьте полный набор полей на тот же URL. Чтобы удалить комментарий, передайте comment: "". Если нужно сохранить ИНН и КПП, их необходимо повторить в запросе.