Developers

NORMAN DEVELOPERS

Public API quickstart

Create a Norman account, get a company API key and make your first request with curl, Python or Node.js.

GET CONNECTED

From a key to your first response

Get your API key in Norman

Create an account or log in, select your company, then open Automations → Integrations → Public API to create a key and choose its permissions.

  1. Choose your company. After signing in, open Automations → Integrations → Public API. The company ID is shown next to the key controls.
  2. Create a key. Choose the Read only preset for this example. Give the key a name, set an expiry and copy it when it appears.
  3. Save it in your environment. Use a server, local script or your automation tool’s credential store. Keep the key out of frontend code and shared workflow exports.
  4. Run the example. The companies endpoint returns the company linked to your key. The transaction request needs read_transactions.
export NORMAN_API_KEY='nrm_replace_with_your_key'

curl --fail-with-body "https://api.norman.finance/api/v1/companies/" \
  -H "Authorization: Bearer $NORMAN_API_KEY"

# Copy the publicId from results[0] into this variable.
export NORMAN_COMPANY_ID='replace_with_company_uuid'

curl --fail-with-body "https://api.norman.finance/api/v1/accounting/transactions/?page=1&page_size=20" \
  -H "Authorization: Bearer $NORMAN_API_KEY"

Recognize a successful response

A list request returns HTTP 200 and a page of results. This is an excerpt; your response contains additional fields.

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "publicId": "company-uuid",
      "name": "Your company"
    }
  ]
}

An empty results array on a transaction list means the request succeeded and no transactions match. HTTP 401 or 403 means the request needs attention; see errors.

Archived companies are hidden from the company list by default. If that list is empty, retry with ?include_archived=true or use the company ID shown in API-key settings.