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
Create an account or log in, select your company, then open Automations → Integrations → Public API to create a key and choose its permissions.
- Choose your company. After signing in, open Automations → Integrations → Public API. The company ID is shown next to the key controls.
- 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.
- 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.
- 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.