POST /invoices s Idempotency-Key, DPH jako procenta, plus výpis, storno a označení jako zaplacené.
První faktura v 6 krocích
- Odešlete POST /v1/invoices s objektem buyer a alespoň jednou položkou v lines.
- Přidejte hlavičku Idempotency-Key — je povinná, jeden klíč na logickou operaci.
- Odešlete vat_rate jako procento (21) a unit_price jako ČISTOU jednotkovou cenu.
- Odpověď 201 obsahuje id, number, series, součty net/vat/gross a metadata, která jste odeslali.
- Doklad stáhněte pomocí GET /v1/invoices/{id}/pdf nebo XML UBL pomocí GET /v1/invoices/{id}/xml.
Všechny endpointy
| Metoda | Endpoint | Scope | Idempotency-Key | Požadavků / minutu |
|---|---|---|---|---|
| POST | /invoices Vystavit fakturu nebo proformu | invoices:write | povinné | 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:write | povinné | 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
| Stav | Typ | Kód |
|---|---|---|
| 422 | invalid_request_error | issuer_profile_incomplete |
| 422 | invalid_request_error | cannot_storno_draft |
| 422 | invalid_request_error | nothing_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.