Docs
/
EN DE

Core concepts

A few ideas run through the whole API. Once you know them, the reference is easy to read.

One dataset per request

A dataset is one company’s books. The dataset name is part of every URL (/client/{dataset}/…), so a request can never read or change another company’s data. An API key is also tied to one dataset. To work with several companies, use one key per company.

Vendor or customer: the {vc} path segment

Accounts payable and accounts receivable work the same way, so most endpoints serve both. The side is chosen by a {vc} segment in the path:

{vc} Side Example
vendor Accounts payable (bills you owe) POST /arap/transaction/vendor
customer Accounts receivable (money owed to you) POST /arap/transaction/customer

Fields follow the side too: a vendor request uses vendor_id / vendornumber, a customer request uses customer_id / customernumber.

Transactions, invoices and journal entries

neoo has three kinds of posting. Pick the one that matches what you have:

You have… Use Endpoints
A bill or charge with amounts per account, no items (the usual case for integrations) AR/AP transaction /arap/transaction/{vc}
An invoice with items from your catalogue (quantity × price) Invoice /arap/invoice/{vc}
A booking that doesn’t involve a vendor or customer Journal entry /gl/transactions

For transactions and invoices you send the expense or revenue lines, and neoo adds the control account (accounts payable or receivable) and the tax. A journal entry is booked exactly as you send it, so its debits must equal its credits.

Draft or approved

AR/AP transactions can be saved in two states:

  • Draft (the default): the transaction is saved but not yet in the books. It lands on a workstation, where someone reviews it in the app and approves it.
  • Approved: send "pending": "0" and the transaction is posted immediately. The company’s approval rules apply. If your user may only approve up to a certain amount, a larger bill is refused (see Errors).

If you are not sure, send drafts. A person keeps control, and your integration can’t post something wrong straight into the books. A draft can be approved later through the API with POST /arap/transaction/{vc}/{id}/approve.

Create and update

  • POST /resource creates. The response carries the new id.
  • POST /resource/{id} (or PUT where the reference says so) updates. For transactions, invoices and journal entries, send the complete document, not only the changed fields: an update replaces the lines.
  • DELETE /resource/{id} deletes.

Currency, dates and amounts

  • Currency is a three-letter code. On write the field is called curr, not currency. Reading a single document returns currency. This is the most common integration mistake.
  • Dates are yyyy-mm-dd, for example 2026-09-01.
  • Amounts are JSON numbers in the document’s currency, with a dot as decimal separator: 1250.5, not "1'250.50".
  • Exchange rate (exchangerate) is the rate against the company’s base currency. It defaults to 1.

Accounts and tax

Lines refer to accounts by their account number as a string ("6500"), the same number shown in the chart of accounts. Tax is given per line as the number of the tax account (taxAccount). Leave out taxAmount and neoo calculates the tax from the rate.

Look these up once and cache them:

  • GET /system/chart/accounts for the chart of accounts
  • GET /system/taxes for tax rates and their accounts

Permissions

Each endpoint needs a permission, the same one the matching page needs in the app. The reference names it for most endpoints. A request without it gets 403. Because a key acts as its user, you control what an integration may do by the role you give that user.

Next

Put it together in Book a vendor bill.