API v1
REST API for Factuur.software. Part of the Pro subscription. JSON in and out, Bearer authentication.
Authentication
Send your API key in the Authorization header:
Authorization: Bearer JOUW_SLEUTEL
Generate your key via Profile, under API access. The key is visible once - after that we only store a hash. Lost? Revoke it and generate a new one.
Rate limit
1000 requests per hour per user. Above that, HTTP 429 follows.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/me | profile, subscription, features and usage |
| GET | /api/v1/invoices | invoices (non-archived); query: from, to (YYYY-MM-DD), limit (max 1000), offset |
| GET | /api/v1/invoices/{id} | one invoice with lines and customer |
| POST | /api/v1/invoices | create invoice; invoice_number empty = automatic numbering, lines optional |
| PUT | /api/v1/invoices/{id} | change status, invoice_number, issue_date, due_date, notes or customer_id |
| DELETE | /api/v1/invoices/{id} | archives the invoice (fiscal retention obligation, no permanent deletion) |
| GET | /api/v1/customers | customers; query: limit, offset |
| GET | /api/v1/customers/{id} | one customer |
| POST | /api/v1/customers | create customer; name is required |
| PUT | /api/v1/customers/{id} | edit customer fields |
| DELETE | /api/v1/customers/{id} | delete customer; 409 as long as there are invoices attached |
| GET | /api/v1/expenses | expenses; query: from, to (YYYY-MM-DD), limit, offset |
| GET | /api/v1/expenses/{id} | one expense |
| POST | /api/v1/expenses | create expense |
| PUT | /api/v1/expenses/{id} | edit expense; amounts and VAT will be recalculated |
| DELETE | /api/v1/expenses/{id} | delete expense |
Status codes
200/201succeeded401Bearer token is missing or invalid403subscription does not provide API access404not found409conflict, for example deleting customer with invoices422invalid payload429rate limit exceeded
Examples
curl -H "Authorization: Bearer JOUW_SLEUTEL" https://factuur.software/api/v1/me
curl "https://factuur.software/api/v1/invoices?from=2026-01-01&limit=50" -H "Authorization: Bearer JOUW_SLEUTEL"
curl -X POST -H "Authorization: Bearer JOUW_SLEUTEL" -H "Content-Type: application/json" -d '{"customer_id":1,"lines":[{"description":"Consultancy","quantity":8,"unit_price":95,"tax_rate":21}]}' https://factuur.software/api/v1/invoices
curl -X PUT -H "Authorization: Bearer JOUW_SLEUTEL" -H "Content-Type: application/json" -d '{"status":"betaald"}' https://factuur.software/api/v1/invoices/123