Розділи документації API
Документація API/Запити/Вкладені дані

Вкладені дані

Канали зв’язку, теги й доп. поля передаються в тілі запиту самої сутності. Адреси й реквізити мають окремі маршрути. Нижче наведено точні формати та що відбувається при створенні, оновленні й очищенні.

Загальне правило оновлення

У тілі PUTЩо відбувається
Ключа немає (channels / tags / *_extra_fields відсутні)Дані не змінюються. Можна оновлювати лише name чи owner_id, нічого не втративши.
channels: [...]Список каналів замінюється повністю переданим.
tags: [...]Теги замінюються повністю. tags: [] знімає всі.
*_extra_fields: [...]Оновлюються лише передані поля (за field_id), решта лишаються.

Канали зв’язку (channels)

Телефони, email, посилання й месенджери. Є у контактів, контрагентів і лідів.

"channels": [
  { "type": "phone",  "value": "+380671112233", "label": "Мобільний", "is_primary": true },
  { "type": "email",  "value": "olena@example.com", "label": "Робочий" },
  { "type": "social", "category": "telegram", "value": "@olena", "label": "Telegram" },
  { "type": "link",   "value": "https://acme.ua", "label": "Сайт" }
]
ПолеТипОбмеженняОпис
typeобов.рядок≤ 20 симв.phone, email, link (посилання) або social (месенджер, соцмережа). Фільтр channels.<type> шукає саме за цим значенням.
labelобов.рядок≤ 30 симв.Підпис: «Мобільний», «Робочий» тощо. Обов’язковий для контактів.
entity_ididСлужбове, ставить сервер.
entity_typeрядок≤ 50 симв.Службове, ставить сервер.
categoryрядок≤ 20 симв.Довільне уточнення до 20 символів, напр. telegram, viber, instagram.
valueрядок≤ 120 симв.Номер, адреса чи нікнейм. Телефон нормалізується до формату +380XXXXXXXXX.
is_primaryboolОсновний канал цього типу.
temp_idрядокСлужбове поле інтерфейсу, ігноруйте.
idлише читанняцілеІдентифікатор запису.
  • ●Телефон нормалізується: +38 (067) 111-22-33 збережеться як +380671112233.
  • ●label обов’язковий для контактів (інакше 422 channels[0].label); передавайте його завжди.
  • ●Значення type сервер не обмежує, але фільтр filter[channels.phone;like] і дзвінки працюють лише зі стандартними phone, email, link, social.
  • ●Окремі поля phone та email запису не є каналами: вони не синхронізуються з channels.
  • ●Для читання потрібен ?expand=Channels (у картці й у списку), без нього channels: null.

Теги (tags)

Є в контактів, контрагентів, лідів, угод, завдань, товарів, замовлень і рахунків. Передаються при створенні й оновленні.

"tags": [ { "id": 3 }, { "name": "Опт" }, { "name": "VIP", "color": "#e11d48" } ]
  • ●{"id": 3} означає наявний тег. {"name": "…"} означає тег з такою назвою в цій сутності; якщо його немає, він створюється.
  • ●Переданий масив замінює всі теги запису. tags: [] знімає всі.
  • ●Читання: у картці (GET /contact/42) приходить масив tags з {"id", "name", "color"}. У списку tags порожнє, тому додайте ?expand=EntityTags.Tag, теги будуть у entity_tags[].tag.
  • ●Фільтр: filter[tags;eq;or]=3,7, без тегу: filter[tags;neq]=3.
ПолеТипОбмеженняОпис
entityобов.рядок≤ 30 симв.Сутність тегу, ставить сервер.
nameобов.рядок≤ 50 симв.Назва тегу.
colorрядок≤ 15 симв.Колір.
idлише читанняцілеІдентифікатор запису.
created_atлише читаннядата-часЧас створення.

Додаткові поля

Поля, які компанія налаштувала сама. Масив називається за сутністю:

СутністьКлюч у тілі й відповіді
Контактcontact_extra_fields
Контрагентaccount_extra_fields
Лідlead_extra_fields
Угодаopportunity_extra_fields
Замовленняorder_extra_fields
Рахунокinvoice_extra_fields
Товарproduct_extra_fields
Платіж, завданняextra_fields
"contact_extra_fields": [
  { "field_id": 1101, "value": "Київ" },
  { "field_id": 1102, "value": "2814" },
  { "field_id": 1103, "value": "|2816|,|2818|" }
]

