API Для разработчиков и интеграторов
REST API для управления связями компаний в amoCRM из внешних систем: 1С, сайта, ERP или собственного сервиса. Все операции, доступные во вкладке «Мультикомпании», можно выполнять программно.
01 Возможности
API охватывает полный цикл работы с мультикомпаниями: от поиска и чтения данных до создания компаний и изменения структуры групп.
По названию, ответственному, сделке или контакту. В результатах — роль компании в группе.
GET /companies/searchКарточка компании, состав группы, поля компаний и пользователи аккаунта.
GET /company, /companiesПолучение id сделки или контакта по названию для последующего прикрепления.
GET /leads/search, /contacts/searchПривязка компании к сделке, контакту или к главной компании группы.
POST /company/attachСоздание компании с полями, тегами и ответственным с прикреплением в одном запросе.
POST /company/createОткрепление компании и назначение новой главной компании группы.
POST /company/detach, /company/main02 Авторизация
Доступ к API выполняется по ключу. Ключ выпускает администратор аккаунта amoCRM в настройках виджета; другим пользователям он недоступен.
Под учётной записью администратора перейдите в amoCRM: Настройки → Мультикомпании.
В разделе API нажмите Создать ключ и сохраните его значение.
Каждый запрос должен содержать заголовок X-Auth-Multicompanies-Token.
Ключ привязан к аккаунту amoCRM и определяет, с каким аккаунтом работает API.
Ключ даёт право изменять связи компаний в аккаунте. Храните его так же, как пароль, и не передавайте третьим лицам.
Кнопка История запросов в настройках виджета открывает журнал вызовов API за последние 30 дней.
https://freewidgets.comf5.ru/multicompanies/api/v1curl "https://freewidgets.comf5.ru/multicompanies/api/v1/companies?company_id=17493287" \ -H "X-Auth-Multicompanies-Token: <ключ>"
{
"status": true,
"response": {
"main_id": 17493287,
"linked": [4926915, 29875257]
}
}03 Общие правила
Правила ниже действуют для всех методов API.
name=%D0%9E%D0%9E%D0%9E.Content-Type: application/json. Допускается form-data.entity_type принимает код или число: contacts = 1, leads = 2, companies = 3.page — только целые числа. Значения вида 1.5 и 1e3 отклоняются.Методы поиска (/companies/search, /leads/search, /contacts/search) возвращают результат постранично.
page — номер страницы, от 1 до 100.has_more: true — есть следующая страница, запросите page + 1. Следующая страница может оказаться пустой: amoCRM не сообщает общее число записей.{
"status": true,
"response": ...
}{
"status": false,
"error": {
"message": "Company is already attached",
"code": 422
}
}{
"status": false,
"error": {
"message": {"company_id": ["Поле не является числом"]},
"code": 400
}
}{
"status": true,
"response": {
"items": [...],
"page": 1,
"has_more": true
}
}| Код | Значение |
|---|---|
| 200 | Запрос выполнен успешно |
| 400 | Неверные или отсутствующие параметры, некорректный JSON (Invalid JSON: ...) |
| 401 | Ключ не передан (Api key required) |
| 403 | Неверный ключ (Invalid api key) или виджет отключён (Widget deactivated) |
| 404 | Компания, сделка или контакт не найдены в аккаунте (Company not found: ..., Lead not found: ..., Contact not found: ...) |
| 413 | Размер тела запроса превышает 1 МБ |
| 422 | Операция нарушает правила связей, переданы недопустимые значения полей или amoCRM отклонил данные (amoCRM rejected data) |
| 429 | Превышен лимит запросов. Повторите запрос через время, указанное в заголовке Retry-After |
| 500 | Внутренняя ошибка сервиса (Internal error) |
| 502 | Ошибка на стороне amoCRM. amoCRM authorization failed, reinstall the widget — нарушена авторизация виджета, требуется переустановка. amoCRM request failed — прочие ошибки amoCRM |
04 Модель данных
Группа объединяет главную компанию и прикреплённые к ней дочерние. Иерархия одноуровневая.
main — главная, linked — дочерняя, none — вне группы.{
"main_id": 17493287,
"linked": [4926915, 29875257]
}
// компания вне группы
{"main_id": null, "linked": []}{
"main_id": 17493287,
"linked": [4926915, 29875257],
"companies": [
{
"id": 17493287,
"name": "ООО «Ромашка»",
"role": "main"
},
{"id": 4926915, "name": "ИП Иванов", "role": "linked"},
{"id": 29875257, "name": null, "role": "linked"}
]
}with=names добавляет в ответ названия компаний. Поддерживается методами GET /companies, attach, create, detach, main и выполняет один дополнительный запрос к amoCRM. Значение name: null означает, что компания удалена в amoCRM, но ещё числится в группе.05 Справочник
Выберите метод в списке, чтобы перейти к описанию параметров, примерам запроса и ответа, а также возможным ошибкам.
| Метод | Адрес | Назначение |
|---|---|---|
| GET | /companies/search | Поиск компаний |
| GET | /companies | Состав группы компании |
| GET | /company | Карточка компании |
| GET | /fields | Поля компаний аккаунта |
| GET | /users | Пользователи аккаунта |
| GET | /leads/search | Поиск сделок по названию |
| GET | /contacts/search | Поиск контактов по имени |
| POST | /company/attach | Прикрепление компании |
| POST | /company/create | Создание и прикрепление компании |
| POST | /company/detach | Открепление компании |
| POST | /company/main | Назначение главной компании |
Возвращает компании, соответствующие условиям, с указанием их роли в группе.
| Параметр | Тип | Описание |
|---|---|---|
id | int | Идентификатор компании |
name | string | Часть названия, не менее 3 символов. Регистр не учитывается |
responsible_user_id | int | Ответственный пользователь |
lead_id | int | Компании, прикреплённые к сделке |
contact_id | int | Компании, прикреплённые к контакту |
page | int | Номер страницы. По умолчанию 1 |
page.id или name, поиск выполняется по ним. При поиске по name на одной странице обрабатывается 50 результатов amoCRM.responsible_user_id, lead_id, contact_id — 25 записей на страницу.responsible_user_id, lead_id, contact_id.GET /companies/search?name=ООО&responsible_user_id=2320770
{
"status": true,
"response": {
"items": [
{
"id": 29875257,
"name": "ООО «Ромашка»",
"responsible_user_id": 2320770,
"created_at": 1701094831,
"role": "linked",
"main_id": 17493287
},
{
"id": 29875277,
"name": "ООО «Лютик»",
"responsible_user_id": 2320770,
"created_at": 1701094861,
"role": "none",
"main_id": null
}
],
"page": 1,
"has_more": false
}
}role — роль компании в группе: main, linked или none.main_id — идентификатор главной компании группы.created_at — дата создания в формате Unix time.Возвращает группу, в которую входит указанная компания.
| Параметр | Тип | Описание |
|---|---|---|
company_idобяз. | int | Любая компания группы |
with | string | Значение names добавляет названия компаний |
{
"status": true,
"response": {
"main_id": 17493287,
"linked": [4926915, 29875257]
}
}Возвращает данные компании: поля, теги, связанные сделки и контакты, роль в группе.
| Параметр | Тип | Описание |
|---|---|---|
company_idобяз. | int | Идентификатор компании |
{
"status": true,
"response": {
"id": 29875257,
"name": "ООО «Ромашка»",
"responsible_user_id": 2320770,
"created_at": 1701094831,
"updated_at": 1729500000,
"tags": ["api"],
"custom_fields": [
{
"field_id": 101,
"field_code": "PHONE",
"field_name": "Телефон",
"field_type": "multitext",
"values": [
{
"value": "+70000000000",
"enum_id": 1,
"enum_code": "WORK"
}
]
},
{
"field_id": 205,
"field_code": null,
"field_name": "ИНН",
"field_type": "text",
"values": [{"value": "7700000000"}]
}
],
"leads": [123456, 123457],
"leads_has_more": false,
"contacts": [555],
"contacts_has_more": false,
"group": {"role": "linked", "main_id": 17493287}
}
}custom_fields — в том же формате, который принимает метод create.leads, contacts — первые 50 идентификаторов. *_has_more: true означает, что связей больше.404 Company not found: <id> — компания не найдена.
Возвращает поля карточки компании, доступные в аккаунте. Используйте этот метод, чтобы определить, какие поля можно передать в custom_fields при создании компании.
{
"status": true,
"response": [
{
"id": 101,
"name": "Телефон",
"code": "PHONE",
"type": "multitext",
"is_api_only": false,
"enums": [
{"id": 1, "value": "WORK"},
{"id": 2, "value": "MOB"}
]
},
{
"id": 310,
"name": "Отрасль",
"code": null,
"type": "select",
"is_api_only": false,
"enums": [
{"id": 11, "value": "Производство"},
{"id": 12, "value": "Торговля"}
]
}
]
}enums — варианты значений списка. Идентификатор варианта передаётся в enum_id, текст — в value.Возвращает пользователей аккаунта amoCRM. Идентификатор пользователя передаётся в параметре responsible_user_id.
{
"status": true,
"response": [
{
"id": 2320770,
"name": "Иван Петров",
"email": "ivan@example.com",
"is_active": true,
"is_admin": false
}
]
}Возвращают сделки по названию или контакты по имени. Применяются для получения entity_id перед прикреплением компании.
| Параметр | Тип | Описание |
|---|---|---|
nameобяз. | string | Часть названия сделки или имени контакта, не менее 3 символов |
page | int | Номер страницы. По умолчанию 1 |
{
"id": 123456,
"name": "Поставка оборудования",
"responsible_user_id": 2320770,
"created_at": 1701094831,
"pipeline_id": 7,
"status_id": 142,
"price": 150000
}items, page, has_more). Поля pipeline_id, status_id, price присутствуют только у сделок.Content-Type: application/json. Одновременно для аккаунта выполняется только одна операция изменения.Прикрепляет компанию к сделке, контакту или к главной компании группы.
| Параметр | Тип | Описание |
|---|---|---|
company_idобяз. | int | Прикрепляемая компания |
entity_typeобяз. | string | int | leads, contacts или companies |
entity_idобяз. | int | Сделка, контакт или главная компания |
leads, contacts — компания прикрепляется к сделке или контакту в amoCRM. Ответ: {"status": true, "response": []}.companies — компания company_id становится дочерней для entity_id. Ответ содержит состав группы после изменения.company_id является главной компанией с дочерними, а entity_id не входит ни в одну группу, дочерней становится entity_id.{
"company_id": 29875277,
"entity_type": "companies",
"entity_id": 17493287
}{
"status": true,
"response": {
"main_id": 17493287,
"linked": [4926915, 29875257, 29875277]
}
}Перед прикреплением сервис проверяет наличие записей в amoCRM: для companies — обеих компаний, для leads и contacts — сделки или контакта. При отсутствии записи возвращается 404 Company not found, Lead not found или Contact not found.
| Сообщение | Причина |
|---|---|
Company is already attached | Компания уже прикреплена к этой сделке, контакту или группе |
Same company | company_id и entity_id указывают на одну компанию |
Company is already linked | Компания уже является дочерней в другой группе |
Main company is linked to another company | entity_id является дочерней компанией |
Company is main | Обе компании являются главными в своих группах |
Company not attached | Не удалось сохранить связь |
Создаёт компанию с указанными полями и прикрепляет её к сделке, контакту или главной компании в рамках одного запроса.
| Параметр | Тип | Описание |
|---|---|---|
nameобяз. | string | Название, до 255 символов |
entity_typeобяз. | string | int | Аналогично методу attach |
entity_idобяз. | int | Аналогично методу attach |
responsible_user_id | int | Ответственный пользователь |
tags | string[] | Теги, до 50 |
custom_fields | array | Значения полей, до 100 |
ignore_missing_fields | bool | Пропускать поля, отсутствующие в аккаунте, вместо возврата ошибки. По умолчанию false |
Каждый элемент — объект, в котором указывается ровно один идентификатор поля и хотя бы одно значение.
| Идентификатор поля | |
|---|---|
field_id | Идентификатор поля |
field_code | Код поля: PHONE, EMAIL, WEB, ADDRESS. Регистр не учитывается |
field_name | Название поля в amoCRM. Регистр не учитывается |
| Значение | |
|---|---|
value | Одно значение: текст, число, дата (Unix time или строка), true/false для флага |
values | Несколько значений: для мультисписка; для телефона и e-mail — [{"value": "...", "enum_code": "WORK"}] |
enum_id | Идентификатор варианта списка или массив идентификаторов для мультисписка |
enum_code | Тип телефона или e-mail для всех значений: WORK, MOB, HOME, PRIV, OTHER |
enum_id можно передать текст варианта в value. Список полей и вариантов возвращает метод GET /fields.{
"name": "ООО «Ромашка»",
"entity_type": "leads",
"entity_id": 123456,
"responsible_user_id": 2320770,
"tags": ["api"],
"custom_fields": [
{
"field_code": "PHONE",
"values": [
{"value": "+70000000000", "enum_code": "WORK"}
]
},
{
"field_code": "EMAIL",
"value": "info@example.com",
"enum_code": "WORK"
},
{"field_name": "ИНН", "value": "7700000000"},
{"field_name": "Отрасль", "value": "Производство"}
],
"ignore_missing_fields": true
}{
"status": true,
"response": {
"company_id": 31000001,
"skipped_fields": [
{"index": 2, "field": "ИНН", "reason": "not_found"}
]
}
}skipped_fields — поля, отсутствующие в аккаунте; возвращается только при ignore_missing_fields: true. index — позиция элемента в custom_fields.entity_type: companies ответ дополнительно содержит состав группы (main_id, linked).До обращения к amoCRM запрос проверяется по правилам ниже. При нарушении возвращается 400; ключ ошибки указывает на элемент, например custom_fields.2.value.
custom_fields содержит ровно один из ключей field_id, field_code, field_name и хотя бы один из value, values, enum_id. Другие ключи не допускаются.value — строка до 10 000 символов, число или true/false.values — массив из 1–50 значений или объектов {value, enum_code}.enum_id — идентификатор или массив до 50 идентификаторов.ignore_missing_fields — true/false или 1/0.{
"status": false,
"error": {
"message": {
"custom_fields.0": [
"Укажите одно из: field_id, field_code, field_name"
],
"tags.1": ["Тег должен быть непустой строкой"]
},
"code": 400
}
}| Код | Сообщение | Причина |
|---|---|---|
| 422 | Custom field not found: ... | Поле отсутствует в аккаунте, ignore_missing_fields не включён |
| 422 | Invalid value for field ... | Значение не соответствует типу поля: нет такого варианта списка, не число и т. п. |
| 422 | Value required for field ... | Для поля не передано значение |
| 404 | Company not found: <id> | При entity_type: companies главная компания не найдена. Проверка выполняется до создания — компания не создаётся |
| 404/422/429/502 | ... (company <id> created) | Компания создана, но прикрепить её не удалось. Идентификатор созданной компании указан в сообщении |
| 502 | Company not created | amoCRM не создал компанию |
Исключает дочернюю компанию из группы либо открепляет компанию от сделки или контакта.
| Параметр | Тип | Описание |
|---|---|---|
company_idобяз. | int | Идентификатор компании |
entity_type | string | int | companies (по умолчанию), leads или contacts |
entity_id | int | Сделка или контакт. Обязателен для leads и contacts |
entity_type или с companies — дочерняя компания выходит из группы. Ответ: {"main_id": null, "linked": []}.leads, contacts — компания открепляется от сделки или контакта. Ответ: {"status": true, "response": []}.| Код | Сообщение | Причина |
|---|---|---|
| 422 | Company is not in group | Компания не входит в группу |
| 422 | Company is main, make another company main first | Главную компанию открепить нельзя. Сначала назначьте главной другую компанию |
| 422 | Company is not attached | Компания не прикреплена к указанной сделке или контакту |
| 422 | Company not detached | Не удалось открепить компанию |
| 404 | Lead / Contact not found | Сделка или контакт не найдены |
Назначает дочернюю компанию главной в её группе. Прежняя главная компания становится дочерней.
| Параметр | Тип | Описание |
|---|---|---|
company_idобяз. | int | Дочерняя компания |
{
"status": true,
"response": {
"main_id": 29875257,
"linked": [4926915, 17493287]
}
}| Код | Сообщение | Причина |
|---|---|---|
| 422 | Company is already main | Компания уже является главной |
| 422 | Company is not in group | Компания не входит в группу |
| 422 | Main company has not changed | Не удалось сменить главную компанию |
06 Ограничения
При превышении лимита API возвращает код 429 и заголовок Retry-After — количество секунд до повторного запроса.
Не более 3 вызовов в секунду на аккаунт.
Методы attach, create, detach, main выполняются по одному. Параллельный вызов получит 429 Another change for this account is in progress.
Общий для всех интеграций аккаунта. Не отправляйте запросы параллельно. Если лимит amoCRM исчерпан — 429 amoCRM rate limit, retry later.
Столько запросов в amoCRM выполняет один вызов API. Максимум — поиск по lead_id + contact_id и прикрепление к сделке или контакту; with=names добавляет один запрос. Поля и пользователи кэшируются.
Максимальный размер тела запроса. Вложенность JSON — не более 8 уровней.
После 20 запросов с неверным ключом IP-адрес блокируется до окончания 10-минутного интервала.
Данный виджет доступен бесплатно в рамках "Бонусной программы"