Nordlet Audit API
The audit API from Nordlet — 1 operation(s) for audit.
The audit API from Nordlet — 1 operation(s) for audit.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/nordlet:nordlet-audit-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Nordlet Accounting Audit API
version: 0.5.7
description: 'API-first accounting for the EU/EEA market (Lithuania first). Everything the product can do is available here.
## Conventions
- Every operation is `POST /v1/{module}/{resource}/{action}` with a JSON body.
- Authenticate with `Authorization: Bearer `. Keys carry scopes like `sales:write` or `*`.
- List actions accept `page`, `pageSize`, `sort: [{field, dir}]` and `filter: [{field, op, value}]`.
- Monetary amounts are decimal **strings** (e.g. `"121.0000"`), never floats.
- Errors share one envelope: `{ "error": { "code", "message", "requestId", "key?", "params?", "fieldErrors?" } }`; `key` is a stable identifier of the message for translation, with its values in `params`.
- Country-specific compliance endpoints are namespaced by jurisdiction (e.g. `/v1/declarations/lt/...`)
and return 422 unless the company is registered in that country (set at `account/companies/create`).
## Idempotency
Send an `Idempotency-Key` header on any mutating call. Retries replay the original response
(marked with `x-idempotent-replay: true`); reusing a key with a different payload returns 422.
## Rate limits
300 requests/min per API key by default. 429 responses include a `retry-after` header.
## Webhooks
Subscribe via `webhooks/subscriptions/create`. Deliveries are HMAC-signed
(`x-nordlet-signature-v2: t=,v1=.">`, plus the original
`x-nordlet-signature: sha256=`) and retried for about 24 hours. A subscription is paused, and its owners
e-mailed, after 5 events in a row could not be delivered. Every event type and its envelope
(`{ id, version, companyId, eventType, createdAt, data }`) are listed under `x-webhooks`.
Guides - getting started, SDKs, conventions, bank imports, migrating from another system, EU VAT,
revenue recognition, consolidation - live at .'
servers:
- url: https://api.nordlet.com
description: Production
security:
- apiKey: []
tags:
- name: Audit
paths:
/v1/audit/list:
post:
tags:
- Audit
description: 'List the audit log of the company: who did what to which entity, with the recorded change in `diff`. Filterable by `action`, `entity`, `entityId`, `actorType` and `actorId`; sortable by `createdAt` and `id`, newest first by default.'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
page:
default: 1
type: integer
minimum: 1
maximum: 9007199254740991
format: int64
pageSize:
default: 50
type: integer
minimum: 1
maximum: 500
format: int64
sort:
maxItems: 3
type: array
items:
type: object
properties:
field:
type: string
minLength: 1
maxLength: 64
pattern: ^[\s\S]*$
dir:
default: asc
type: string
enum:
- asc
- desc
required:
- field
filter:
maxItems: 10
type: array
items:
type: object
properties:
field:
type: string
minLength: 1
maxLength: 64
pattern: ^[\s\S]*$
op:
type: string
enum:
- eq
- ne
- contains
- gte
- lte
- in
value:
anyOf:
- type: string
pattern: ^[\s\S]*$
- type: number
- type: boolean
- minItems: 1
maxItems: 500
type: array
items:
anyOf:
- type: string
pattern: ^[\s\S]*$
- type: number
required:
- field
- op
- value
totals:
description: Numeric fields to sum over every row matching the filter (not only the current page)
maxItems: 10
type: array
items:
type: string
minLength: 1
maxLength: 64
pattern: ^[\s\S]*$
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
rows:
type: array
items:
type: object
properties:
id:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
format: int64
actorType:
type: string
enum:
- user
- api_key
- system
actorId:
type:
- string
- 'null'
pattern: ^[\s\S]*$
action:
type: string
pattern: ^[\s\S]*$
entity:
type: string
pattern: ^[\s\S]*$
entityId:
type:
- string
- 'null'
pattern: ^[\s\S]*$
diff: {}
createdAt:
type: string
format: date-time
example: '2026-07-01T09:30:00.000Z'
required:
- id
- actorType
- actorId
- action
- entity
- entityId
- diff
- createdAt
additionalProperties: false
page:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
format: int64
pageSize:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
format: int64
total:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
format: int64
totals:
type: object
additionalProperties:
type: string
pattern: ^[\s\S]*$
maxProperties: 100
totalsByCurrency:
description: The requested totals split by currency code, present when the listed records carry a currency
type: object
additionalProperties:
type: object
additionalProperties:
type: string
pattern: ^[\s\S]*$
maxProperties: 100
maxProperties: 100
required:
- rows
- page
- pageSize
- total
additionalProperties: false
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'400':
description: Request validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'402':
description: The trial or the prepaid credit has ended; top up or subscribe to continue
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'403':
description: The API key lacks the required scope
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'404':
description: The requested resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'409':
description: The request conflicts with the current state
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'413':
description: The request body or uploaded file is larger than allowed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'422':
description: The request is well-formed but violates a business rule
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
headers:
X-RateLimit-Limit:
description: Request budget for the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Remaining:
description: Requests left in the current window
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
X-RateLimit-Reset:
description: Seconds until the window resets
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
Retry-After:
description: Seconds to wait before retrying
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
'500':
description: Unexpected server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
operationId: auditList
summary: Audit list
x-fern-sdk-group-name: audit
x-fern-sdk-method-name: list
components:
schemas:
ErrorResponse:
type: object
required:
- error
additionalProperties: false
properties:
error:
type: object
required:
- code
- message
- requestId
additionalProperties: false
properties:
code:
type: string
enum:
- validation
- unauthorized
- forbidden
- not_found
- conflict
- idempotency_key_reuse
- idempotency_in_progress
- rate_limited
- payment_required
- internal
message:
type: string
maxLength: 2000
pattern: ^[\s\S]*$
requestId:
type: string
maxLength: 64
pattern: ^[a-zA-Z0-9_-]+$
fieldErrors:
type: object
maxProperties: 100
additionalProperties:
type: array
maxItems: 100
items:
type: string
maxLength: 2000
pattern: ^[\s\S]*$
securitySchemes:
apiKey:
type: http
scheme: bearer