NuminaDevelopers
Dashboard
List documents

List documents

GET
/v1/attachments

Lists the company's documents, newest first. Use is_empty=true to find bilag still missing their files, and attachment_number to look one up by its bilag number.

Requires one ofdocuments:readread:ledger

Query parameters

  • attachment_numberinteger· ≥ 1
    Only bilag with this number. Numbers restart each accounting year, so this can return one per year.
  • is_emptystring
    Only bilag with or without files
    One oftruefalse
  • limitinteger· 1–500
    Maximum number of results (default 100, max 500)

    Default 100

  • offsetinteger· nullable· ≥ 0
    Number of results to skip

    Default 0

Errors

  • 400Invalid input or validation failed
  • 401Invalid or missing authentication
  • 403Missing scope, or the company is archived
  • 429Rate limit exceeded
  • 500Internal Server Error

Every error has the same shape. See Errors.

cURL
curl https://api.numina.app/v1/attachments \
  -H "Authorization: Bearer numi_YOUR_API_KEY"
JavaScript
const response = await fetch("https://api.numina.app/v1/attachments", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.NUMINA_API_KEY}`,
  },
});

const data = await response.json();
Python
import os

import requests

response = requests.get(
    "https://api.numina.app/v1/attachments",
    headers={
        "Authorization": f"Bearer {os.environ['NUMINA_API_KEY']}",
    },
)
data = response.json()
Response
200
{
  "attachments": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "file_name": "string",
      "status": "uploaded",
      "created_at": "string",
      "attachment_number": 185,
      "year": "2026",
      "is_empty": false,
      "file_count": 0,
      "booked_accounting_year": "2026",
      "content_sha256": "string",
      "journal_entry_ids": [
        "550e8400-e29b-41d4-a716-446655440000"
      ]
    }
  ],
  "has_more": false,
  "next_offset": 0
}