POST /invoices med en Idempotency-Key, moms som procenter, plus opslag, storno og markering som betalt.
← Tilbage til API-dokumentationen
Din første faktura i 6 trin
- Send POST /v1/invoices med et buyer-objekt og mindst én linje i lines.
- Tilføj headeren Idempotency-Key — den er påkrævet, én nøgle pr. logisk operation.
- Send vat_rate som procent (21) og unit_price som NETTO enhedspris.
- 201-svaret indeholder id, number, series, totaler net/vat/gross og de metadata, du sendte.
- Hent dokumentet med GET /v1/invoices/{id}/pdf, eller UBL-XML'en med GET /v1/invoices/{id}/xml.
Alle endpoints
| Metode | Endpoint | Scope | Idempotency-Key | Anmodninger / minut |
|---|---|---|---|---|
| POST | /invoices Udsted en faktura eller proformafaktura | invoices:write | påkrævet | 30 |
| GET | /invoices List fakturaer (cursor-paginering) | invoices:read | — | 120 |
| POST | /invoices/preview-totals Beregn totaler uden at oprette noget | invoices:read | — | 120 |
| GET | /invoices/{invoice_id} Hent én faktura | invoices:read | — | 120 |
| GET | /invoices/{invoice_id}/pdf Download fakturaens PDF | invoices:read | — | 120 |
| POST | /invoices/{invoice_id}/storno Udsted en kreditnota, der annullerer denne faktura | invoices:write | påkrævet | 30 |
| POST | /invoices/{invoice_id}/payments Markér fakturaen som betalt | invoices:write | — | 30 |
| DELETE | /invoices/{invoice_id}/payments Markér fakturaen som ubetalt | invoices:write | — | 30 |
Hvad 4invoices API'et er
bash
curl -sS -X POST https://api.4invoices.net/v1/invoices \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: order-10457-invoice' \
-d '{
"buyer": {
"name": "Exemplu Comert SRL",
"tax_id": "RO12345678",
"address": "Str. Fabricii 12",
"city": "Cluj-Napoca",
"county": "Cluj",
"country": "RO",
"email": "[email protected]"
},
"lines": [
{ "description": "Abonament SaaS, iulie", "quantity": 1, "unit_price": 400, "vat_rate": 21, "unit": "buc" },
{ "description": "Implementare", "quantity": 6, "unit_price": 250, "vat_rate": 21, "unit": "ora" }
],
"currency": "RON",
"document_kind": "factura",
"due_date": "2026-08-15",
"metadata": { "order_id": "10457" }
}'bash
# Cursor-paginering: følg next_cursor, indtil has_more er false.
curl -sS "https://api.4invoices.net/v1/invoices?limit=50&status=issued&issued_from=2026-07-01" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# → {"object":"list","data":[...],"has_more":true,"next_cursor":"inv_01J..."}
curl -sS "https://api.4invoices.net/v1/invoices?limit=50&cursor=inv_01J..." \
-H "Authorization: Bearer $ACCESS_TOKEN"bash
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/storno \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H 'Idempotency-Key: storno-inv_01J7ABC-1'
# Kreditnotaen får sit EGET fiskale nummer; den oprindelige fakturas nummer genbruges aldrig.bash
# Markér som betalt
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
-H "Authorization: Bearer $ACCESS_TOKEN"
# Fortryd
curl -sS -X DELETE https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
-H "Authorization: Bearer $ACCESS_TOKEN"https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Fejl
| Status | Type | Kode |
|---|---|---|
| 422 | invalid_request_error | issuer_profile_incomplete |
| 422 | invalid_request_error | cannot_storno_draft |
| 422 | invalid_request_error | nothing_to_storno |
Almindelige fejl
- Listning er cursor-baseret: følg next_cursor, indtil has_more er false. Filtre omfatter status, document_kind, buyer_tax_id, issued_from, issued_to og q.
- En storno er POST /v1/invoices/{id}/storno og får sit eget fiskale nummer — den oprindelige fakturas nummer genbruges aldrig.
- En proformafaktura (document_kind proforma) forbruger ikke et fiskalt nummer og kan ikke indsendes i det nationale e-fakturasystem.
- metadata gentages ved læsning: læg dit ordre-id der, så behøver du ingen særskilt mappingtabel.
- POST /v1/invoices/preview-totals kører den samme beregning uden sideeffekter — nyttigt til at vise totaler i din egen kurv.
Spørgsmål og svar for udviklere
Hvor mange linjer kan én faktura have?
Mellem 1 og 400. description er begrænset til 1024 tegn, og quantity skal være strengt positiv.
Hvad sker der, hvis jeg sender den samme anmodning igen efter en timeout?
Med samme Idempotency-Key får du den oprindelige faktura plus headeren Idempotency-Replayed: true. Der udstedes intet andet dokument.
Hvordan markerer jeg en faktura som betalt?
POST /v1/invoices/{id}/payments markerer den som betalt, og DELETE på samme sti fortryder det. Begge kræver scopet invoices:write.