Вкладені дані
Канали зв’язку, теги й доп. поля передаються в тілі запиту самої сутності. Адреси й реквізити мають окремі маршрути. Нижче наведено точні формати та що відбувається при створенні, оновленні й очищенні.
Загальне правило оновлення
| У тілі 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_id | id | Службове, ставить сервер. | |
entity_type | рядок | ≤ 50 симв. | Службове, ставить сервер. |
category | рядок | ≤ 20 симв. | Довільне уточнення до 20 символів, напр. telegram, viber, instagram. |
value | рядок | ≤ 120 симв. | Номер, адреса чи нікнейм. Телефон нормалізується до формату +380XXXXXXXXX. |
is_primary | bool | Основний канал цього типу. | |
temp_id | рядок | Службове поле інтерфейсу, ігноруйте. | |
idлише читання | ціле | Ідентифікатор запису. |
- ●Телефон нормалізується:
+38 (067) 111-22-33збережеться як+380671112233. - ●
labelобов’язковий для контактів (інакше 422channels[0].label); передавайте його завжди. - ●Значення
typeсервер не обмежує, але фільтрfilter[channels.phone;like]і дзвінки працюють лише зі стандартнимиphone,email,link,social. - ●Окремі поля
phoneтаemailзапису не є каналами: вони не синхронізуються зchannels. - ●Для читання потрібен
?expand=Channels(у картці й у списку), без ньогоchannels: null.
Додаткові поля
Поля, які компанія налаштувала сама. Масив називається за сутністю:
| Сутність | Ключ у тілі й відповіді |
|---|---|
| Контакт | 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_type | value | Приклад |
|---|---|---|
text, textarea, url | рядок | "Київ" |
number | число рядком | "1250.5" |
date | YYYY-MM-DD | "2026-10-01" |
time | HH:MM | "09:30" |
list, search_list | id варіанта рядком | "2814" |
multiple, search_multiple | id варіантів у |...| через кому | "|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.
null, доки ви їх не попросите: ?expand=ContactExtraFields(AccountExtraFields, LeadExtraFields, OpportunityExtraFields, OrderExtraFields, InvoiceExtraFields, ProductExtraFields, ExtraFields). Відповідь на POST містить передані поля. Виняток становлять завдання: їхня картка завжди віддає extra_fields і tags.Фільтр за доп. полем: filter[f_1102;eq]=2814.
Адреси (/address)
Адреси контактів, контрагентів і лідів. Читати й змінювати може той, хто бачить / змінює власника.
/address?entity_type=contact&entity_id=42/address/{id}/address/address/{id}/address/{id}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_id | id | Id власника. | |
is_archived | bool | В архіві. Архівні записи приховує параметр is_archived=true. | |
idлише читання | ціле | Ідентифікатор запису. | |
created_atлише читання | дата-час | Час створення. | |
updated_atлише читання | дата-час | Час останньої зміни, на ньому будується інкрементальна синхронізація. |
Фільтр записів за адресою: GET /account?filter[address.city;eq]=Львів.
Реквізити (/payment-detail)
Банківські й податкові реквізити контрагентів, контактів і лідів для рахунків і актів. Права успадковуються від власника.
/payment-detail/get-all/{owner_id}?entity_type=accountentity_type: account (за замовчуванням), contact, lead./payment-detail/{id}/payment-detailaccount_id, contact_id або lead_id./payment-detail/{id}/payment-detail/{id}Що обов’язкове залежно від contractor_type
| contractor_type | Обов’язково | Формат |
|---|---|---|
legal_entity | country, tax_number, legal_name, address + банк | tax_number: ЄДРПОУ, 8 цифр |
fop | country, tax_number, legal_name (ПІБ), address + банк | tax_number: РНОКПП, 10 цифр |
individual | country, legal_name (ПІБ), document_type + банк | passport: серія 2 великі літери, номер 6 цифр; rnokpp: tax_number 10 цифр |
non_resident | country, legal_name, tax_number, address + банк | tax_number: будь-який до 50 символів |
other | legal_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_payer | bool | Платник ПДВ. | |
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_id | id | Власник-контрагент. | |
contact_id | id | Власник-контакт. | |
lead_id | id | Власник-лід. | |
is_archived | bool | В архіві. Архівні записи приховує параметр is_archived=true. | |
is_deleted | bool | Видалено. | |
name | рядок | ≤ 255 симв. | Назва (застаріле поле). |
person | рядок | ≤ 255 симв. | Контактна особа (застаріле поле). |
details | рядок | ≤ 65535 симв. | Реквізити текстом (застаріле поле). |
idлише читання | ціле | Ідентифікатор запису. | |
created_atлише читання | дата-час | Час створення. | |
updated_atлише читання | дата-час | Час останньої зміни, на ньому будується інкрементальна синхронізація. | |
deleted_atлише читання | дата-час | Час видалення (у звичайних відповідях завжди null). |
Повʼязані обʼєкти для ?expand= (3)
Без expand приходять як null; писати їх не можна, передавайте відповідне *_id.