ANAF e-Factura (Rumunsko) cez API

Pre Rumunsko: CIUS-RO predkontrola, odoslanie do SPV, normalizovaný stav, podpísaná odpoveď a doručené faktúry.

Pre Rumunsko: CIUS-RO predkontrola, odoslanie do SPV, normalizovaný stav, podpísaná odpoveď a doručené faktúry.

← Späť na dokumentáciu API

Prvá faktúra v 6 krokoch

  1. 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é.
  2. Faktúru podajte cez POST /v1/invoices/{id}/efactura/submit, vždy s Idempotency-Key. Dostanete submission_id a status.
  3. Dotazujte GET /v1/efactura/submissions/{id}, kým nedosiahne accepted alebo rejected.
  4. 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.
  5. Archív s podpísanou odpoveďou ANAF (Rumunsko) stiahnete cez GET /v1/efactura/submissions/{id}/download.

Všetky endpointy

MetódaEndpointScopeIdempotency-KeyPož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:submitpovinné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)

not_sentvalidatingqueuedsentprocessingacceptedrejectederror

Chyby

StavTypKód
422invalid_request_errorcius_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.