Fortnox API — operations guideRate limits and pagination in the Fortnox API
The Fortnox API allows 25 calls per 5 seconds in a rolling window per access token (about 300 calls per minute). If the limit is exceeded, the API responds with HTTP 429 Too Many Requests.
What the rate limit means
Fortnox counts requests in a rolling five-second window rather than resetting the quota at fixed times. A traffic burst can therefore keep producing 429 responses until enough older calls have left the window. Fortnox also states the limit as 300 calls per minute per client ID and tenant. In practice, schedule against the stricter short window: no more than 25 request starts during any rolling five-second period.
The quota follows the access token, not the IP address. Each Fortnox company has its own token and quota, while concurrent processes for one company share the same allowance. Coordinate throttling centrally per company and token, and reserve some capacity for interactive requests.
Fortnox rate limit
Rolling window · the quota follows the access token, not the IP address
| Limit | Calls | Per |
|---|---|---|
| Short window (5 s) | Calls25 | PerAccess token |
| Long limit (1 min) | Calls300 | PerClient ID and tenant |
How to handle 429
HTTP 429 is a signal to slow down, not to resend immediately. Put retries in a shared client and use exponential backoff with jitter so concurrent workers do not wake together and create another spike. Cap both the delay and number of attempts, then return exhausted work to a controlled queue.
Production integrations need retry and circuit breaking. Our production client uses three retries with exponential backoff from 1 to 30 seconds, a circuit breaker that opens after five consecutive failures, and a queue capped at 100 waiting calls. The circuit protects an unhealthy dependency while the bounded queue provides backpressure.
- Throttle per access token before sending and share the limiter across every job for that tenant.
- On 429, wait with exponential backoff and random jitter; never retry in a tight loop.
- Open the circuit after repeated failures, measure queue depth, and alert before backlog affects customers.
- 01
Throttle per access token
Share the limiter across every job for that tenant.
- 02
Wait on 429
Exponential backoff with random jitter.
- 03
Open the circuit after repeated failures
Our production client: three retries, 1 to 30 seconds, the circuit opens after five consecutive failures and the queue holds 100 waiting calls.
Pagination
Fortnox list resources use page for the page number and limit for the record count. The default limit is 100 and the supported range is 1–500. A real invoice request can fetch the first 100 unpaid invoices sorted by document number. Use lowercase query names and combine them with &. A moderate page size can be cheaper to retry and process than always requesting 500 records.
GET https://api.fortnox.se/3/invoices?filter=unpaid&page=1&limit=100&sortby=documentnumber&sortorder=ascendingMany classic Fortnox list responses contain MetaInformation with @CurrentPage, @TotalPages, and @TotalResources. Read these values where the response exposes them and continue while CurrentPage is less than TotalPages. Persist results before advancing the checkpoint so an interruption cannot skip a page.
The bundled OpenAPI document confirms /3/invoices and its resource-specific query parameters, while global page, limit, and sortorder are documented in Fortnox's official parameter guide rather than directly on that operation. Response models vary, so inspect the contract for each resource instead of requiring MetaInformation everywhere.
Filters and sorting
For invoices, ?filter=unpaid is the documented way to retrieve unpaid records only. The bundled OpenAPI document also allows cancelled, fullypaid, unpaidoverdue, and unbooked. Server-side filtering means smaller responses, fewer pages, and less quota consumption than discarding records locally.
Use sortby and sortorder for ordering. For /3/invoices, the OpenAPI document allows fields including documentnumber, customername, customernumber, invoicedate, ocr, and total; Fortnox's official example uses sortorder=ascending. Choose stable ordering for pagination and make long-running syncs able to overlap and deduplicate records changed during the run.
The global lastmodified parameter retrieves records changed since a timestamp and is the basis of incremental sync. Fortnox allows it alongside one resource-specific search parameter. Store the last successful watermark per company and resource, overlap the next interval slightly, and apply idempotent updates to catch late changes without duplicates.
Fortnox's official parameter guide ↗Practical patterns
A robust incremental sync starts from a stored lastmodified checkpoint, reads every page in a deterministic order, and advances the checkpoint only after the interval completes. On failure, resume from the previous safe point. Add a time overlap and upsert by Fortnox identity so network failures and boundary-time updates are harmless.
Batch reads with list pages instead of one detail call per record, but keep concurrency low per token. Let a scheduler balance background syncs against user-driven traffic and spread scheduled jobs over time. Measure request counts, 429s, retries, latency, and queue depth per company.
Cache data that is read often and changes rarely. Cache immutable lookups and short-lived list results, invalidate after your own changes, and use lastmodified to refresh only changed data. Caching reduces duplicate calls and preserves quota for workflows that need current data.
Start
Stored lastmodified
A checkpoint per company and resource
Read
Every page in a fixed order
Persist results before moving on
Done
Advance the checkpoint
Only when the interval is complete
On failure
Resume from the previous safe point. Overlap the time slightly and upsert by Fortnox identity.
Want to skip building the integration layer?
Nordsynk connects AI assistants to Fortnox with OAuth, controlled changes, and production hardening for retries, rate limits, and error handling.
Activate in Fortnox →Frequently asked questions
What is the Fortnox API rate limit?
The Fortnox API allows 25 calls per 5 seconds in a rolling window per access token, approximately 300 calls per minute. It responds with HTTP 429 when the limit is exceeded.
How does Fortnox API pagination work?
Use page for the page number and limit for 1–500 records per page; the default is 100. Read page metadata where the response model provides MetaInformation and continue through the last page.
Can filters and lastmodified be combined?
Fortnox permits one resource-specific search parameter with a global parameter such as lastmodified. For invoices, filter=unpaid can be part of an incremental workflow.