Розділи документації API
Документація API/Продажі/Рахунки

Рахунки

Рахунки на оплату. Статус і оплати впливають на облік, тому записи з проводками коштують більше очок. Право ролі: invoice.

Маршрути

GET/invoice
Список рахунків з пагінацією, фільтрами й total.
право: invoice.view2 очк.
GET/invoice/{id}
Одна картка.
право: invoice.view1 очк.
GET/invoice/count
Лише кількість за тими самими фільтрами (голе число).
право: invoice.view2 очк.
POST/invoice
Створити.
право: invoice.create10 очк.
PUT/invoice/{id}
Оновити.
право: invoice.update10 очк.
DELETE/invoice/{id}
Видалити.
право: invoice.delete10 очк.
GET/invoice/document-products/{id}
Позиції з доступною для відвантаження/акта кількістю.
право: invoice.view2 очк.
POST/invoice/{id}/create-shipment
Створити відвантаження з рахунку.
право: shipment.create5 очк.
POST/invoice/{id}/create-act
Створити акт виконаних робіт.
право: document.create5 очк.
GET/invoice/deleted?since=...
Видалені записи, див. розділ Синхронізація.
право: invoice.view2 очк.

Усі поля

Обов’язкові provider_id і рівно одне з contact_id / account_id (обидва або жодного дає 422). Номер присвоюється автоматично. Теги й доп. поля описані в розділі Вкладені дані.

status_id береться лише зі статусів рахунків (GET /lookup?type=inv_status, поле value: draft, sent, wait, part_payment, full_payment, cancel); статус іншої сутності чи id, якого немає, дає 422. Рахунок без суми може бути лише draft або cancel; «сплачено» не ставиться ні при створенні, ні без платежів. Вихід із draft проводить борг клієнта. Автоматично статус стає «Сплачено повністю», коли рахунок оплачено і виконано (товари відвантажено, послуги закрито підписаним актом), якщо в кабінеті ввімкнено автозакриття рахунків.

Рахунок, до якого прив’язано хоча б один платіж, не видаляється: 422 «Рахунок має платежі». Спершу видаліть платежі (DELETE /payment/{id}), потім рахунок.

ПолеТипОбмеженняОпис
provider_idобов.idВаша юрособа, від якої рахунок (/account/our).
external_idрядок≤ 64 симв.Ключ запису у вашій системі. Унікальний; пошук: filter[external_id;eq]. Див. «Синхронізація».
nameрядок≤ 40 симв.Назва рахунку.
numberрядок≤ 100 симв.Номер. При створенні присвоює сервер за префіксом (передане ігнорується); змінити можна PUT.
inv_typeрядок≤ 20 симв.outgoing (вихідний, клієнту; за замовчуванням) або incoming (вхідний). Інші значення повертають 422. Після створення не змінюється.
exchange_rateдесяткове (рядок)Курс валюти до гривні на дату документа: десяткове число рядком, напр. "41.250000". Для гривні завжди 1; якщо для валюти курс не передано, береться курс довідника.
created_dateдата-часДата рахунку. Не може бути в майбутньому.
promised_dateдата-часОчікувана дата оплати.
actual_payment_dateдата-часФактична дата оплати. Не може бути в майбутньому.
descriptionрядок≤ 1024 симв.Опис / коментар.
status_ididСтатус (/lookup?type=inv_status). Перехід із чернетки проводить дохід.
prefix_ididПрефікс нумерації (/lookup?type=inv_prefix).
vat_ididСтавка ПДВ (/lookup?type=tax).
price_includes_vatboolЦіни вказано з ПДВ.
currency_ididВалюта (/currency).
owner_ididВідповідальний користувач (/user). Якщо не передано, це користувач токена.
contact_ididПлатник-контакт. Має бути рівно одне з contact_id / account_id.
is_archivedboolВ архіві. Архівні записи приховує параметр is_archived=true.
recurring_ididШаблон повторення.
stock_ididСклад (/stock).
account_ididПлатник-контрагент. Має бути рівно одне з contact_id / account_id.
client_payment_detail_ididРеквізити клієнта (/payment-detail).
payment_detail_ididВаші реквізити для оплати (/payment-detail).
order_ididЗамовлення, з якого виставлено.
opportunity_ididУгода, з якої виставлено.
project_ididПроєкт. Задається лише при створенні; спроба змінити через PUT поверне 422.
project_stage_ididЕтап проєкту (разом із project_id). Лише при створенні.
tagsмасив TagТеги: [{"id": 3}] або [{"name": "VIP"}]. Передані замінюють усі теги запису. Див. «Вкладені дані».
idлише читанняцілеІдентифікатор запису.
costлише читанняціле, копійкиСума позицій у копійках, рахує сервер.
paymentлише читанняціле, копійкиСплачено, у копійках; рахує сервер за платежами.
created_atлише читаннядата-часЧас створення.
updated_atлише читаннядата-часЧас останньої зміни, на ньому будується інкрементальна синхронізація.
created_by_idлише читанняidХто створив запис.
deleted_atлише читаннядата-часЧас видалення (у звичайних відповідях завжди null).
shop_idлише читанняidМагазин (філія), ставиться з профілю користувача.
updated_userлише читанняоб’єкт UserХто змінив запис останнім.
tasksлише читаннямасив TaskЗавдання запису (лише у відповіді).
subлише читаннярядокСлужбове поле, ігноруйте.

