ANAF e-Factura (Румунија) преко API-ја

За Румунију: CIUS-RO провера, предаја у SPV, нормализовани статус, потписани одговор и пристигле фактуре.

За Румунију: CIUS-RO провера, предаја у SPV, нормализовани статус, потписани одговор и пристигле фактуре.

← Назад на API документацију

Прва фактура у 6 корака

  1. Покрените POST /v1/invoices/{id}/efactura/validate. Провера (CIUS-RO за Румунију) ништа не шаље националном систему е-фактурисања и тачно вам каже шта би било одбијено.
  2. Предајте фактуру са POST /v1/invoices/{id}/efactura/submit, увек са Idempotency-Key. Добијате submission_id и статус.
  3. Проверавајте GET /v1/efactura/submissions/{id} док не стигне до accepted или rejected.
  4. Нови упит ка националном систему е-фактурисања (у Румунији: ANAF) изнудите са POST /v1/efactura/submissions/{id}/refresh — рачуна се у корпу од 10 у минуту.
  5. Архиву са потписаним одговором ANAF-а (Румунија) преузмите преко GET /v1/efactura/submissions/{id}/download.

Сви endpoint-и

МетодаEndpointScopeIdempotency-KeyЗахтева / минут
GET/invoices/{invoice_id}/xml
Преузми UBL / CIUS-RO XML (Румунија)
invoices:read—120
POST/invoices/{invoice_id}/efactura/validate
Предпровера (CIUS-RO за Румунију) — валидација без слања
efactura:read—120
POST/invoices/{invoice_id}/efactura/submit
Пошаљи фактуру ANAF-у (SPV, Румунија)
efactura:submitобавезно10
GET/efactura/submissions
Листа слања ANAF-у (Румунија)
efactura:read—120
GET/efactura/submissions/{submission_id}
Преузми једно слање
efactura:read—120
POST/efactura/submissions/{submission_id}/refresh
Упит ANAF-у (Румунија) о тренутном стању
efactura:read—10
GET/efactura/submissions/{submission_id}/download
Преузми архиву потписаног одговора
efactura:read—120
GET/efactura/inbox
Фактуре добављача примљене преко SPV-а (Румунија)
efactura:read—120
GET/efactura/inbox/{inbound_id}
Преузми једну улазну фактуру
efactura:read—120
GET/efactura/inbox/{inbound_id}/download
Преузми архиву примљене фактуре
efactura:read—120
POST/efactura/inbox/sync
Преузми нове SPV поруке (Румунија) у сандуче
efactura:read—10

Шта је 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,
# па се /inbox/sync рачуна у квоту слања од 10/мин. Покрећите га преко cron-а, не прозивајте га.

https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json

Национално е-фактурисање (ANAF e-Factura, Румунија)

not_sentvalidatingqueuedsentprocessingacceptedrejectederror

Грешке

СтатусТипКод
422invalid_request_errorcius_ro_incomplete

Честе грешке

  • Нормализован животни циклус: not_sent → валидиране → в опашка → изпратен → обработка → accepted | rejected | грешка.
  • accepted значи да је фактура правно пренета. rejected значи да ју је национални систем е-фактурисања (у Румунији: ANAF) одбио: исправите је и поново предајте. error је грешка преноса на нашој страни и поновни покушај је безбедан.
  • Предаја је неповратна: други примерак исте фактуре више се не може повући из националног система е-фактурисања. Зато је Idempotency-Key обавезан.
  • GET /v1/invoices/{id}/xml вам даје UBL / CIUS-RO XML (Румунија) без икакве предаје — за сопствену архиву или ревизију.
  • Сандуче: POST /v1/efactura/inbox/sync повлачи нове поруке, GET /v1/efactura/inbox их приказује, а /download преузима архиву сваке улазне фактуре.
  • Endpoint-и за e-Factura раде само за румунске tenant-е; у супротном добијате 404.

Питања и одговори за програмере

Колико је ANAF-у (Румунија) потребно да прихвати фактуру?

Различито, од неколико секунди до неколико сати. Немојте блокирати продају: предајте асинхроно и accepted и rejected третирајте као догађаје.

Могу ли да добијем CIUS-RO XML (Румунија) без слања било чега ANAF-у?

Да. GET /v1/invoices/{id}/xml генерише документ без предаје, а /efactura/validate са include_xml=true враћа га кодираног у base64.

Колико често смем да покрећем inbox/sync?

Највише 10 позива у минуту, али у пракси у Румунији ANAF дозвољава отприлике један позив за листу порука у минуту по CIF-у. Покрећите га из cron-а, на сваких неколико минута.

Шта да радим ако статус остане грешка?

грешка је грешка преноса или аутентикације на нашој страни, па је поновни покушај безбедан. Ако се понавља, пошаљите request_id подршци.