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 /resourcecreates. The response carries the newid.POST /resource/{id}(orPUTwhere 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, notcurrency. Reading a single document returnscurrency. This is the most common integration mistake. - Dates are
yyyy-mm-dd, for example2026-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 to1.
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/accountsfor the chart of accountsGET /system/taxesfor 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.