Отрасль: CRM и продажи. Актуально на 2026-10-24.
REST API CRM-системы amoCRM: сделки, контакты, компании, задачи, воронки, примечания, списки, пользователи, вебхуки и другие сущности аккаунта. Запросы выполняются к поддомену конкретного аккаунта. Сделки и контакты создаются и изменяются пакетами — тело запроса всегда массив объектов.
Одним запросом создать сделку, контакт и компанию из формы на сайте. Если в аккаунте включён контроль дублей, amoCRM сам склеит повторную заявку.
curl -X POST "https://<поддомен>.amocrm.ru/api/v4/leads/complex" \
-H "Authorization: Bearer $AMO_TOKEN" \
-H 'Content-Type: application/json' \
-d '[{
"name": "Заявка с сайта: кухня на заказ",
"price": 150000,
"_embedded": {
"contacts": [{
"first_name": "Екатерина",
"custom_fields_values": [
{"field_code": "PHONE", "values": [{"value": "+79990001122", "enum_code": "WORK"}]},
{"field_code": "EMAIL", "values": [{"value": "kate@example.ru", "enum_code": "WORK"}]}
]
}]
},
"request_id": "form-1042"
}]'
Для интеграции, которую ставят другие аккаунты: обменять код на токены и вовремя их обновлять.
# Обмен кода на токены
curl -X POST "https://<поддомен>.amocrm.ru/oauth2/access_token" \
-H 'Content-Type: application/json' \
-d '{
"client_id": "<ID интеграции>",
"client_secret": "<секрет>",
"grant_type": "authorization_code",
"code": "<код из redirect>",
"redirect_uri": "https://example.ru/amo/callback"
}'
# Обновление (refresh_token после этого недействителен — сохрани новый)
curl -X POST "https://<поддомен>.amocrm.ru/oauth2/access_token" \
-H 'Content-Type: application/json' \
-d '{"client_id": "<ID интеграции>", "client_secret": "<секрет>", "grant_type": "refresh_token", "refresh_token": "<refresh_token>", "redirect_uri": "https://example.ru/amo/callback"}'
Перед созданием сделки проверить, есть ли клиент в базе, и привязать сделку к нему.
# Поиск по телефону
curl -G "https://<поддомен>.amocrm.ru/api/v4/contacts" \
-H "Authorization: Bearer $AMO_TOKEN" \
--data-urlencode 'query=+79990001122'
# Сделка с привязкой к контакту
curl -X POST "https://<поддомен>.amocrm.ru/api/v4/leads" \
-H "Authorization: Bearer $AMO_TOKEN" \
-H 'Content-Type: application/json' \
-d '[{"name": "Повторный заказ", "price": 9900, "_embedded": {"contacts": [{"id": 19663157}]}}]'
Забрать сделки в отчёт или учётную систему с контактами.
curl -G "https://<поддомен>.amocrm.ru/api/v4/leads" \
-H "Authorization: Bearer $AMO_TOKEN" \
-d 'filter[statuses][0][pipeline_id]=3383152' \
-d 'filter[statuses][0][status_id]=142' \
-d 'with=contacts' \
-d 'limit=250' \
-d 'page=1'
Обновить сделку из своей системы: оплата прошла — «Успешно реализовано», клиент отказался — «Закрыто» с причиной.
curl -X PATCH "https://<поддомен>.amocrm.ru/api/v4/leads" \
-H "Authorization: Bearer $AMO_TOKEN" \
-H 'Content-Type: application/json' \
-d '[
{"id": 54886, "status_id": 142, "price": 46333, "tags_to_add": [{"name": "Оплачено"}]},
{"id": 54887, "status_id": 143, "loss_reason_id": 7323}
]'
https://{subdomain}.amocrm.ru/api/v4/https://www.amocrm.ru/oauthТип: OAuth 2.0
Два способа:
https://www.amocrm.ru/oauth?client_id={Integration ID}&state={state}&mode={popup или post_message}, интеграция получает код (живёт 20 минут) и обменивает его на токены запросом POST /oauth2/access_token к поддомену аккаунта. Refresh token можно использовать только один раз; без использования он истекает через 3 месяца.Токен передаётся в заголовке Authorization: Bearer {access token}.
Пример запроса токена:
Пример ответа:
{
"client_id": "xxxx",
"client_secret": "xxxx",
"grant_type": "authorization_code",
"code": "xxxxxxx",
"redirect_uri": "https://test.test"
}
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
client_id |
body | string | да | ID интеграции |
client_secret |
body | string | да | Секрет интеграции (для refresh_token — необязателен) |
grant_type |
body | string | да | authorization_code или refresh_token |
code |
body | string | нет | Код авторизации (для authorization_code) |
refresh_token |
body | string | нет | Refresh token (для refresh_token) |
redirect_uri |
body | string | да | Redirect URI интеграции |
Пример ответа (сокращён):
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
with |
query | string | нет | Доп. данные через запятую: catalog_elements, is_price_modified_by_robot, loss_reason, contacts, only_deleted, source_id, source |
page |
query | int | нет | Номер страницы |
limit |
query | int | нет | Записей на страницу, максимум 250 |
query |
query | string | нет | Поиск по заполненным полям сделки |
filter |
query | object | нет | Фильтр |
order |
query | object | нет | Сортировка по created_at, updated_at или id: asc/desc, например order[updated_at]=asc |
Пример запроса:
{
"_page": 2,
"_links": {
"self": {
"href": "https://example.amocrm.ru/api/v4/leads?limit=2&page=2"
},
"next": {
"href": "https://example.amocrm.ru/api/v4/leads?limit=2&page=3"
}
},
"_embedded": {
"leads": [
{
"id": 19619,
"name": "Сделка для примера",
"price": 46333,
"status_id": 142,
"pipeline_id": 1300,
"is_deleted": false,
"account_id": 5135160
}
]
}
}
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | int | да | ID сделки |
with |
query | string | нет | Те же значения, что у списка |
Тело — массив сделок; обязательных полей нет.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
name |
body | string | нет | Название сделки |
price |
body | int | нет | Бюджет |
status_id |
body | int | нет | Этап; по умолчанию первый этап главной воронки |
pipeline_id |
body | int | нет | Воронка |
created_by |
body | int | нет | Создатель; 0 — робот |
updated_by |
body | int | нет | Изменивший; 0 — робот |
closed_at |
body | int | нет | Дата закрытия (Unix Timestamp) |
created_at |
body | int | нет | Дата создания (Unix Timestamp) |
updated_at |
body | int | нет | Дата изменения (Unix Timestamp) |
loss_reason_id |
body | int | нет | Причина отказа |
responsible_user_id |
body | int | нет | Ответственный |
custom_fields_values |
body | array | нет | Значения дополнительных полей |
tags_to_add |
body | array | нет | Теги для добавления: id или name |
_embedded[tags] |
body | array | нет | Привязываемые теги |
_embedded[contacts][0][id] |
body | int | нет | Привязываемый контакт |
_embedded[contacts][0][is_main] |
body | string | нет | Главный контакт |
_embedded[companies][0][id] |
body | int | нет | Привязываемая компания |
_embedded[source][external_id] |
body | string | нет | Внешний ID источника |
_embedded[source][type] |
body | string | нет | Тип источника; для интеграций — widget |
Пример запроса:
[
{
"name": "Сделка для примера 1",
"created_by": 0,
"price": 20000,
"custom_fields_values": [
{
"field_id": 294471,
"values": [
{
"value": "Наш первый клиент"
}
]
}
],
"tags_to_add": [
{
"name": "Первый тег"
}
]
}
]
Пример ответа:
{
"_links": {
"self": {
"href": "https://example.amocrm.ru/api/v4/leads"
}
},
"_embedded": {
"leads": [
{
"id": 10185151,
"request_id": "0",
"_links": {
"self": {
"href": "https://example.amocrm.ru/api/v4/leads/10185151"
}
}
}
]
}
}
Создаёт сделки сразу с контактом и компанией; при включённом контроле дублей применяет его. На сделку — 1 контакт и 1 компания, до 40 доп. полей на сущность, до 50 сделок в запросе.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
name |
body | string | нет | Название сделки |
price |
body | int | нет | Бюджет |
status_id |
body | int | нет | Этап |
pipeline_id |
body | int | нет | Воронка |
request_id |
body | string | нет | Идентификатор запроса, возвращается в ответе |
_embedded[contacts][0] |
body | object | нет | Существующий контакт (id) или модель нового |
_embedded[companies][0] |
body | object | нет | Существующая компания (id) или модель новой |
_embedded[metadata] |
body | array | нет | Метаданные для создания неразобранного; статус тогда игнорируется |
_embedded[metadata][category] |
body | string | нет | Категория неразобранного: sip или forms |
Пример запроса:
[
{
"name": "Название сделки",
"price": 3422,
"_embedded": {
"contacts": [
{
"first_name": "Екатерина",
"responsible_user_id": 2004184
}
],
"companies": [
{
"name": "ООО Рога и Копыта"
}
]
},
"status_id": 33929752,
"pipeline_id": 3383152,
"request_id": "qweasd"
}
]
Пример ответа:
[
{
"id": 15198335,
"contact_id": 19663157,
"company_id": 19663155,
"request_id": [
"qweasd"
],
"merged": false
}
]
Пакетное изменение; для одной сделки можно отправить модель на /api/v4/leads/{id}.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
body | int | да | ID изменяемой сделки |
name |
body | string | нет | Название |
price |
body | int | нет | Бюджет |
status_id |
body | int | нет | Этап |
pipeline_id |
body | int | нет | Воронка |
closed_at |
body | int | нет | Дата закрытия |
loss_reason_id |
body | int | нет | Причина отказа |
responsible_user_id |
body | int | нет | Ответственный |
custom_fields_values |
body | array | нет | Доп. поля |
tags_to_add |
body | array | нет | Добавить теги |
tags_to_delete |
body | array | нет | Удалить теги |
Пример запроса:
[
{
"id": 54886,
"pipeline_id": 47521,
"status_id": 143,
"closed_at": 1589297221,
"loss_reason_id": 7323,
"updated_by": 0,
"tags_to_add": [
{
"name": "Второй тег"
}
],
"tags_to_delete": [
{
"name": "Первый тег"
}
]
}
]
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
with |
query | string | нет | Доп. связанные сущности через запятую |
page |
query | int | нет | Страница |
limit |
query | int | нет | Записей на страницу, максимум 250 |
query |
query | string | нет | Поиск по заполненным полям |
filter |
query | object | нет | Фильтр |
order |
query | object | нет | Сортировка по updated_at или id: asc/desc |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | int | да | ID контакта |
Тело — массив контактов.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
name |
body | string | нет | Название контакта |
first_name |
body | string | нет | Имя |
last_name |
body | string | нет | Фамилия |
responsible_user_id |
body | int | нет | Ответственный |
created_by |
body | int | нет | Создатель |
custom_fields_values |
body | array | нет | Доп. поля (телефон, email и др.) |
tags_to_add |
body | array | нет | Теги для добавления |
_embedded[tags] |
body | array | нет | Привязанные теги |
request_id |
body | string | нет | Возвращается в ответе без изменений |
Пример запроса:
[
{
"first_name": "Петр",
"last_name": "Смирнов",
"custom_fields_values": [
{
"field_id": 271316,
"values": [
{
"value": "Директор"
}
]
}
]
},
{
"name": "Владимир Смирнов",
"created_by": 47272,
"tags_to_add": [
{
"name": "Тег контакта"
}
]
}
]
Пакетное изменение контактов; в каждом объекте обязателен id.
Content-Type: application/hal+json, ошибки — application/problem+json; в запросах с телом указывайте Content-Type: application/json.204 без тела, а не 404.validation-errors с request_id и списком errors (code, path, detail).402, доступ к данным закрывается через 30 дней.403.| Код | Описание |
|---|---|
204 |
Ничего не найдено (внутренний код 2002) |
400 |
Неверная структура данных или неверные ID доп. полей |
401 |
Не авторизован; коды 110 (неверный логин/пароль), 111 (нужна капча), 112 (пользователь отключён), 101 (аккаунт не существует) |
402 |
Подписка закончилась |
403 |
Аккаунт заблокирован за частые запросы; код 113 — доступ с IP запрещён белым списком |
405 |
HTTP-метод не поддерживается |
422 |
Входящие данные не удалось обработать |
429 |
Превышен лимит запросов в секунду |
504 |
Таймаут — уменьшите количество сущностей в запросе |
POST /api/v4/leads/complex — до 50 сделок в запросе.Если этого недостаточно — официальная документация: https://www.amocrm.ru/developers/content/crm_platform/api-reference JSON: https://mcp-everything.ru/api/integrations/amocrm. MCP: https://mcp-everything.ru/mcp