Vystavování faktur přes API

POST /invoices s Idempotency-Key, DPH jako procenta, plus výpis, storno a označení jako zaplacené.

POST /invoices s Idempotency-Key, DPH jako procenta, plus výpis, storno a označení jako zaplacené.

← Zpět na dokumentaci API

První faktura v 6 krocích

  1. Odešlete POST /v1/invoices s objektem buyer a alespoň jednou položkou v lines.
  2. Přidejte hlavičku Idempotency-Key — je povinná, jeden klíč na logickou operaci.
  3. Odešlete vat_rate jako procento (21) a unit_price jako ČISTOU jednotkovou cenu.
  4. Odpověď 201 obsahuje id, number, series, součty net/vat/gross a metadata, která jste odeslali.
  5. Doklad stáhněte pomocí GET /v1/invoices/{id}/pdf nebo XML UBL pomocí GET /v1/invoices/{id}/xml.

Všechny endpointy

MetodaEndpointScopeIdempotency-KeyPožadavků / minutu
POST/invoices
Vystavit fakturu nebo proformu
invoices:writepovinné30
GET/invoices
Výpis faktur (stránkování kurzorem)
invoices:read—120
POST/invoices/preview-totals
Spočítat součty bez vytvoření čehokoli
invoices:read—120
GET/invoices/{invoice_id}
Načíst jednu fakturu
invoices:read—120
GET/invoices/{invoice_id}/pdf
Stáhnout PDF faktury
invoices:read—120
POST/invoices/{invoice_id}/storno
Vystavit dobropis, který tuto fakturu ruší
invoices:writepovinné30
POST/invoices/{invoice_id}/payments
Označit fakturu jako zaplacenou
invoices:write—30
DELETE/invoices/{invoice_id}/payments
Označit fakturu jako nezaplacenou
invoices:write—30

Co je API 4invoices

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
# Stránkování kurzorem: sledujte next_cursor, dokud has_more není 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'

# Dobropis dostane VLASTNÍ fiskální číslo; číslo originálu se nikdy nepoužije znovu.
bash
# Označit jako zaplacené
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/payments \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# Vrátit zpět
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

Chyby

StavTypKód
422invalid_request_errorissuer_profile_incomplete
422invalid_request_errorcannot_storno_draft
422invalid_request_errornothing_to_storno

Časté chyby

  • Výpis je založen na kurzoru: sledujte next_cursor, dokud has_more není false. Filtry zahrnují status, document_kind, buyer_tax_id, issued_from, issued_to a q.
  • Storno je POST /v1/invoices/{id}/storno a dostane vlastní fiskální číslo — číslo původní faktury se nikdy nepoužije znovu.
  • Proforma (document_kind proforma) nespotřebuje fiskální číslo a nelze ji podat do národního systému elektronické fakturace.
  • metadata se při čtení vracejí zpět: uveďte tam ID své objednávky a nebudete potřebovat samostatnou mapovací tabulku.
  • POST /v1/invoices/preview-totals provádí stejný výpočet bez vedlejších efektů — hodí se pro zobrazení součtů ve vašem vlastním košíku.

Otázky a odpovědi pro vývojáře

Kolik položek může mít jedna faktura?

Mezi 1 a 400. description je omezen na 1024 znaků a quantity musí být striktně kladné.

Co se stane, když po timeoutu odešlu stejný požadavek znovu?

Se stejným Idempotency-Key dostanete původní fakturu a hlavičku Idempotency-Replayed: true. Nevystaví se žádný druhý doklad.

Jak fakturu označím jako zaplacenou?

POST /v1/invoices/{id}/payments ji označí jako zaplacenou a DELETE na stejné cestě to vrátí zpět. Oba vyžadují scope invoices:write.