NONOX Connect API · v1.1.0
Build on Swedish bookkeeping that is open for real.
NONOX Connect is the API of NONOX: read the chart of accounts, create and post vouchers, attach documents and keep customers and suppliers in sync. Free, with no add-on fee, secured with OAuth 2.0 and passkeys, and documented down to every error code.
https://nonox.app/api/v1
What the API covers
Free, with no add-on fee
Reaching your own figures from another program should not cost extra. This is how it works in NONOX.
Security, in plain words
- Every token and key belongs to exactly one company. Another company's ids answer 404, so the API never reveals what exists.
- An app gets in only when an owner or administrator approves it on a Swedish consent screen and confirms with a passkey.
- Access tokens live at most 15 minutes. Refresh tokens change on every use, and one that comes back a second time revokes the whole connection.
- A call may do what its scopes allow and what the person behind it may do in the company right now. A changed role counts on the next call.
- API keys always expire, can be limited to IP addresses, are shown once and stored only as a SHA-256 fingerprint.
- Every write, approval and revocation is in the company's audit trail. Personal numbers are never returned.
- A posted voucher can never change. The API can post a draft or correct a voucher, just like the app.
The details: Authentication (OAuth), API keys, Scopes and the security page (Swedish).
Get started in five minutes
-
Turn on NONOX Connect
As owner or administrator of a company, open Inställningar → Moduler and turn on NONOX Connect. Use a company of your own for testing.
-
Create an API key
Under Anslutningar, create a key with the scopes vouchers:view, vouchers:create and vouchers:post and an expiry date. Confirm with your passkey and copy the key; it is shown once.
export NONOX_TOKEN="nnx_…" -
Check which company the key belongs to
curl "https://nonox.app/api/v1/company" \ -H "Authorization: Bearer $NONOX_TOKEN" \ -H "Accept: application/json" -
Create a voucher draft
Amounts are whole öre: 125000 is SEK 1,250.00. The Idempotency-Key makes a retry safe.
curl -X POST "https://nonox.app/api/v1/vouchers" \ -H "Authorization: Bearer $NONOX_TOKEN" \ -H "Accept: application/json" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "voucher_date": "2026-03-02", "description": "Kontantförsäljning", "series": "A", "rows": [ { "account": 1930, "debit_ore": 125000 }, { "account": 3001, "credit_ore": 100000 }, { "account": 2611, "credit_ore": 25000 } ] }' -
Post it
Use the id from the answer. The voucher gets the next number in its series, with no gaps, and can never change again, only be corrected.
curl -X POST "https://nonox.app/api/v1/vouchers/0b9f3c1e-6a2d-4f7b-9c8e-1d2a3b4c5d6e/post" \ -H "Authorization: Bearer $NONOX_TOKEN" \ -H "Accept: application/json" \ -H "Idempotency-Key: $(uuidgen)"
The full getting-started guide, in PHP, JavaScript and Python too →