Pre Rumunsko: CIUS-RO predkontrola, odoslanie do SPV, normalizovaný stav, podpísaná odpoveď a doručené faktúry.
Prvá faktúra v 6 krokoch
- Spustite POST /v1/invoices/{id}/efactura/validate. Predbežná kontrola (CIUS-RO pre Rumunsko) nič neposiela do národného systému elektronickej fakturácie a presne vám povie, čo by bolo zamietnuté.
- Faktúru podajte cez POST /v1/invoices/{id}/efactura/submit, vždy s Idempotency-Key. Dostanete submission_id a status.
- Dotazujte GET /v1/efactura/submissions/{id}, kým nedosiahne accepted alebo rejected.
- Nový dopyt do národného systému elektronickej fakturácie (v Rumunsku: ANAF) vynútite cez POST /v1/efactura/submissions/{id}/refresh — počíta sa do kvóty 10 za minútu.
- Archív s podpísanou odpoveďou ANAF (Rumunsko) stiahnete cez GET /v1/efactura/submissions/{id}/download.
Všetky endpointy
| Metóda | Endpoint | Scope | Idempotency-Key | Požiadaviek / minútu |
|---|---|---|---|---|
| GET | /invoices/{invoice_id}/xml Stiahnuť XML UBL / CIUS-RO (Rumunsko) | invoices:read | — | 120 |
| POST | /invoices/{invoice_id}/efactura/validate Predkontrola (CIUS-RO pre Rumunsko) — overenie bez odoslania | efactura:read | — | 120 |
| POST | /invoices/{invoice_id}/efactura/submit Odoslať faktúru do ANAF (SPV, Rumunsko) | efactura:submit | povinné | 10 |
| GET | /efactura/submissions Zoznam podaní pre ANAF (Rumunsko) | efactura:read | — | 120 |
| GET | /efactura/submissions/{submission_id} Získať jedno podanie | efactura:read | — | 120 |
| POST | /efactura/submissions/{submission_id}/refresh Opýtať sa ANAF (Rumunsko) na aktuálny stav | efactura:read | — | 10 |
| GET | /efactura/submissions/{submission_id}/download Stiahnuť archív podpísanej odpovede | efactura:read | — | 120 |
| GET | /efactura/inbox Dodávateľské faktúry prijaté cez SPV (Rumunsko) | efactura:read | — | 120 |
| GET | /efactura/inbox/{inbound_id} Získať jednu prijatú faktúru | efactura:read | — | 120 |
| GET | /efactura/inbox/{inbound_id}/download Stiahnuť archív prijatej faktúry | efactura:read | — | 120 |
| POST | /efactura/inbox/sync Stiahnuť nové správy SPV (Rumunsko) do schránky | efactura:read | — | 10 |
Čo je 4invoices API
bash
# CIUS-RO preflight. Sends NOTHING to ANAF.
curl -sS -X POST "https://api.4invoices.net/v1/invoices/inv_01J7ABC/efactura/validate?include_xml=true" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# → {"invoice_id":"inv_01J7ABC","valid":false,
# "errors":["buyer.county is required for RO buyers"],
# "xml_base64":"PD94bWwg..."}bash
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/efactura/submit \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H 'Idempotency-Key: efactura-inv_01J7ABC-1'
# → {"submission_id":"sub_01J7XYZ","status":"queued"}python
import time, requests
BASE = "https://api.4invoices.net/v1"
TERMINAL = {"accepted", "rejected"}
H = {"Authorization": f"Bearer {token}"}
def wait_for_anaf(submission_id, timeout=900):
deadline = time.time() + timeout
delay = 15
while time.time() < deadline:
r = requests.get(f"{BASE}/efactura/submissions/{submission_id}", headers=H, timeout=30)
r.raise_for_status()
status = r.json()["status"]
if status in TERMINAL:
return r.json()
# /refresh asks ANAF directly and shares the 10/min submit bucket.
requests.post(f"{BASE}/efactura/submissions/{submission_id}/refresh", headers=H, timeout=30)
time.sleep(delay)
delay = min(delay * 2, 120)
raise TimeoutError(submission_id)bash
# Pull new SPV messages, then read the inbound supplier invoices.
curl -sS -X POST https://api.4invoices.net/v1/efactura/inbox/sync \
-H "Authorization: Bearer $ACCESS_TOKEN"
curl -sS "https://api.4invoices.net/v1/efactura/inbox?limit=50" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# ANAF allows roughly ONE message-list call per minute per CIF,
# takže /inbox/sync sa počíta do kvóty odosielania 10/min. Spúšťajte ho cez cron, nie dotazovaním.https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Národná elektronická fakturácia (ANAF e-Factura, Rumunsko)
Chyby
| Stav | Typ | Kód |
|---|---|---|
| 422 | invalid_request_error | cius_ro_incomplete |
Časté chyby
- Normalizovaný životný cyklus: not_sent → validating → queued → sent → processing → accepted | rejected | error.
- accepted znamená právne účinné odovzdanie. rejected znamená, že ju národný systém elektronickej fakturácie (v Rumunsku: ANAF) odmietol: opravte a odošlite znova. error je chyba prenosu na našej strane a dá sa bezpečne zopakovať.
- Odoslanie je nevratné: druhú kópiu tej istej faktúry už nemožno z národného systému elektronickej fakturácie stiahnuť. Preto je Idempotency-Key povinný.
- GET /v1/invoices/{id}/xml vám dá XML UBL / CIUS-RO (Rumunsko) úplne bez odoslania — pre vlastný archív alebo audit.
- Schránka: POST /v1/efactura/inbox/sync načíta nové správy, GET /v1/efactura/inbox ich vypíše a /download stiahne archív každej prijatej faktúry.
- Endpointy e-Factura fungujú iba pre rumunských tenantov; inak dostanete 404.
Otázky a odpovede pre vývojárov
Ako dlho trvá, kým ANAF (Rumunsko) faktúru prijme?
Líši sa to, od sekúnd po hodiny. Neblokujte predaj: odosielajte asynchrónne a accepted aj rejected spracúvajte ako udalosti.
Môžem získať XML CIUS-RO (Rumunsko) bez toho, aby som čokoľvek poslal do ANAF?
Áno. GET /v1/invoices/{id}/xml vygeneruje doklad bez odoslania a /efactura/validate s include_xml=true ho vráti zakódovaný v base64.
Ako často môžem spúšťať inbox/sync?
Najviac 10 volaní za minútu, ale v praxi ANAF v Rumunsku povoľuje zhruba jedno volanie zoznamu správ za minútu na CIF. Spúšťajte ho z cronu, každých niekoľko minút.
Čo robiť, ak stav zostáva error?
error je chyba prenosu alebo autentifikácie na našej strane, takže opakovanie je bezpečné. Ak pretrváva, pošlite request_id podpore.