Utstede fakturaer via API

POST /invoices med en Idempotency-Key, mva som prosent, pluss listing, storno og markering som betalt.

POST /invoices med en Idempotency-Key, mva som prosent, pluss listing, storno og markering som betalt.

← Tilbake til API-dokumentasjonen

Din første faktura på 6 steg

  1. Send POST /v1/invoices med et buyer-objekt og minst én linje i lines.
  2. Legg til headeren Idempotency-Key — den er påkrevd, én nøkkel per logisk operasjon.
  3. Send vat_rate som prosent (21) og unit_price som netto enhetspris.
  4. 201-svaret inneholder id, number, series, summer net/vat/gross og metadataene du sendte.
  5. Hent dokumentet med GET /v1/invoices/{id}/pdf, eller UBL-XML med GET /v1/invoices/{id}/xml.

Alle endepunkter

MetodeEndepunktScopeIdempotency-KeyForespørsler / minutt
POST/invoices
Utsted en faktura eller proformafaktura
invoices:writepåkrevd30
GET/invoices
List fakturaer (cursorpaginering)
invoices:read—120
POST/invoices/preview-totals
Beregn totaler uten å opprette noe
invoices:read—120
GET/invoices/{invoice_id}
Hent én faktura
invoices:read—120
GET/invoices/{invoice_id}/pdf
Last ned fakturaens PDF
invoices:read—120
POST/invoices/{invoice_id}/storno
Utsted en kreditnota som reverserer denne fakturaen
invoices:writepåkrevd30
POST/invoices/{invoice_id}/payments
Merk fakturaen som betalt
invoices:write—30
DELETE/invoices/{invoice_id}/payments
Merk fakturaen som ubetalt
invoices:write—30

Hva 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
# Cursorpaginering: følg next_cursor til 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 et EGET fiskalt nummer; originalens nummer gjenbrukes aldri.
bash
# Merk som betalt
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Angre
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

Feil

StatusTypeKode
422invalid_request_errorissuer_profile_incomplete
422invalid_request_errorcannot_storno_draft
422invalid_request_errornothing_to_storno

Vanlige feil

  • Listing er cursorbasert: følg next_cursor til has_more er false. Filtre inkluderer status, document_kind, buyer_tax_id, issued_from, issued_to og q.
  • En storno er POST /v1/invoices/{id}/storno og får sitt eget fiskale nummer — originalens nummer gjenbrukes aldri.
  • En proformafaktura (document_kind proforma) forbruker ikke et fiskalt nummer og kan ikke sendes inn i det nasjonale e-fakturasystemet.
  • metadata sendes tilbake ved lesing: legg ordre-id-en din der, så trenger du ingen egen mappingtabell.
  • POST /v1/invoices/preview-totals kjører samme beregning uten sideeffekter — nyttig for å vise totaler i din egen handlekurv.

Spørsmål og svar for utviklere

Hvor mange linjer kan én faktura ha?

Mellom 1 og 400. description er begrenset til 1024 tegn, og quantity må være strengt positiv.

Hva skjer hvis jeg sender samme forespørsel på nytt etter en timeout?

Med samme Idempotency-Key får du den opprinnelige fakturaen pluss headeren Idempotency-Replayed: true. Ingen annen kopi utstedes.

Hvordan merker jeg en faktura som betalt?

POST /v1/invoices/{id}/payments markerer den som betalt, og DELETE på samme sti angrer det. Begge krever scopet invoices:write.