Resources
Facturen
GET en POST /api/v1/invoices. Maak een concept of verstuur direct: versturen nummert en vergrendelt.
Facturen ophalen
GET /api/v1/invoices vraagt invoices:read en geeft de vijftig nieuwste facturen, nieuwste eerst. Een sleutel met profielbeperking ziet alleen facturen van dat profiel.
{
"data": [
{
"id": "7f2b…",
"number": "2026-0012",
"status": "sent",
"total_incl": 12100,
"issue_date": "2026-03-01",
"customer_id": "c0a8…",
"public_token": "pt_…"
}
]
}Met public_token maak je de publieke pagina van de factuur: https://invoice.cijfr.com/p/<token>. Daar staat de pdf, iDEAL en de SEPA-QR.
Factuur aanmaken
POST /api/v1/invoices vraagt invoices:write en accepteert Idempotency-Key. Zonder send is het resultaat een concept dat je in de app verder bewerkt. Met send: true geeft Cijfr de factuur meteen uit: gatloos nummer, vergrendeld, en de e-mail naar de klant wordt verstuurd.
| Veld | Type | Verplicht | Toelichting |
|---|---|---|---|
customerId | uuid | ja | Klant uit POST /customers of de app |
lines | array | ja | 1 tot 500 regels, zie hieronder |
issueDate | date | nee | Standaard vandaag |
dueDate | date | nee | Standaard issueDate + 14 dagen |
send | boolean | nee | true = uitgeven en e-mailen, standaard false |
profileId | uuid | nee | Cijfr-profiel voor huisstijl en reeks |
| Regelveld | Type | Verplicht | Toelichting |
|---|---|---|---|
description | string | nee | Regeltekst, standaard Regel |
quantity | number | nee | Aantal, standaard 1 |
unitPriceCents | integer | nee | Prijs per eenheid in centen |
vatTreatment | enum | nee | standard_21, reduced_9, zero, exempt, reverse_charge, intra_community |
productId | uuid | nee | Koppelt de regel aan een product |
curl https://app.cijfr.com/api/v1/invoices \
-H "Authorization: Bearer $CIJFR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: invoice-order-1042" \
-d '{
"customerId": "c0a8…",
"send": true,
"lines": [
{
"description": "Websiteonderhoud maart",
"quantity": 4,
"unitPriceCents": 7500,
"vatTreatment": "standard_21"
}
]
}'{
"data": {
"id": "7f2b…",
"number": "2026-0012",
"public_token": "pt_…",
"emailed": true,
"emailError": null
}
}Wat je moet weten
send: truevergrendelt de factuur meteen. Daarna is hij onveranderbaar; een correctie is een creditnota in de app.emailedisfalsemet eenemailErrorals de mail niet weg kon, bijvoorbeeld zonder gekoppelde maildienst. De factuur is dan wél uitgegeven.- Klant-, product- en profiel-id's moeten bij jouw organisatie horen, anders
400 validation. - Kan je organisatie niet versturen (betaling achter), dan
402 billing_readonly. Concepten aanmaken kan nog wel. - Totaalbedragen rekent de server uit; je hoeft zelf geen totalen mee te sturen.