Які поля є і їхні id

GET /api/v1/extra-fields?entity=contact
→ { "items": [ { "id": 1102, "label": "Регіон", "field_type": "list", "is_required": false,
                 "options": [ { "id": 2813, "name": "Київ" }, ... ] }, ... ] }

Формат value за типом поля

field_typevalueПриклад
text, textarea, urlрядок"Київ"
numberчисло рядком"1250.5"
dateYYYY-MM-DD"2026-10-01"
timeHH:MM"09:30"
list, search_listid варіанта рядком"2814"
multiple, search_multipleid варіантів у |...| через кому"|2816|,|2818|"
  • ●Значення передається рядком до 512 символів. Довший рядок дає 422.
  • ●Платежі: у POST і PUT той самий масив extra_fields.
  • ●Для списків передається id варіанта, а не назва: "Київ" або "2816,2818" дають 422 «некоректний формат значення»; id чужого поля дає 422 «опція не належить полю».
  • ●Варіанти полів з пошуком (тисячі значень) у визначенні поля не приходять, їх треба шукати: GET /extra-fields/option?field_id=1102&q=Київ або &ids=2813,2814.
  • ●Очистити поле: {"field_id": 1101, "value": ""}.
  • ●field_id чужої сутності або такого, якого не існує, дає 422 «не належить цій сутності».
  • ●Обов’язкове поле (is_required) при створенні без значення дає 422 з ключем f_<id>. При оновленні перевіряються лише передані поля.
  • ●Поля, приховані від ролі користувача токена, не видно в /extra-fields.
Читання лише з expandУ картці й списку доп. поля приходять null, доки ви їх не попросите: ?expand=ContactExtraFields(AccountExtraFields, LeadExtraFields, OpportunityExtraFields, OrderExtraFields, InvoiceExtraFields, ProductExtraFields, ExtraFields). Відповідь на POST містить передані поля. Виняток становлять завдання: їхня картка завжди віддає extra_fields і tags.

Фільтр за доп. полем: filter[f_1102;eq]=2814.

Адреси (/address)

Адреси контактів, контрагентів і лідів. Читати й змінювати може той, хто бачить / змінює власника.

GET/address?entity_type=contact&entity_id=42
Адреси запису (усі, без пагінації).
право: <власник>.view2 очк.
GET/address/{id}
Одна адреса.
право: <власник>.view1 очк.
POST/address
Додати адресу.
право: <власник>.update5 очк.
PUT/address/{id}
Змінити (передані поля).
право: <власник>.update5 очк.
DELETE/address/{id}
Видалити.
право: <власник>.update5 очк.
POST /api/v1/address
{ "entity_type": "account", "entity_id": 12, "type": "legal",
  "country": "Україна", "region": "Київська", "city": "Київ",
  "address": "вул. Хрещатик, 1, оф. 5", "index": "01001" }
ПолеТипОбмеженняОпис
typeобов.рядок≤ 20 симв.factual (фактична), legal (юридична) або delivery_address (доставки).
countryобов.рядок≤ 40 симв.Країна.
regionрядок≤ 40 симв.Область.
districtрядок≤ 60 симв.Район.
cityрядок≤ 40 симв.Місто.
addressрядок≤ 255 симв.Вулиця, будинок, офіс.
indexрядок≤ 20 симв.Поштовий індекс.
entity_typeрядокВласник: contact, account або lead.
entity_ididId власника.
is_archivedboolВ архіві. Архівні записи приховує параметр is_archived=true.
idлише читанняцілеІдентифікатор запису.
created_atлише читаннядата-часЧас створення.
updated_atлише читаннядата-часЧас останньої зміни, на ньому будується інкрементальна синхронізація.

Фільтр записів за адресою: GET /account?filter[address.city;eq]=Львів.

Реквізити (/payment-detail)

Банківські й податкові реквізити контрагентів, контактів і лідів для рахунків і актів. Права успадковуються від власника.

