CRM deals

Создать сделку

customer_id — UUID контрагента из справочника core, а не юрлицо продавца. Отдельного поля юрлица продавца у этой команды нет. Валюта суммы проверяется по справочнику валют ERP. Читает Idempotency-Key — повтор того же запроса с тем же ключом отдаёт созданную сделку, а не вторую.

post/api/v1/crm/deals

Request

  • Base URL: https://erp.akeda.ru
  • URL: https://erp.akeda.ru/api/v1/crm/deals
  • Auth: one of:
    • HTTP bearer
    • API key in header X-Api-Key
    • OAuth 2 (authorization code, authorization URL https://erp.akeda.ru/oauth2/authorize, token URL https://erp.akeda.ru/oauth2/token, scopes: akeda:delegate)

Headers

X-Tenantstring required

Slug выбранного кабинета; кабинет не является юрлицом

Idempotency-Keystring

Ключ одной логической попытки команды. Единственная форма идемпотентности на уровне HTTP; читают его только операции, у которых этот параметр объявлен.

Повтор ТОГО ЖЕ запроса (метод, адрес с параметрами, тело) с тем же ключом не выполняет команду второй раз, а отдаёт первый успешный ответ с заголовком Idempotent-Replay: true. Тот же ключ с другим запросом — отказ 422 idempotency.key_mismatch, а не чужой ответ. Пока первая попытка ещё выполняется, повтор получает 409 idempotency.in_progress и Retry-After: он не ждёт и не выполняется второй раз.

Ключ принадлежит предъявителю в кабинете: человеку, кабинетному API-ключу или установке приложения. Одинаковый ключ у соседа — другая попытка.

Отказ 4xx ключ ОСВОБОЖДАЕТ: запрос отклонён до работы, в кабинете не изменилось ничего, и исправленный запрос с тем же ключом выполняется. Отказ 5xx ключ ЗАПИРАЕТ: записалось или нет — неизвестно, коммит мог случиться, а ответ до вас не доехать. Повтор с тем же ключом получает тот же статус и тот же машинный код, а команда второй раз не выполняется. Чтобы попробовать снова, прочитайте отдельным запросом, появился ли результат, и возьмите НОВЫЙ ключ.

И ответ, и запомненный отказ живут сутки; после этого тот же ключ — новая попытка, и команда выполняется заново. Ответы, несущие секрет (выдача токена, аренда секрета настройки), заголовок не читают: секрет отдаётся ровно один раз. Хранилище недоступно — 503 idempotency.unavailable, команда без защиты не выполняется; этот отказ приходит ДО заявки на ключ и потому ключ не тратит.

Для естественного ключа интеграции годится любая строка вида crm:order:123:create; UUID не обязателен.

Request body

pipeline_idstring uuid required
stage_idstring uuid required
titlestring required
amountstring

Сумма десятичной строкой: «19990.50». Разрядность берёт валюта (MONEY-ROUNDING.md)

currencystring

Обязателен при ненулевой сумме

sourcestring
descriptionstring
first_messagestring

Слова клиента из обращения (форма сайта, API): видны в ленте под «Сделка создана»

utm_sourcestring

Рекламная метка: источник перехода

utm_mediumstring

Рекламная метка: тип трафика

utm_campaignstring

Рекламная метка: кампания

utm_termstring

Рекламная метка: ключевое слово или аудитория

utm_contentstring

Рекламная метка: объявление или вариант креатива

landing_pagestring

Страница, на которую человек пришёл первой

referrerstring

Страница, с которой человек перешёл на сайт

probabilityinteger
expected_close_atstring date-time nullable
owner_idinteger nullable
customer_idstring uuid nullable

Прежний вход: контрагент справочника ERP. Сервер находит или заводит по нему клиента CRM и записывает crm_customer_id; в ответе поля нет.

crm_customer_idstring uuid nullable
next_actionstring
next_action_atstring date-time nullable
customobject nullable

Дополнительные поля кабинета: состав задаёт «Настройки → Поля»

Response

Созданная сделка

idstring uuid required
pipeline_idstring uuid required
stage_idstring uuid required
titlestring required
amountstring required

Сумма десятичной строкой: «19990.50». Разрядность берёт валюта (MONEY-ROUNDING.md)

currencystring required

Код валюты из справочника ERP

amount_manualboolean

Сумма набрана руками, а не сложена из состава сделки; сохранение состава снимает признак

prices_include_vatboolean

Цены строк состава включают НДС

sourcestring required

Канал обращения; manual для ручного заведения

probabilityinteger required
expected_close_atstring date-time
owner_idinteger
crm_customer_idstring uuid
next_actionstring required
next_action_atstring date-time
archived_atstring date-time
closed_atstring date-time
loss_reason_idstring uuid
descriptionstring
first_messagestring
utm_sourcestring
utm_mediumstring
utm_campaignstring
utm_termstring
utm_contentstring
landing_pagestring
referrerstring
customobject nullable

Дополнительные поля кабинета: состав задаёт «Настройки → Поля»

created_atstring date-time required
updated_atstring date-time required

Changes

No recorded changes to this operation across all 1 revision of this API.