Developer

Resources

The request bodies, exactly as the boundary enforces them.

Create a customer or vendor

FieldRequiredNotes
nameYesLegal / trading name, ≤ 255 characters
emailNoValid email; 409 conflict if it already belongs to a party of this business
phone, address, city, state, country, countryCodeNocountryCode is ISO 3166-1 alpha-2
currencyNoISO 4217; defaults to the business currency
taxId, website, noteNo
creditLimitNoNumber ≥ 0
paymentTermNoDays, integer ≥ 0
categoryId, centerIds[]NoCategory and the locations the party is visible in

Create an invoice

json
{
"receiver": "<customer id>",
"date": "2026-08-26",
"dueDate": "2026-09-25",
"subject": "August services",
"items": [
  { "id": "<item id>", "qty": 2, "rate": 150.00, "description": "Consulting day" }
]
}
FieldRequiredNotes
receiverYesCustomer id from /customers
dateYesYYYY-MM-DD — the invoice date settlement is ordered by
items[]Yes, ≥ 1Each line: id (item), qty > 0, rate ≥ 0; optional description, discount, discount_type, tax
dueDate, subject, currency, exchange_rate, center, documentDiscountNocenter must be in the bound user's location allow-list
statusNo2 = post (default: numbered and journalled), 1 = save as draft
ℹ️Why the response has fewer fields than the dashboard

The API returns the same envelope the dashboard receives; figures (totals, balances) are computed by the backend and never re-derived. The invoice number is allocated at post time and returned as no.

Create an item

FieldRequiredNotes
nameYesUnique within the business
sku, barcodeNosku unique within the business
typeNoProduct (default), Service, Material, Expense
sub_typeNobuy (default), sell, both
rate, costNoSelling price, purchase cost
measurementNoUnit of measure, default "Unit"
category_id, income_account_id, expense_account_id, inventory_account_idNo

Pagination and ids

page (1-based) and page_size (default 25, max 200). Lists return pagination.total_count / has_next / has_prev. Ids are UUIDs and are accepted with or without dashes.