---
title: "Создать клиента CRM"
method: POST
path: "/api/v1/crm/customers"
tags: ["CRM customers"]
---

# Создать клиента CRM

`POST /api/v1/crm/customers`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/crm/customers`
- 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`)

Создаёт карточку клиента CRM. Живая карточка того же вида с теми же ИНН и КПП уже есть — отказ 409 crm.customer_inn_taken без обхода. Совпал телефон или почта с живой карточкой — отказ 409 crm.customer_possible_duplicate со списком похожих; повтор с confirm_duplicate: true создаёт карточку. Читает Idempotency-Key — повтор того же запроса с тем же ключом отдаёт созданную карточку, а не вторую.

## Headers

- `X-Tenant` string, required
- `Idempotency-Key` string

## Request body

- CRMCustomerInput
  - `kind` 'person' | 'company' | 'sole_prop'
  - `name` string, required
  - `legal_name` string
  - `inn` string: ИНН: 10 цифр у организации, 12 у предпринимателя, с верной контрольной цифрой
  - `kpp` string: КПП: девять знаков, только вместе с ИНН из 10 цифр
  - `phone` string: Телефон; несколько номеров можно перечислить через запятую. Не читается, если передан channels
  - `email` string: Почта; не читается, если передан channels
  - `messengers` object, nullable: Мессенджеры объектом «сеть → ник»; не читаются, если передан channels
  - `channels` CRMCustomerChannelInput[], nullable: Полный список каналов связи; главнее полей phone, email и messengers
    - `kind` 'phone' | 'email' | 'messenger', required
    - `network` string: Сеть мессенджера; обязательна для messenger
    - `value` string, required: Телефон в любом формате, адрес почты или ник
    - `primary` boolean: Основной канал своего вида; без отметки основным становится первый
  - `tags` string[], nullable
  - `source` string
  - `owner_id` integer, nullable
  - `note` string
  - `custom` object, nullable: Дополнительные поля кабинета: состав задаёт «Настройки → Поля»
  - `confirm_duplicate` boolean: Это правда новый клиент: создать, хотя телефон или почта совпали с живой карточкой. Совпадение ИНН и КПП так не обходится

## Response `201`

Созданный клиент

- CRMCustomer
  - `id` string, uuid, required
  - `kind` 'person' | 'company' | 'sole_prop', required
  - `name` string, required
  - `legal_name` string, required
  - `inn` string, required: ИНН без пробелов; пустая строка - не указан
  - `kpp` string, required: КПП в верхнем регистре; бывает только при ИНН из 10 цифр
  - `phone` string, required: Основной телефон — значение основного канала phone
  - `email` string, required: Основная почта — значение основного канала email
  - `messengers` object, nullable, required: Ник или номер клиента по мессенджерам
  - `channels` CRMCustomerChannel[], required: Все телефоны, почты и мессенджеры клиента
    - `kind` 'phone' | 'email' | 'messenger', required
    - `network` string: Сеть мессенджера: telegram, whatsapp, max, vk и т. п.; у телефона и почты не передаётся
    - `value` string, required: Значение, как его ввели
    - `normalized` string, required: Вид для сравнения: телефон цифрами с кодом страны, почта и ник в нижнем регистре
    - `primary` boolean, required: Основной канал своего вида; он уходит в справочник контрагентов ERP
  - `tags` string[], nullable, required
  - `source` string, required
  - `owner_id` integer
  - `owner_name` string
  - `note` string, required
  - `core_contact_id` string, uuid
  - `promoted_at` string, date-time: Момент переноса в справочник контрагентов ERP
  - `archived_at` string, date-time
  - `merged_into_customer_id` string, uuid
  - `open_deals` integer, required
  - `custom` object, nullable: Дополнительные поля кабинета: состав задаёт «Настройки → Поля»
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `409`: Похожий клиент уже есть: code crm.customer_inn_taken или crm.customer_possible_duplicate, в matches — похожие карточки
- `422`: Idempotency-Key уже использован для другого запроса: другое тело, другой адрес или другая операция. Код `idempotency.key_mismatch`; сохранённый ответ не раскрывается. Для новой команды берут новый ключ.
- `503`: Хранилище ключей идемпотентности недоступно, команда с заголовком Idempotency-Key не выполнялась. Код `idempotency.unavailable`; Retry-After говорит, когда повторить.

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/3c60ded179f2?raw)
