Download OpenAPI specification:
Public REST API of the Acclouding accounting software.
The Acclouding API lets you read and write the accounting data of one company from your own systems — create sales invoices from a web shop, push purchase invoices from an expense tool, or keep projects, cost centres and articles in sync.
All requests and responses are JSON (Content-Type: application/json), encoded as UTF-8.
Every request must carry an API token as a bearer token:
Authorization: Bearer <token>
The token is created in the Acclouding web application under Settings → Users → API Access. Enabling API access creates a dedicated API user for the company, bound to the role you pick in the dialog; the token is shown on the same page. Disabling API access deletes the API user and invalidates the token.
403 Forbidden. The permission needed is listed on each operation.403 Forbidden.401 Unauthorized.Enabling API access may be subject to additional charges — see your plan.
Every path must end with / — including the action endpoints (.../lock/, .../pdf/).
A URL without the trailing slash is not routed and returns 404 Not Found.
List endpoints are paginated. The items are wrapped in an items envelope, and the response
also carries _links (self, first, last, prev, next) and _meta
(totalCount, pageCount, currentPage, perPage):
{
"items": [ ... ],
"_links": { "self": { "href": "https://api.acclouding.ee/v1/project/?page=1" }, ... },
"_meta": { "totalCount": 3, "pageCount": 1, "currentPage": 1, "perPage": 50 }
}
The same information is available in response headers:
| Header | Meaning |
|---|---|
X-Pagination-Total-Count |
total number of records |
X-Pagination-Page-Count |
number of pages |
X-Pagination-Current-Page |
current page (1-based) |
X-Pagination-Per-Page |
records per page |
Link |
first, last, prev, next navigation links |
Use the page (1-based) and per-page (default 50, maximum 1000) query parameters to
navigate. Records can be sorted with sort=<field> (ascending) or sort=-<field>
(descending).
fields=id,name limits the fields returned by list and single-record endpoints.
expand=client,financialEntry adds optional related objects where the operation offers them.
YYYY-MM-DD; timestamps are YYYY-MM-DD HH:MM:SS (server local time, no zone)."70.0000") — parse both. Both forms are accepted on input.0 / 1 integers.currency_ prefix are in the document currency; the same amount without
the prefix is in the company's base currency, converted with currency_rate.Errors carry the HTTP status code and a JSON body:
{ "name": "Not Found", "message": "The requested sales invoice does not exist.", "code": 0, "status": 404 }
Validation failures return 422 Unprocessable Entity with a list of field errors:
[ { "field": "fa_id", "message": "No fa_code found for the invoice row." } ]
A few older endpoints (sales invoice create/update, the lock/unlock actions) return 200 OK
with an errors or success: 0 payload instead — the individual operations document this.
Human-readable messages are returned in the language given in the Content-Language
request header (en, et, lt, fi; default en).
Lists the sales invoices of the company. Requires the Index permission on Sales Invoice.
Each item carries the invoice attributes and its rows.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
| expand | string Example: expand=client,financialEntry Comma-separated list of related objects to include — |
| X-Pagination-Total-Count | integer Total number of records. |
| X-Pagination-Page-Count | integer Number of pages. |
| X-Pagination-Current-Page | integer Current page, 1-based. |
| X-Pagination-Per-Page | integer Records per page. |
| Link | string
|
object | |
object | |
Array of objects (SalesInvoice) |
{- "_links": {
}, - "_meta": {
- "totalCount": 120,
- "pageCount": 3,
- "currentPage": 1,
- "perPage": 50
}, - "items": [
- {
- "id": 65009,
- "sequence_number": "2026-0142",
- "fs_id": 0,
- "reference_number": 0,
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-01",
- "payment_term": 14,
- "client_id": 4021,
- "partner_id": 0,
- "company_id": 0,
- "penalty_percent": "70.0000",
- "invoice_status": "unpaid",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_sum": "70.0000",
- "total_paid": "70.0000",
- "paid_date": "2026-07-01",
- "company_name": "string",
- "company_contact_address": "string",
- "company_contact_email": "string",
- "company_reg_no": "string",
- "company_vat_no": "string",
- "company_representative": "string",
- "client_name": "string",
- "client_contact_email": "string",
- "client_contact_phone": "string",
- "client_company_reg_no": "string",
- "client_company_vat_no": "string",
- "client_representative": "string",
- "comment_on_invoice": "string",
- "notes": "string",
- "currency": "EUR",
- "currency_rate": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_sum": "70.0000",
- "currency_total_paid": "70.0000",
- "is_vat_liable": 0,
- "is_fixed_asset_sale": 0,
- "footer": { },
- "rows": [
- {
- "id": 91394,
- "sales_invoice_id": 65009,
- "article_id": 0,
- "title": "Development",
- "quantity": "70.0000",
- "unit": "hr",
- "price": "70.0000",
- "currency_price": "70.0000",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_gross": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_gross": "70.0000",
- "vat_rate": "70.0000",
- "company_vat_rate_id": 0,
- "fa_id": 0,
- "project_id": 0,
- "cost_centre_id": 0,
- "fixed_asset_id": 0,
- "invoice_periodisation_id": 0,
- "row_nr": 1,
- "is_deleted": 0,
- "tags": [
- 0
], - "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12",
- "article": {
- "id": 0,
- "name": "string",
- "sku": "string",
- "unit": "string",
- "decimals": 0
}, - "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
]
}
]
}Creates a sales invoice together with its rows and, if needed, the client. Requires the Create permission on Sales Invoice.
The client object identifies the invoice recipient. The client is looked up in the
company's client register in this order: id, then registration_number, then
sequence_number. When nothing matches, a new client is created from the object — at
least name, country, registration_number and type (business or private) are
needed for that.
Required: invoice_date, financial_entry_date, currency, rows, and either due_date
or payment_term (days; the due date is then calculated from the invoice date).
sequence_number is assigned from the company's default financial series when omitted.
currency_rate is set by the server from the exchange rates of the financial entry date.
Each row needs a financial account (fa_id or fa_code), quantity, the net unit price
currency_price and a VAT rate (company_vat_rate_id or company_vat_rate_code).
The article may be given as article_code or as article: { "sku": ... }; project_id /
project_code and cost_centre_id / cost_centre_code are optional.
The VAT amount and all totals are calculated by the server from the row's VAT rate.
On success the full invoice is returned (200 OK). When the invoice itself does not
validate, 422 is returned with a list of field errors. When one or more rows do not
validate, 422 is returned with the invoice payload plus a row_errors list, and nothing is
saved.
| invoice_date required | string or null <date> (Date) |
| financial_entry_date required | string or null <date> (Date) |
| currency required | string |
required | object (ClientInput) Identifies an existing client ( |
required | Array of objects (SalesInvoiceCreateRow) non-empty |
| sequence_number | string Invoice number. Generated from the default financial series when omitted. |
| fs_id | integer Financial series to number the invoice from. |
| reference_number | integer or null Payment reference number. Validated with the Estonian 7-3-1 check digit. |
| due_date | string or null <date> (Date) |
| payment_term | integer >= 0 Payment term in days. When given, |
| language | string Enum: "en" "et" "lt" "fi" Language of the printed invoice. |
| penalty_percent | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| client_name | string |
| client_address_line_1 | string |
| client_address_city | string |
| client_address_county | string |
| client_address_postal_code | string |
| client_contact_email | string |
| client_contact_phone | string |
| client_company_reg_no | string |
| client_company_vat_no | string |
| client_representative | string or null |
| company_name | string |
| company_contact_address | string |
| company_contact_email | string |
| company_reg_no | string |
| company_vat_no | string |
| company_representative | string |
| credit_invoice_for_id | integer or null For credit invoices, the ID of the invoice being credited. |
| comment_on_invoice | string or null |
| notes | string or null |
| is_fixed_asset_sale | integer (Bool) Enum: 0 1
|
| invoice_type | string or null |
object or null |
| id | integer |
| sequence_number | string The invoice number generated from the financial series. |
| fs_id | integer or null Financial series ID. |
| reference_number | integer or null Payment reference number. |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| payment_term | integer or null Payment term in days. |
| client_id | integer |
| partner_id | integer Alias of |
| company_id | integer |
| penalty_percent | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| paid_date | string or null <date> (Date) |
| company_name | string or null |
| company_contact_address | string or null |
| company_contact_email | string or null |
| company_reg_no | string or null |
| company_vat_no | string or null |
| company_representative | string or null |
| client_name | string or null |
| client_contact_email | string or null |
| client_contact_phone | string or null |
| client_company_reg_no | string or null |
| client_company_vat_no | string or null |
| client_representative | string or null |
| comment_on_invoice | string or null Free text printed on the invoice. |
| notes | string or null Internal notes, not printed. |
| currency | string |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_sale | integer (Bool) Enum: 0 1
|
object or null Footer texts printed on the invoice, keyed by language. | |
Array of objects (SalesInvoiceRow) | |
object (Client) | |
Array of objects Files attached to the invoice. | |
Array of objects Emails the invoice has been sent with. |
{- "invoice_date": "2021-08-03",
- "financial_entry_date": "2021-07-29",
- "due_date": "2021-08-10",
- "payment_term": 7,
- "penalty_percent": "0.00",
- "currency": "EUR",
- "is_fixed_asset_sale": 0,
- "comment_on_invoice": null,
- "notes": null,
- "rows": [
- {
- "fa_code": "30100",
- "article_code": "SOFT",
- "title": "Development",
- "quantity": "110",
- "unit": "hr",
- "currency_price": "70.0000",
- "company_vat_rate_code": 1,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 1
}
], - "client": {
- "type": "business",
- "is_active": 1,
- "name": "Test API OÜ",
- "country": "EE",
- "vat_code": "EE123456",
- "registration_number": "123456",
- "contact_email": "",
- "contact_phone": ""
}
}{- "id": 65009,
- "sequence_number": "2026-0142",
- "fs_id": 0,
- "reference_number": 0,
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-01",
- "payment_term": 14,
- "client_id": 4021,
- "partner_id": 0,
- "company_id": 0,
- "penalty_percent": "70.0000",
- "invoice_status": "unpaid",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_sum": "70.0000",
- "total_paid": "70.0000",
- "paid_date": "2026-07-01",
- "company_name": "string",
- "company_contact_address": "string",
- "company_contact_email": "string",
- "company_reg_no": "string",
- "company_vat_no": "string",
- "company_representative": "string",
- "client_name": "string",
- "client_contact_email": "string",
- "client_contact_phone": "string",
- "client_company_reg_no": "string",
- "client_company_vat_no": "string",
- "client_representative": "string",
- "comment_on_invoice": "string",
- "notes": "string",
- "currency": "EUR",
- "currency_rate": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_sum": "70.0000",
- "currency_total_paid": "70.0000",
- "is_vat_liable": 0,
- "is_fixed_asset_sale": 0,
- "footer": { },
- "rows": [
- {
- "id": 91394,
- "sales_invoice_id": 65009,
- "article_id": 0,
- "title": "Development",
- "quantity": "70.0000",
- "unit": "hr",
- "price": "70.0000",
- "currency_price": "70.0000",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_gross": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_gross": "70.0000",
- "vat_rate": "70.0000",
- "company_vat_rate_id": 0,
- "fa_id": 0,
- "project_id": 0,
- "cost_centre_id": 0,
- "fixed_asset_id": 0,
- "invoice_periodisation_id": 0,
- "row_nr": 1,
- "is_deleted": 0,
- "tags": [
- 0
], - "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12",
- "article": {
- "id": 0,
- "name": "string",
- "sku": "string",
- "unit": "string",
- "decimals": 0
}, - "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
], - "client": {
- "id": 4021,
- "name": "Test API OÜ",
- "country": "EE",
- "vat_code": "EE123456",
- "nace": "string",
- "webpage": "string",
- "payment_term": 0,
- "contact_email": "string",
- "contact_phone": "string",
- "registration_number": "123456",
- "type": "business",
- "penalty_percentage": "70.0000",
- "address": { },
- "sale_type": "string",
- "einvoice_enabled": true,
- "last_footer": { }
}, - "uploadedFiles": [
- { }
], - "email_log": [
- {
- "to": "string",
- "sent_at": "2026-07-13 09:45:12"
}
]
}Returns one sales invoice with its rows. Requires the View permission on Sales Invoice.
| id required | integer The ID of the sales invoice. |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
| expand | string Example: expand=client,financialEntry Comma-separated list of related objects to include — |
| id | integer |
| sequence_number | string The invoice number generated from the financial series. |
| fs_id | integer or null Financial series ID. |
| reference_number | integer or null Payment reference number. |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| payment_term | integer or null Payment term in days. |
| client_id | integer |
| partner_id | integer Alias of |
| company_id | integer |
| penalty_percent | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| paid_date | string or null <date> (Date) |
| company_name | string or null |
| company_contact_address | string or null |
| company_contact_email | string or null |
| company_reg_no | string or null |
| company_vat_no | string or null |
| company_representative | string or null |
| client_name | string or null |
| client_contact_email | string or null |
| client_contact_phone | string or null |
| client_company_reg_no | string or null |
| client_company_vat_no | string or null |
| client_representative | string or null |
| comment_on_invoice | string or null Free text printed on the invoice. |
| notes | string or null Internal notes, not printed. |
| currency | string |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_sale | integer (Bool) Enum: 0 1
|
object or null Footer texts printed on the invoice, keyed by language. | |
Array of objects (SalesInvoiceRow) | |
object (Client) Present when | |
object or null Present when |
{- "id": 65009,
- "sequence_number": "2026-0142",
- "fs_id": 0,
- "reference_number": 0,
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-01",
- "payment_term": 14,
- "client_id": 4021,
- "partner_id": 0,
- "company_id": 0,
- "penalty_percent": "70.0000",
- "invoice_status": "unpaid",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_sum": "70.0000",
- "total_paid": "70.0000",
- "paid_date": "2026-07-01",
- "company_name": "string",
- "company_contact_address": "string",
- "company_contact_email": "string",
- "company_reg_no": "string",
- "company_vat_no": "string",
- "company_representative": "string",
- "client_name": "string",
- "client_contact_email": "string",
- "client_contact_phone": "string",
- "client_company_reg_no": "string",
- "client_company_vat_no": "string",
- "client_representative": "string",
- "comment_on_invoice": "string",
- "notes": "string",
- "currency": "EUR",
- "currency_rate": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_sum": "70.0000",
- "currency_total_paid": "70.0000",
- "is_vat_liable": 0,
- "is_fixed_asset_sale": 0,
- "footer": { },
- "rows": [
- {
- "id": 91394,
- "sales_invoice_id": 65009,
- "article_id": 0,
- "title": "Development",
- "quantity": "70.0000",
- "unit": "hr",
- "price": "70.0000",
- "currency_price": "70.0000",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_gross": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_gross": "70.0000",
- "vat_rate": "70.0000",
- "company_vat_rate_id": 0,
- "fa_id": 0,
- "project_id": 0,
- "cost_centre_id": 0,
- "fixed_asset_id": 0,
- "invoice_periodisation_id": 0,
- "row_nr": 1,
- "is_deleted": 0,
- "tags": [
- 0
], - "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12",
- "article": {
- "id": 0,
- "name": "string",
- "sku": "string",
- "unit": "string",
- "decimals": 0
}, - "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
], - "client": {
- "id": 4021,
- "name": "Test API OÜ",
- "country": "EE",
- "vat_code": "EE123456",
- "nace": "string",
- "webpage": "string",
- "payment_term": 0,
- "contact_email": "string",
- "contact_phone": "string",
- "registration_number": "123456",
- "type": "business",
- "penalty_percentage": "70.0000",
- "address": { },
- "sale_type": "string",
- "einvoice_enabled": true,
- "last_footer": { }
}, - "financialEntry": { }
}Updates an existing sales invoice and its rows. Requires the Create permission on Sales Invoice. Locked invoices must be unlocked first.
The invoice is identified by the id field in the request body; the id in the URL
is not used. Without a body id a new invoice is created.
Only the fields listed in the request schema are taken from the body; everything else (totals, company data, lock state) is managed by the server.
rows is the complete list of rows:
id updates that row;id, or with a temporary id starting with x- (e.g. "x-1"), is created;"is_deleted": 1 removes an existing row.Related records are referenced by id here (fa_id, company_vat_rate_id, project_id,
cost_centre_id); the article may also be given as article: { "sku": ... }.
Unlike Create, this endpoint takes vat_rate and currency_total_vat from the request
— send them with every row, otherwise the VAT amount becomes 0. Net and gross amounts and
the base-currency amounts are calculated by the server.
Invoice totals are recalculated after every save.
| id required | integer The ID of the sales invoice. |
required | Array of objects (SalesInvoiceUpdateRow) |
| sequence_number | string Invoice number. Generated from the default financial series when omitted. |
| fs_id | integer Financial series to number the invoice from. |
| reference_number | integer or null Payment reference number. Validated with the Estonian 7-3-1 check digit. |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| payment_term | integer >= 0 Payment term in days. When given, |
| currency | string |
| language | string Enum: "en" "et" "lt" "fi" Language of the printed invoice. |
| penalty_percent | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| client_name | string |
| client_address_line_1 | string |
| client_address_city | string |
| client_address_county | string |
| client_address_postal_code | string |
| client_contact_email | string |
| client_contact_phone | string |
| client_company_reg_no | string |
| client_company_vat_no | string |
| client_representative | string or null |
| company_name | string |
| company_contact_address | string |
| company_contact_email | string |
| company_reg_no | string |
| company_vat_no | string |
| company_representative | string |
| credit_invoice_for_id | integer or null For credit invoices, the ID of the invoice being credited. |
| comment_on_invoice | string or null |
| notes | string or null |
| is_fixed_asset_sale | integer (Bool) Enum: 0 1
|
| invoice_type | string or null |
object or null | |
| id | integer The invoice to update. Omit to create a new invoice. |
| client_id | integer |
| fileIds | Array of integers IDs of uploaded files to attach. |
| id | integer |
| sequence_number | string The invoice number generated from the financial series. |
| fs_id | integer or null Financial series ID. |
| reference_number | integer or null Payment reference number. |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| payment_term | integer or null Payment term in days. |
| client_id | integer |
| partner_id | integer Alias of |
| company_id | integer |
| penalty_percent | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| paid_date | string or null <date> (Date) |
| company_name | string or null |
| company_contact_address | string or null |
| company_contact_email | string or null |
| company_reg_no | string or null |
| company_vat_no | string or null |
| company_representative | string or null |
| client_name | string or null |
| client_contact_email | string or null |
| client_contact_phone | string or null |
| client_company_reg_no | string or null |
| client_company_vat_no | string or null |
| client_representative | string or null |
| comment_on_invoice | string or null Free text printed on the invoice. |
| notes | string or null Internal notes, not printed. |
| currency | string |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_sale | integer (Bool) Enum: 0 1
|
object or null Footer texts printed on the invoice, keyed by language. | |
Array of objects (SalesInvoiceRow) | |
object (Client) | |
Array of objects Files attached to the invoice. | |
Array of objects Emails the invoice has been sent with. |
{- "id": 65009,
- "invoice_date": "2021-08-03",
- "financial_entry_date": "2021-07-29",
- "due_date": "2021-08-10",
- "payment_term": 7,
- "currency": "EUR",
- "rows": [
- {
- "id": 91394,
- "fa_id": 118,
- "article": {
- "sku": "SOFT"
}, - "title": "Development",
- "quantity": "110",
- "unit": "hr",
- "currency_price": "70.0000",
- "vat_rate": 22,
- "currency_total_vat": "1694.00",
- "company_vat_rate_id": 3,
- "row_nr": 1
}, - {
- "id": "x-1",
- "fa_id": 118,
- "title": "Support",
- "quantity": 2,
- "unit": "hr",
- "currency_price": 50,
- "vat_rate": 22,
- "currency_total_vat": 22,
- "company_vat_rate_id": 3,
- "row_nr": 2
}
]
}{- "id": 65009,
- "sequence_number": "2026-0142",
- "fs_id": 0,
- "reference_number": 0,
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-01",
- "payment_term": 14,
- "client_id": 4021,
- "partner_id": 0,
- "company_id": 0,
- "penalty_percent": "70.0000",
- "invoice_status": "unpaid",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_sum": "70.0000",
- "total_paid": "70.0000",
- "paid_date": "2026-07-01",
- "company_name": "string",
- "company_contact_address": "string",
- "company_contact_email": "string",
- "company_reg_no": "string",
- "company_vat_no": "string",
- "company_representative": "string",
- "client_name": "string",
- "client_contact_email": "string",
- "client_contact_phone": "string",
- "client_company_reg_no": "string",
- "client_company_vat_no": "string",
- "client_representative": "string",
- "comment_on_invoice": "string",
- "notes": "string",
- "currency": "EUR",
- "currency_rate": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_sum": "70.0000",
- "currency_total_paid": "70.0000",
- "is_vat_liable": 0,
- "is_fixed_asset_sale": 0,
- "footer": { },
- "rows": [
- {
- "id": 91394,
- "sales_invoice_id": 65009,
- "article_id": 0,
- "title": "Development",
- "quantity": "70.0000",
- "unit": "hr",
- "price": "70.0000",
- "currency_price": "70.0000",
- "total_net": "70.0000",
- "total_vat": "70.0000",
- "total_gross": "70.0000",
- "currency_total_net": "70.0000",
- "currency_total_vat": "70.0000",
- "currency_total_gross": "70.0000",
- "vat_rate": "70.0000",
- "company_vat_rate_id": 0,
- "fa_id": 0,
- "project_id": 0,
- "cost_centre_id": 0,
- "fixed_asset_id": 0,
- "invoice_periodisation_id": 0,
- "row_nr": 1,
- "is_deleted": 0,
- "tags": [
- 0
], - "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12",
- "article": {
- "id": 0,
- "name": "string",
- "sku": "string",
- "unit": "string",
- "decimals": 0
}, - "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
], - "client": {
- "id": 4021,
- "name": "Test API OÜ",
- "country": "EE",
- "vat_code": "EE123456",
- "nace": "string",
- "webpage": "string",
- "payment_term": 0,
- "contact_email": "string",
- "contact_phone": "string",
- "registration_number": "123456",
- "type": "business",
- "penalty_percentage": "70.0000",
- "address": { },
- "sale_type": "string",
- "einvoice_enabled": true,
- "last_footer": { }
}, - "uploadedFiles": [
- { }
], - "email_log": [
- {
- "to": "string",
- "sent_at": "2026-07-13 09:45:12"
}
]
}Deletes a sales invoice and its rows. Requires the Delete permission on Sales Invoice.
Locked invoices, and invoices whose financial entry date falls within a locked fiscal year,
cannot be deleted (409 Conflict).
| id required | integer The ID of the sales invoice. |
{- "name": "Unauthorized",
- "message": "Your request was made with invalid credentials.",
- "code": 0,
- "status": 401
}Locks the sales invoice and creates the corresponding financial entry. Requires the Lock permission on Sales Invoice.
Before locking, the invoice is validated with the same checks as in the web application:
If any check fails, the response is 200 OK with success: 0 and an errors array of
human-readable messages, and nothing is changed.
Side effects on success:
The endpoint is idempotent — locking an already locked invoice returns success: 1
with the existing locked_at timestamp and does not create a duplicate financial entry.
| id required | integer The ID of the sales invoice. |
| success required | integer (Bool) Enum: 0 1
|
| locked_at | string or null (DateTime) Lock timestamp; |
| errors | Array of strings Human-readable reasons. Present when |
{- "success": 1,
- "locked_at": "2026-07-13 09:45:12"
}Unlocks the sales invoice and removes its financial entry with all of its rows. Requires the Lock permission on Sales Invoice.
Side effects on success:
is_sold is reset on fixed assets sold with this invoiceFails with success: 0 when the financial entry date falls within a locked period, or
when the financial entry can no longer be deleted.
The endpoint is idempotent — unlocking an invoice that is not locked returns success: 1.
| id required | integer The ID of the sales invoice. |
| success required | integer (Bool) Enum: 0 1
|
| locked_at | string or null (DateTime) Lock timestamp; |
| errors | Array of strings Human-readable reasons. Present when |
{- "success": 1,
- "locked_at": null
}Downloads the sales invoice as a PDF file. Requires the View permission on Sales Invoice.
The response is the PDF itself (Content-Type: application/pdf), sent as an attachment with a
file name based on the invoice sequence number, e.g. invoice-2026-0142.pdf.
The optional lang query parameter selects the language of the PDF. It must be one of the
languages enabled for the company in Settings → General; requesting a language that is not
enabled returns 400 Bad Request and no PDF is generated.
When lang is omitted, the language is resolved in this order:
PDFs are cached per invoice and language. An already generated file is reused as long as it
is newer than the invoice's last change; after editing the invoice the next request
regenerates it. If generation fails, 500 Internal Server Error is returned.
| id required | integer The ID of the sales invoice. |
| lang | string Enum: "en" "et" "lt" "fi" Language of the generated PDF. Must be enabled for the company. |
| Content-Disposition | string
|
{- "name": "Bad Request",
- "message": "The language \"lt\" is not enabled for this company.",
- "code": 0,
- "status": 400
}Lists the purchase invoices of the company. Requires the Index permission on Purchase Invoice.
Each item contains the invoice attributes together with its rows, each row including its
article and financialAccount. name is an alias of invoice_number and partner_id
an alias of vendor_id.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
| X-Pagination-Total-Count | integer Total number of records. |
| X-Pagination-Page-Count | integer Number of pages. |
| X-Pagination-Current-Page | integer Current page, 1-based. |
| X-Pagination-Per-Page | integer Records per page. |
| Link | string
|
object | |
object | |
Array of objects (PurchaseInvoice) |
{- "_links": {
}, - "_meta": {
- "totalCount": 120,
- "pageCount": 3,
- "currentPage": 1,
- "perPage": 50
}, - "items": [
- {
- "id": 65009,
- "sequence_number": "1042",
- "fs_id": 12,
- "invoice_number": "INV-2026-118",
- "name": "INV-2026-118",
- "vendor_id": 4021,
- "partner_id": 4021,
- "vendor_name": "Office Supplies OU",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-15",
- "payment_term": 14,
- "invoice_status": "unpaid",
- "total_net": 50,
- "total_vat": 11,
- "total_sum": 61,
- "total_paid": 0,
- "currency": "EUR",
- "currency_rate": 1,
- "locked_at": null,
- "locked_by": null,
- "company_id": 210,
- "rows": [
- {
- "id": 91394,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Office supplies",
- "quantity": 1,
- "unit": "pc",
- "currency_price": 50,
- "price": 50,
- "total_net": 50,
- "total_vat": 11,
- "total_gross": 61,
- "currency_total_net": 50,
- "currency_total_vat": 11,
- "currency_total_gross": 61,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 1,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
]
}
]
}Creates a purchase invoice without rows from the invoice attributes in the body. Requires the Create permission on Purchase Invoice. Rows are then added with Add a purchase invoice row.
To create an invoice together with its rows in one request use Save a purchase invoice
(PUT) without an id in the body instead.
company_id in the body is ignored — the invoice always belongs to the token's company.
| invoice_number | string The vendor's invoice number. Must be unique per vendor. |
| vendor_id | integer or null |
| fs_id | integer or null |
| sequence_number | string Internal document number. Generated from the financial series when omitted. |
| reference_number | string or null |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| received_date | string or null <date> (Date) |
| payment_term | integer or null >= 0 |
| vendor_name | string or null |
| vendor_reg_no | string or null |
| vendor_vat_no | string or null |
| vendor_contact_email | string or null |
| vendor_contact_address | string or null |
| vendor_bank | string or null |
| vendor_bank_account | string or null IBAN. |
| vendor_representative | string or null |
| creditor_name | string or null |
| credit_invoice_for_id | integer or null |
| comment | string or null |
| currency | string |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_purchase | integer (Bool) Enum: 0 1
|
| invoice_type | string or null |
| Location | string URL of the created invoice. |
| id | integer |
| company_id | integer |
| sequence_number | string or null |
| fs_id | integer or null |
| invoice_number | string or null |
| name | string or null Alias of |
| vendor_id | integer or null |
| partner_id | integer or null Alias of |
| vendor_name | string or null |
| vendor_reg_no | string or null |
| vendor_vat_no | string or null |
| vendor_contact_email | string or null |
| vendor_contact_address | string or null |
| vendor_bank | string or null |
| vendor_bank_account | string or null |
| vendor_representative | string or null |
| creditor_name | string or null |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| received_date | string or null <date> (Date) |
| paid_date | string or null <date> (Date) |
| payment_term | integer or null |
| reference_number | string or null |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| invoice_type | string or null |
| comment | string or null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency | string or null |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_purchase | integer (Bool) Enum: 0 1
|
| is_opening | integer (Bool) Enum: 0 1
|
| credit_invoice_for_id | integer or null |
| locked_at | string or null (DateTime)
|
| locked_by | integer or null |
| created_by | integer or null |
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
Array of objects (PurchaseInvoiceRow) |
{- "invoice_number": "INV-2026-118",
- "vendor_id": 4021,
- "fs_id": 0,
- "sequence_number": "string",
- "reference_number": "string",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-01",
- "received_date": "2026-07-01",
- "payment_term": 14,
- "vendor_name": "Office Supplies OU",
- "vendor_reg_no": "12345678",
- "vendor_vat_no": "string",
- "vendor_contact_email": "string",
- "vendor_contact_address": "string",
- "vendor_bank": "string",
- "vendor_bank_account": "string",
- "vendor_representative": "string",
- "creditor_name": "string",
- "credit_invoice_for_id": 0,
- "comment": "string",
- "currency": "EUR",
- "currency_rate": "70.0000",
- "total_sum": "70.0000",
- "currency_total_sum": "70.0000",
- "is_vat_liable": 0,
- "is_fixed_asset_purchase": 0,
- "invoice_type": "string"
}{- "id": 65009,
- "sequence_number": "1042",
- "fs_id": 12,
- "invoice_number": "INV-2026-118",
- "name": "INV-2026-118",
- "vendor_id": 4021,
- "partner_id": 4021,
- "vendor_name": "Office Supplies OU",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-15",
- "payment_term": 14,
- "invoice_status": "unpaid",
- "total_net": 50,
- "total_vat": 11,
- "total_sum": 61,
- "total_paid": 0,
- "currency": "EUR",
- "currency_rate": 1,
- "locked_at": null,
- "locked_by": null,
- "company_id": 210,
- "rows": [
- {
- "id": 91394,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Office supplies",
- "quantity": 1,
- "unit": "pc",
- "currency_price": 50,
- "price": 50,
- "total_net": 50,
- "total_vat": 11,
- "total_gross": 61,
- "currency_total_net": 50,
- "currency_total_vat": 11,
- "currency_total_gross": 61,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 1,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
]
}Returns a single purchase invoice by ID. Requires the View permission on Purchase Invoice.
The response contains the invoice attributes and its rows, each row including its
article and financialAccount. The vendor object is not part of this payload — it is
returned by Save a purchase invoice.
| id required | integer The ID of the purchase invoice. |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
| id | integer |
| company_id | integer |
| sequence_number | string or null |
| fs_id | integer or null |
| invoice_number | string or null |
| name | string or null Alias of |
| vendor_id | integer or null |
| partner_id | integer or null Alias of |
| vendor_name | string or null |
| vendor_reg_no | string or null |
| vendor_vat_no | string or null |
| vendor_contact_email | string or null |
| vendor_contact_address | string or null |
| vendor_bank | string or null |
| vendor_bank_account | string or null |
| vendor_representative | string or null |
| creditor_name | string or null |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| received_date | string or null <date> (Date) |
| paid_date | string or null <date> (Date) |
| payment_term | integer or null |
| reference_number | string or null |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| invoice_type | string or null |
| comment | string or null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency | string or null |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_purchase | integer (Bool) Enum: 0 1
|
| is_opening | integer (Bool) Enum: 0 1
|
| credit_invoice_for_id | integer or null |
| locked_at | string or null (DateTime)
|
| locked_by | integer or null |
| created_by | integer or null |
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
Array of objects (PurchaseInvoiceRow) |
{- "id": 65009,
- "sequence_number": "1042",
- "fs_id": 12,
- "invoice_number": "INV-2026-118",
- "name": "INV-2026-118",
- "vendor_id": 4021,
- "partner_id": 4021,
- "vendor_name": "Office Supplies OU",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-15",
- "payment_term": 14,
- "invoice_status": "unpaid",
- "total_net": 50,
- "total_vat": 11,
- "total_sum": 61,
- "total_paid": 0,
- "currency": "EUR",
- "currency_rate": 1,
- "locked_at": null,
- "locked_by": null,
- "company_id": 210,
- "rows": [
- {
- "id": 91394,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Office supplies",
- "quantity": 1,
- "unit": "pc",
- "currency_price": 50,
- "price": 50,
- "total_net": 50,
- "total_vat": 11,
- "total_gross": 61,
- "currency_total_net": 50,
- "currency_total_vat": 11,
- "currency_total_gross": 61,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 1,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
]
}Creates or updates a purchase invoice together with its rows. Requires the Create permission on Purchase Invoice. Locked invoices must be unlocked before editing.
The invoice being saved is identified by the id field in the request body — the ID in
the URL path is not used. When the body has no id, a new invoice is created (use any
placeholder, e.g. 0, in the URL).
If vendor_id is omitted but vendor_name is given, a new vendor is created automatically.
If vendor_id is given and the bank fields differ from the stored vendor, the response
contains messages.vendor_changed describing the differences.
rows and fileIds are required keys (send [] when empty). rows is the complete
list of rows:
id updates that row;id starting with x- (e.g. "x-1") is created;"is_deleted": 1 removes an existing row.Net and gross totals and the base-currency amounts are calculated server-side from
currency_price, quantity, currency_total_vat and the invoice's currency_rate.
Invoice totals are recalculated on every save.
Once somebody has approved the invoice in an approval round its content can no longer be
changed: the response is 200 OK with an errors message and nothing is saved.
The response is the saved invoice with rows (each including its article object) and the
vendor object.
| id required | integer The ID of the purchase invoice. |
required | Array of objects (PurchaseInvoiceSaveRow) |
| fileIds required | Array of integers IDs of uploaded files to attach. Send |
| invoice_number | string The vendor's invoice number. Must be unique per vendor. |
| vendor_id | integer or null |
| fs_id | integer or null |
| sequence_number | string Internal document number. Generated from the financial series when omitted. |
| reference_number | string or null |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| received_date | string or null <date> (Date) |
| payment_term | integer or null >= 0 |
| vendor_name | string or null |
| vendor_reg_no | string or null |
| vendor_vat_no | string or null |
| vendor_contact_email | string or null |
| vendor_contact_address | string or null |
| vendor_bank | string or null |
| vendor_bank_account | string or null IBAN. |
| vendor_representative | string or null |
| creditor_name | string or null |
| credit_invoice_for_id | integer or null |
| comment | string or null |
| currency | string |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_purchase | integer (Bool) Enum: 0 1
|
| invoice_type | string or null |
| id | integer The invoice to update. Omit to create a new invoice. |
| id | integer |
| company_id | integer |
| sequence_number | string or null |
| fs_id | integer or null |
| invoice_number | string or null |
| name | string or null Alias of |
| vendor_id | integer or null |
| partner_id | integer or null Alias of |
| vendor_name | string or null |
| vendor_reg_no | string or null |
| vendor_vat_no | string or null |
| vendor_contact_email | string or null |
| vendor_contact_address | string or null |
| vendor_bank | string or null |
| vendor_bank_account | string or null |
| vendor_representative | string or null |
| creditor_name | string or null |
| invoice_date | string or null <date> (Date) |
| financial_entry_date | string or null <date> (Date) |
| due_date | string or null <date> (Date) |
| received_date | string or null <date> (Date) |
| paid_date | string or null <date> (Date) |
| payment_term | integer or null |
| reference_number | string or null |
| invoice_status | string or null Enum: "unpaid" "partially_paid" "paid" "overdue" null |
| invoice_type | string or null |
| comment | string or null |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency | string or null |
| currency_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_sum | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_paid | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| is_vat_liable | integer or null |
| is_fixed_asset_purchase | integer (Bool) Enum: 0 1
|
| is_opening | integer (Bool) Enum: 0 1
|
| credit_invoice_for_id | integer or null |
| locked_at | string or null (DateTime)
|
| locked_by | integer or null |
| created_by | integer or null |
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
Array of objects (PurchaseInvoiceRow) | |
object or null | |
object Present when the vendor's stored bank details differ from the ones sent. |
{- "invoice_number": "INV-2026-118",
- "vendor_name": "Office Supplies OU",
- "vendor_reg_no": "12345678",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-15",
- "payment_term": 14,
- "currency": "EUR",
- "currency_rate": 1,
- "rows": [
- {
- "id": "x-1",
- "fa_id": 118,
- "title": "Office supplies",
- "quantity": 1,
- "unit": "pc",
- "currency_price": 50,
- "currency_total_vat": 11,
- "company_vat_rate_id": 3,
- "row_nr": 1,
- "is_deleted": 0
}
], - "fileIds": [ ]
}{- "id": 65009,
- "sequence_number": "1042",
- "fs_id": 12,
- "invoice_number": "INV-2026-118",
- "name": "INV-2026-118",
- "vendor_id": 4021,
- "partner_id": 4021,
- "vendor_name": "Office Supplies OU",
- "invoice_date": "2026-07-01",
- "financial_entry_date": "2026-07-01",
- "due_date": "2026-07-15",
- "payment_term": 14,
- "invoice_status": "unpaid",
- "total_net": 50,
- "total_vat": 11,
- "total_sum": 61,
- "total_paid": 0,
- "currency": "EUR",
- "currency_rate": 1,
- "locked_at": null,
- "locked_by": null,
- "company_id": 210,
- "rows": [
- {
- "id": 91394,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Office supplies",
- "quantity": 1,
- "unit": "pc",
- "currency_price": 50,
- "price": 50,
- "total_net": 50,
- "total_vat": 11,
- "total_gross": 61,
- "currency_total_net": 50,
- "currency_total_vat": 11,
- "currency_total_gross": 61,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 1,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}
]
}Deletes a purchase invoice and its rows. Requires the Delete permission on Purchase Invoice.
Locked invoices and invoices whose financial entry date falls within a locked fiscal year
cannot be deleted — the request fails with 409 Conflict.
| id required | integer The ID of the purchase invoice. |
{- "name": "Unauthorized",
- "message": "Your request was made with invalid credentials.",
- "code": 0,
- "status": 401
}Adds a single row to an existing purchase invoice. Requires the Create permission on Purchase Invoice.
Related records can be given by ID or by code — fa_code, company_vat_rate_code,
article_sku, project_code, cost_centre_code — and are always looked up within the
company the API token belongs to. An ID or code of another company is refused with 422.
vat_rate follows the VAT rate of the row unless it is sent explicitly. The VAT sum is
calculated from vat_rate, unless currency_total_vat is sent; for a reverse charge VAT
rate it is always 0. Net, gross and base currency amounts are calculated server side from
quantity, currency_price and the currency_rate of the invoice. Invoice totals are
recalculated after the row is saved.
row_nr defaults to the next free row number of the invoice.
Proportional VAT parent and child rows cannot be added here — use Save a purchase invoice for those.
| id required | integer The ID of the purchase invoice. |
| fa_id | integer or null |
| fa_code | string Financial account code, alternative to |
| company_vat_rate_id | integer or null |
| company_vat_rate_code | string Alternative to |
| article_id | integer or null |
| article_sku | string Alternative to |
| project_id | integer or null |
| project_code | string Alternative to |
| cost_centre_id | integer or null |
| cost_centre_code | string Alternative to |
| fixed_asset_id | integer or null |
| title | string |
| quantity | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| unit | string |
| currency_price | number or string or null (Decimal) Net unit price in the invoice currency. |
| currency_total_vat | number or string or null (Decimal) VAT amount in the invoice currency. Calculated from |
| vat_rate | number or string or null (Decimal) VAT percentage. Follows the VAT rate of the row when omitted. |
| row_nr | integer |
| is_vat_non_deductible | integer (Bool) Enum: 0 1
|
| id | integer |
| purchase_invoice_id | integer |
| fa_id | integer or null |
| article_id | integer or null |
| title | string or null |
| quantity | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| unit | string or null |
| price | number or string or null (Decimal) Net unit price in the base currency. |
| currency_price | number or string or null (Decimal) Net unit price in the invoice currency. |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_gross | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_gross | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| vat_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| company_vat_rate_id | integer or null |
| project_id | integer or null |
| cost_centre_id | integer or null |
| fixed_asset_id | integer or null |
| invoice_periodisation_id | integer or null |
| parent_id | integer or null For proportional VAT child rows, the parent row. |
| row_type | string or null |
| row_nr | integer or null |
| is_vat_non_deductible | integer (Bool) Enum: 0 1
|
| is_deleted | integer (Bool) Enum: 0 1
|
| tags | Array of integers Tag IDs attached to the row ( |
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
object (ArticleRef) The article of a row. An empty object when the row has no article. | |
FinancialAccountRef (object) or null |
{- "fa_id": 118,
- "company_vat_rate_id": 3,
- "title": "Printer paper",
- "quantity": 5,
- "unit": "pc",
- "currency_price": 4.5
}{- "id": 91401,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Printer paper",
- "quantity": 5,
- "unit": "pc",
- "currency_price": 4.5,
- "price": 4.5,
- "total_net": 22.5,
- "total_vat": 4.95,
- "total_gross": 27.45,
- "currency_total_net": 22.5,
- "currency_total_vat": 4.95,
- "currency_total_gross": 27.45,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 2,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}Updates a single row of a purchase invoice. Requires the Create permission on Purchase Invoice.
Only the fields present in the request body are changed. The same fields and the same
ID-or-code lookups apply as in Add a purchase invoice row. Sending a relation as null
(for example "project_id": null) clears it.
Sums are recalculated on every save: the VAT sum is taken from currency_total_vat when it
is sent and calculated from the VAT percentage of the row otherwise. Invoice totals are
recalculated afterwards.
| id required | integer The ID of the purchase invoice. |
| rowId required | integer The ID of the purchase invoice row. |
| fa_id | integer or null |
| fa_code | string Financial account code, alternative to |
| company_vat_rate_id | integer or null |
| company_vat_rate_code | string Alternative to |
| article_id | integer or null |
| article_sku | string Alternative to |
| project_id | integer or null |
| project_code | string Alternative to |
| cost_centre_id | integer or null |
| cost_centre_code | string Alternative to |
| fixed_asset_id | integer or null |
| title | string |
| quantity | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| unit | string |
| currency_price | number or string or null (Decimal) Net unit price in the invoice currency. |
| currency_total_vat | number or string or null (Decimal) VAT amount in the invoice currency. Calculated from |
| vat_rate | number or string or null (Decimal) VAT percentage. Follows the VAT rate of the row when omitted. |
| row_nr | integer |
| is_vat_non_deductible | integer (Bool) Enum: 0 1
|
| id | integer |
| purchase_invoice_id | integer |
| fa_id | integer or null |
| article_id | integer or null |
| title | string or null |
| quantity | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| unit | string or null |
| price | number or string or null (Decimal) Net unit price in the base currency. |
| currency_price | number or string or null (Decimal) Net unit price in the invoice currency. |
| total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| total_gross | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_net | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_vat | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| currency_total_gross | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| vat_rate | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| company_vat_rate_id | integer or null |
| project_id | integer or null |
| cost_centre_id | integer or null |
| fixed_asset_id | integer or null |
| invoice_periodisation_id | integer or null |
| parent_id | integer or null For proportional VAT child rows, the parent row. |
| row_type | string or null |
| row_nr | integer or null |
| is_vat_non_deductible | integer (Bool) Enum: 0 1
|
| is_deleted | integer (Bool) Enum: 0 1
|
| tags | Array of integers Tag IDs attached to the row ( |
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
object (ArticleRef) The article of a row. An empty object when the row has no article. | |
FinancialAccountRef (object) or null |
{- "title": "Printer paper, A4",
- "quantity": 10,
- "currency_price": 4.5,
- "project_id": null
}{- "id": 91401,
- "purchase_invoice_id": 65009,
- "fa_id": 118,
- "article_id": null,
- "title": "Printer paper",
- "quantity": 5,
- "unit": "pc",
- "currency_price": 4.5,
- "price": 4.5,
- "total_net": 22.5,
- "total_vat": 4.95,
- "total_gross": 27.45,
- "currency_total_net": 22.5,
- "currency_total_vat": 4.95,
- "currency_total_gross": 27.45,
- "vat_rate": "22.00",
- "company_vat_rate_id": 3,
- "project_id": null,
- "cost_centre_id": null,
- "row_nr": 2,
- "is_vat_non_deductible": 0,
- "article": { },
- "financialAccount": {
- "id": 118,
- "account_code": "50641",
- "name": "Office supplies"
}
}Deletes a single row of a purchase invoice. Requires the Create permission on Purchase Invoice, the same as editing the invoice.
The row is soft deleted, the same way as saving the whole invoice with is_deleted: 1 on
the row, and is gone from the invoice payload. A proportional VAT child row is deleted
together with its parent. Invoice totals are recalculated afterwards.
| id required | integer The ID of the purchase invoice. |
| rowId required | integer The ID of the purchase invoice row. |
{- "name": "Unauthorized",
- "message": "Your request was made with invalid credentials.",
- "code": 0,
- "status": 401
}Locks the purchase invoice and creates the corresponding financial entry. Requires the Lock permission on Purchase Invoice.
Before locking, the invoice is validated with the same checks as in the web application:
If any check fails, the response is 200 OK with success: 0 and an errors array of
human-readable messages, and nothing is changed.
Side effects on success:
The endpoint is idempotent — locking an already locked invoice returns success: 1
with the existing locked_at timestamp and does not create a duplicate financial entry.
| id required | integer The ID of the purchase invoice. |
| success required | integer (Bool) Enum: 0 1
|
| locked_at | string or null (DateTime) Lock timestamp; |
| errors | Array of strings Human-readable reasons. Present when |
{- "success": 1,
- "locked_at": "2026-07-14 08:12:45"
}Unlocks the purchase invoice and removes its financial entry with all of its rows. Requires the Lock permission on Purchase Invoice.
Side effects on success:
Fails with success: 0 when the financial entry date falls within a locked period, or
when the financial entry can no longer be deleted.
The endpoint is idempotent — unlocking an invoice that is not locked returns success: 1.
| id required | integer The ID of the purchase invoice. |
| success required | integer (Bool) Enum: 0 1
|
| locked_at | string or null (DateTime) Lock timestamp; |
| errors | Array of strings Human-readable reasons. Present when |
{- "success": 1,
- "locked_at": null
}Products and services used on invoice rows. Sales and purchase articles are separate registers.
Lists the articles available for sales invoice rows. Requires the Index permission on Article.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
object | |
object | |
Array of objects (Article) |
{- "_links": {
}, - "_meta": {
- "totalCount": 120,
- "pageCount": 3,
- "currentPage": 1,
- "perPage": 50
}, - "items": [
- {
- "id": 200,
- "name": "Fuel",
- "sku": "FUL",
- "ean": 0,
- "decimals": 2,
- "net_price": "70.0000",
- "vat_price": "70.0000",
- "gross_price": "70.0000",
- "host_country_vat_rate_id": 0,
- "eu_vat_rate_id": 0,
- "non_eu_vat_rate_id": 0,
- "host_country_fa_id": 0,
- "sales_eu_fa_id": 0,
- "sales_non_eu_fa_id": 0,
- "unit": "ltr",
- "cost_centre_id": 0,
- "project_id": 0
}
]
}Requires the View permission on Article.
| id required | integer The ID of the article. |
| id | integer |
| name | string |
| sku | string or null |
| ean | integer or null |
| decimals | integer Number of decimals used for the article's prices. |
| net_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| vat_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| gross_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| host_country_vat_rate_id | integer or null Default VAT rate for domestic sales/purchases. |
| eu_vat_rate_id | integer or null |
| non_eu_vat_rate_id | integer or null |
| host_country_fa_id | integer or null Default financial account for domestic sales/purchases. |
| sales_eu_fa_id | integer or null |
| sales_non_eu_fa_id | integer or null |
| unit | string or null |
| cost_centre_id | integer or null |
| project_id | integer or null |
{- "id": 200,
- "name": "Fuel",
- "sku": "FUL",
- "ean": 0,
- "decimals": 2,
- "net_price": "70.0000",
- "vat_price": "70.0000",
- "gross_price": "70.0000",
- "host_country_vat_rate_id": 0,
- "eu_vat_rate_id": 0,
- "non_eu_vat_rate_id": 0,
- "host_country_fa_id": 0,
- "sales_eu_fa_id": 0,
- "sales_non_eu_fa_id": 0,
- "unit": "ltr",
- "cost_centre_id": 0,
- "project_id": 0
}Lists the articles available for purchase invoice and expense report rows. Requires the Index permission on Purchase Article.
The list can be filtered with the filter query parameter on name, sku and ean.
A plain value matches exactly; an operator object allows partial matches:
GET /purchase-article/?filter[sku]=FUL
GET /purchase-article/?filter[name][like]=fuel
GET /purchase-article/?filter[sku][in][]=FUL&filter[sku][in][]=DIES
Supported operators: eq, neq, like, in, nin, lt, lte, gt, gte; several
conditions are combined with AND. The same structure may alternatively be sent as a JSON
body { "filter": { "name": { "like": "fuel" } } }.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
object Example: filter[name]=[object Object] Filter on |
object | |
object | |
Array of objects (Article) |
{- "items": [
- {
- "id": 200,
- "name": "Fuel",
- "sku": "FUL",
- "ean": null,
- "decimals": 2,
- "net_price": null,
- "vat_price": null,
- "gross_price": null,
- "host_country_vat_rate_id": 877,
- "eu_vat_rate_id": null,
- "non_eu_vat_rate_id": null,
- "host_country_fa_id": 13104,
- "sales_eu_fa_id": null,
- "sales_non_eu_fa_id": null,
- "unit": "",
- "cost_centre_id": null,
- "project_id": null
}
], - "_links": {
}, - "_meta": {
- "totalCount": 1,
- "pageCount": 1,
- "currentPage": 1,
- "perPage": 50
}
}Requires the View permission on Purchase Article.
| id required | integer The ID of the article. |
| id | integer |
| name | string |
| sku | string or null |
| ean | integer or null |
| decimals | integer Number of decimals used for the article's prices. |
| net_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| vat_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| gross_price | number or string or null (Decimal) A decimal number. Returned as a JSON number or a numeric string; both are accepted on input. |
| host_country_vat_rate_id | integer or null Default VAT rate for domestic sales/purchases. |
| eu_vat_rate_id | integer or null |
| non_eu_vat_rate_id | integer or null |
| host_country_fa_id | integer or null Default financial account for domestic sales/purchases. |
| sales_eu_fa_id | integer or null |
| sales_non_eu_fa_id | integer or null |
| unit | string or null |
| cost_centre_id | integer or null |
| project_id | integer or null |
{- "id": 200,
- "name": "Fuel",
- "sku": "FUE",
- "ean": null,
- "decimals": 2,
- "net_price": "1.1200",
- "vat_price": null,
- "gross_price": null,
- "host_country_vat_rate_id": 877,
- "eu_vat_rate_id": null,
- "non_eu_vat_rate_id": null,
- "host_country_fa_id": 13104,
- "sales_eu_fa_id": null,
- "sales_non_eu_fa_id": null,
- "unit": "ltr",
- "cost_centre_id": null,
- "project_id": null
}Lists the company's chart of accounts. Requires the Index permission on Financial Account.
The list can be filtered on account_code:
GET /financial-account/?filter[account_code]=10100
GET /financial-account/?filter[account_code][like]=101
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
object Example: filter[account_code]=[object Object] Filter on |
object | |
object | |
Array of objects (FinancialAccount) |
{- "items": [
- {
- "id": 1,
- "account_code": "10100",
- "financial_account_class_id": 1,
- "name": "Cash",
- "translations": {
- "name": {
- "en": "Cash",
- "et": "Kassa"
}
}
}, - {
- "id": 2,
- "account_code": "10200",
- "financial_account_class_id": 1,
- "name": "Bank Account 1",
- "translations": {
- "name": {
- "en": "Bank Account 1",
- "et": "Pangakonto 1"
}
}
}
], - "_links": {
}, - "_meta": {
- "totalCount": 2,
- "pageCount": 1,
- "currentPage": 1,
- "perPage": 50
}
}Requires the View permission on Financial Account.
| id required | integer The ID of the financial account. |
| id | integer |
| account_code | string |
| financial_account_class_id | integer or null |
| name | string Name in the company's language. |
object |
{- "id": 1,
- "account_code": "10100",
- "financial_account_class_id": 1,
- "name": "Cash",
- "translations": {
- "name": {
- "en": "Cash",
- "et": "Kassa"
}
}
}Requires the Index permission on Project.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
object | |
object | |
Array of objects (Project) |
{- "items": [
- {
- "id": 1,
- "name": "GS1",
- "code": "GS1",
- "date_start": null,
- "date_end": null,
- "is_active": 1,
- "created_at": "2023-05-12 05:41:40",
- "updated_at": "2023-05-12 05:41:40"
}, - {
- "id": 3,
- "name": "Project 3",
- "code": "P3",
- "date_start": null,
- "date_end": null,
- "is_active": 1,
- "created_at": "2024-04-05 11:52:18",
- "updated_at": "2024-04-05 11:52:18"
}
], - "_links": {
}, - "_meta": {
- "totalCount": 2,
- "pageCount": 1,
- "currentPage": 1,
- "perPage": 50
}
}Requires the Create permission on Project. code must be unique within the company.
| name | string <= 255 characters |
| code | string <= 255 characters |
| date_start | string or null <date> (Date) |
| date_end | string or null <date> (Date) |
| is_active | integer (Bool) Enum: 0 1
|
| Location | string URL of the created project. |
| id | integer |
| name | string |
| code | string |
| date_start | string or null <date> (Date) |
| date_end | string or null <date> (Date) |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "name": "New Project",
- "code": "NEWPR1"
}{- "id": 1,
- "name": "New Project",
- "code": "NEWPR1",
- "date_start": null,
- "date_end": null,
- "is_active": 1,
- "created_at": "2026-06-02 11:31:26",
- "updated_at": "2026-06-02 11:31:26"
}Requires the View permission on Project.
| id required | integer The ID of the project. |
| id | integer |
| name | string |
| code | string |
| date_start | string or null <date> (Date) |
| date_end | string or null <date> (Date) |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "id": 1,
- "name": "Project 1",
- "code": "PRJ1",
- "date_start": "2026-07-01",
- "date_end": "2026-07-01",
- "is_active": 0,
- "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12"
}Requires the Edit permission on Project. PATCH is accepted as well; in both cases only
the fields sent are changed.
| id required | integer The ID of the project. |
| name | string <= 255 characters |
| code | string <= 255 characters |
| date_start | string or null <date> (Date) |
| date_end | string or null <date> (Date) |
| is_active | integer (Bool) Enum: 0 1
|
| id | integer |
| name | string |
| code | string |
| date_start | string or null <date> (Date) |
| date_end | string or null <date> (Date) |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "name": "New Name",
- "code": "NEWPR11"
}{- "id": 1,
- "name": "Project 1",
- "code": "PRJ1",
- "date_start": "2026-07-01",
- "date_end": "2026-07-01",
- "is_active": 0,
- "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12"
}Requires the Delete permission on Project. A project that is referenced by documents cannot be deleted.
| id required | integer The ID of the project. |
{- "name": "Unauthorized",
- "message": "Your request was made with invalid credentials.",
- "code": 0,
- "status": 401
}Requires the Index permission on Cost Centre.
| page | integer >= 1 Default: 1 Page number, 1-based. |
| per-page | integer [ 1 .. 1000 ] Default: 50 Records per page. |
| sort | string Field to sort by. Prefix with |
| fields | string Example: fields=id,sequence_number,total_sum Comma-separated list of fields to return instead of the full record. |
object | |
object | |
Array of objects (CostCentre) |
{- "items": [
- {
- "id": 1,
- "name": "New Cost Centre",
- "code": "CC1",
- "is_active": 1,
- "created_at": "2026-06-02 11:35:54",
- "updated_at": "2026-06-02 11:35:54"
}
], - "_links": {
}, - "_meta": {
- "totalCount": 1,
- "pageCount": 1,
- "currentPage": 1,
- "perPage": 50
}
}Requires the Create permission on Cost Centre. code must be unique within the company.
| name | string <= 255 characters |
| code | string <= 255 characters |
| is_active | integer (Bool) Enum: 0 1
|
| Location | string URL of the created cost centre. |
| id | integer |
| name | string |
| code | string |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "name": "New Cost Centre",
- "code": "CC1"
}{- "id": 1,
- "name": "New Cost Centre",
- "code": "CC1",
- "is_active": 1,
- "created_at": "2026-06-02 11:35:54",
- "updated_at": "2026-06-02 11:35:54"
}Requires the View permission on Cost Centre.
| id required | integer The ID of the cost centre. |
| id | integer |
| name | string |
| code | string |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "id": 1,
- "name": "Marketing",
- "code": "CC1",
- "is_active": 0,
- "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12"
}Requires the Edit permission on Cost Centre. PATCH is accepted as well; in both cases
only the fields sent are changed.
| id required | integer The ID of the cost centre. |
| name | string <= 255 characters |
| code | string <= 255 characters |
| is_active | integer (Bool) Enum: 0 1
|
| id | integer |
| name | string |
| code | string |
| is_active | integer (Bool) Enum: 0 1
|
| created_at | string or null (DateTime)
|
| updated_at | string or null (DateTime)
|
{- "name": "New Cost Centre name",
- "code": "CC11"
}{- "id": 1,
- "name": "Marketing",
- "code": "CC1",
- "is_active": 0,
- "created_at": "2026-07-13 09:45:12",
- "updated_at": "2026-07-13 09:45:12"
}Requires the Delete permission on Cost Centre. A cost centre that is referenced by documents cannot be deleted.
| id required | integer The ID of the cost centre. |
{- "name": "Unauthorized",
- "message": "Your request was made with invalid credentials.",
- "code": 0,
- "status": 401
}