Вкладені масиви

  • invoice_extra_fields: пишеться в тілі POST/PUT, формат див. у розділі Вкладені дані.
Повʼязані обʼєкти для ?expand= (18)

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

Status → LookupPrefix → LookupVat → LookupCurrency → CurrencyOwner → UserCreatedBy → UserContact → ContactRecurring → InvoiceRecurringStock → StockAccount → AccountClientPaymentDetail → PaymentDetailPaymentDetail → PaymentDetailProvider → AccountOrder → OrderOpportunity → OpportunityProject → ProjectProjectStage → ProjectStageShop → Shop

Службові поля у відповіді, ігноруйте: OldInvoice.

Позиції документа

Товари й послуги документа. Власного права в позицій немає: читати їх може той, хто бачить документ, а змінювати той, хто може змінювати документ. Сума документа перераховується автоматично.

GET/invoice/{id}/items
Позиції з товаром і одиницею, з total.
право: invoice.view2 очк.
POST/invoice/{id}/items
Додати позицію.
право: invoice.update10 очк.
PUT/invoice/{id}/items/{item_id}
Змінити кількість, ціну, знижку.
право: invoice.update10 очк.
DELETE/invoice/{id}/items/{item_id}
Видалити позицію.
право: invoice.update10 очк.
ПолеТипОбмеженняОпис
entity_typeобов.лише читаннярядокТип документа, береться зі шляху.
entity_idобов.лише читанняidId документа, береться зі шляху.
product_idобов.idТовар. Для kind=custom не потрібен.
nameрядок≤ 120 симв.Назва рядка. Для kind=custom обов’язкова, для товару береться з картки.
kindрядокproduct | custom, ≤ 10 симв.product (товар) або custom (довільний рядок без товару, напр. доставка чи послуга).
cost_priceціле, копійкиСобівартість одиниці, копійки. Вводиться лише для kind=custom; у товарного рядка береться з партій і в запиті ігнорується.
cost_sourceрядокnone | manual | product | batch, ≤ 10 симв.Звідки собівартість: none, manual, product, batch.
unit_labelрядок≤ 30 симв.Підпис одиниці.
input_unit_ididОдиниця введення / упаковка (/product/{id}/units).
input_quantityціле, ×1000Кількість в упаковках, ×1000.
input_priceціле, копійкиЦіна упаковки, копійки.
priceціле, копійкиЦіна за одиницю, копійки. При додаванні ставиться базова ціна товару; змінюйте PUT рядка.
quantityціле, ×1000Кількість, ×1000.
discount_amountціле, копійкиЗнижка сумою, копійки.
discountціле≤ 10000Знижка, соті частки % (1000 = 10 %). Якщо не передано, діє персональна знижка клієнта.
exchange_rateдесяткове (рядок)Курс перерахунку ціни товару у валюту документа (службове).
reason_ididПричина (для повернень).
price_book_ididПрайс-лист, з якого взято ціну.
statusрядокСтатус рядка (службове).
descriptionрядок≤ 255 симв.Коментар до рядка.
idлише читанняцілеІдентифікатор запису.
unit_idлише читанняidОдиниця товару (лише у відповіді).
input_factorлише читаннядесяткове (рядок)Скільки базових одиниць в упаковці, береться з картки товару.
product_unitsлише читаннямасив ProductUnitОдиниці товару (лише у відповіді).
totalлише читанняціле, копійкиПідсумок рядка, рахує сервер.
created_atлише читаннядата-часЧас створення.
updated_atлише читаннядата-часЧас останньої зміни, на ньому будується інкрементальна синхронізація.
updated_userлише читанняоб’єкт UserХто змінив запис останнім.
subлише читаннярядокСлужбове поле, ігноруйте.
versionлише читанняцілеСлужбовий лічильник змін запису.

Вкладені масиви

  • batches: лише у відповіді (expand=Batches).
  • serial_numbers: лише у відповіді (expand=SerialNumbers).
Повʼязані обʼєкти для ?expand= (4)

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

InputUnit → LookupProduct → ProductReason → LookupPriceBook → PriceBook

Службові поля у відповіді, ігноруйте: UserId, OldEntityProduct.

Додати товар

POST /api/v1/invoice/85/items
Idempotency-Key: invoice-85-add-258

{ "product_id": 258, "quantity": 3000 }

Змінити ціну й знижку рядка

PUT /api/v1/invoice/85/items/323
{ "price": 145000, "discount": 500 }
Документ і рядок беруться зі шляху: entity_type / entity_id у тілі ігноруються. Рядок чужого документа в цьому шляху дає 404. Закритий обліковий період, недостатній залишок чи вже проведений документ дають 422 з поясненням (див. Помилки).

Приклад

Рахунки клієнта, неоплачені повністю

GET /api/v1/invoice?filter[account_id;eq]=12&filter[status_id;neq]=31&fields=id,number,cost,payment,promised_date

Оплату рахунку фіксує платіж з invoice_id.