GET/payment-detail/get-all/{owner_id}?entity_type=account
Реквізити власника. entity_type: account (за замовчуванням), contact, lead.
право: <власник>.view2 очк.
GET/payment-detail/{id}
Одні реквізити.
право: <власник>.view1 очк.
POST/payment-detail
Додати. Власник задається через account_id, contact_id або lead_id.
право: <власник>.update5 очк.
PUT/payment-detail/{id}
Змінити.
право: <власник>.update5 очк.
DELETE/payment-detail/{id}
Видалити.
право: <власник>.update5 очк.

Що обов’язкове залежно від contractor_type

contractor_typeОбов’язковоФормат
legal_entitycountry, tax_number, legal_name, address + банкtax_number: ЄДРПОУ, 8 цифр
fopcountry, tax_number, legal_name (ПІБ), address + банкtax_number: РНОКПП, 10 цифр
individualcountry, legal_name (ПІБ), document_type + банкpassport: серія 2 великі літери, номер 6 цифр; rnokpp: tax_number 10 цифр
non_residentcountry, legal_name, tax_number, address + банкtax_number: будь-який до 50 символів
otherlegal_nameбез вимог
  • ●«Банк» = currency (3 великі літери: UAH, USD, EUR) і iban (український: UA + 27 цифр; пробіли прибираються).
  • ●Платник ПДВ (vat_payer: true) потребує vat_number, 10 або 12 цифр.
  • ●Помилки повертаються як 422 з переліком полів у error.details.
POST /api/v1/payment-detail
{
  "account_id": 12,
  "contractor_type": "legal_entity",
  "country": "Україна",
  "legal_name": "ТОВ «Ромашка»",
  "tax_number": "12345678",
  "address": "м. Київ, вул. Хрещатик, 1",
  "vat_payer": true,
  "vat_number": "123456789012",
  "currency": "UAH",
  "iban": "UA213223130000026007233566001",
  "bank_name": "АТ «Приватбанк»"
}
Поле payment_details у тілі контрагента через API не приймається (422). Реквізити передаються лише через /payment-detail, де діють перевірки вище.
ПолеТипОбмеженняОпис
contractor_typeрядок≤ 20 симв.Обов’язковий: legal_entity (юрособа), fop, individual (фізособа), non_resident, other.
countryрядок≤ 120 симв.Країна.
tax_numberрядок≤ 50 симв.ЄДРПОУ / РНОКПП.
legal_nameрядок≤ 255 симв.Повна юридична назва.
vat_payerboolПлатник ПДВ.
vat_numberрядок≤ 12 симв.ІПН платника ПДВ.
addressрядок≤ 500 симв.Юридична адреса одним рядком.
document_typeрядок≤ 20 симв.Документ фізособи: passport або rnokpp.
document_seriesрядок≤ 10 симв.Серія документа.
document_numberрядок≤ 20 симв.Номер документа.
signatory_nameрядок≤ 255 симв.Підписант.
signatory_positionрядок≤ 120 симв.Посада підписанта.
signatory_basisрядок≤ 120 симв.Підстава підпису (Статут, довіреність).
currencyрядок≤ 3 симв.Валюта рахунку, ISO-код: UAH, USD, EUR.
ibanрядок≤ 34 симв.IBAN.
bank_nameрядок≤ 255 симв.Банк.
additional_detailsрядок≤ 65535 симв.Додаткові реквізити.
account_ididВласник-контрагент.
contact_ididВласник-контакт.
lead_ididВласник-лід.
is_archivedboolВ архіві. Архівні записи приховує параметр is_archived=true.
is_deletedboolВидалено.
nameрядок≤ 255 симв.Назва (застаріле поле).
personрядок≤ 255 симв.Контактна особа (застаріле поле).
detailsрядок≤ 65535 симв.Реквізити текстом (застаріле поле).
idлише читанняцілеІдентифікатор запису.
created_atлише читаннядата-часЧас створення.
updated_atлише читаннядата-часЧас останньої зміни, на ньому будується інкрементальна синхронізація.
deleted_atлише читаннядата-часЧас видалення (у звичайних відповідях завжди null).
Повʼязані обʼєкти для ?expand= (3)

Без expand приходять як null; писати їх не можна, передавайте відповідне *_id.

Account → AccountContact → ContactLead → Lead