Skip to content

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.

Base URLhttps://nonox.app/api/v1

What the API covers

BookkeepingChart of accounts, VAT codes, fiscal years and voucher series: what a program needs to book correctly.
VouchersCreate drafts, post them with gapless numbers, correct posted vouchers and attach receipts and invoices.
RegistersCustomers and suppliers, with sync of everything that changed since last time.
StandardsOpenAPI 3.1, OAuth 2.0 with PKCE, RFC 9457 errors, idempotent writes and rate-limit headers.

Free, with no add-on fee

Reaching your own figures from another program should not cost extra. This is how it works in NONOX.

No add-on feeThe API is a module in NONOX like every other. There is no price per call, per app or per integration.
Free when you run it yourselfNONOX is open source (AGPL-3.0). On your own server the API costs nothing, now or later.
Included when we run itThe hosted service includes every module, the API too. It is not a premium tier.
Your data, your way outAn open API is part of not being locked in, next to SIE4 and the archive package. Reading the code shows exactly what each call does.

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

  1. 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.

  2. 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_…"
  3. Check which company the key belongs to

    curl "https://nonox.app/api/v1/company" \
      -H "Authorization: Bearer $NONOX_TOKEN" \
      -H "Accept: application/json"
  4. 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
        }
      ]
    }'
  5. 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 →

Guides