Forathugun (CIUS-RO fyrir Rúmeníu), sending í landskerfið, normaliseruð staða, undirritað svar og innhólf innkominna reikninga frá birgjum.
Fyrsti reikningurinn þinn í 6 skrefum
- Keyrðu POST /v1/invoices/{id}/efactura/validate. Forathugunin (CIUS-RO fyrir Rúmeníu) sendir ekkert til landskerfisins og segir þér nákvæmlega hvað yrði hafnað.
- Skráðu hann með POST /v1/invoices/{id}/efactura/submit, alltaf með Idempotency-Key. Þú færð submission_id og stöðu.
- Fylgstu með GET /v1/efactura/submissions/{id} þar til hann nær accepted eða rejected.
- Þvingaðu nýja fyrirspurn til landskerfis rafrænna reikninga með POST /v1/efactura/submissions/{id}/refresh — hún telst í 10-á-mínútu fötuna.
- Sæktu undirritað svarskjalasafn landskerfisins með GET /v1/efactura/submissions/{id}/download.
Allir endapunktar
| Aðferð | Endapunktur | Scope | Idempotency-Key | Beiðnir / mínútu |
|---|---|---|---|---|
| GET | /invoices/{invoice_id}/xml Sækja UBL XML (CIUS-RO fyrir Rúmeníu) | invoices:read | — | 120 |
| POST | /invoices/{invoice_id}/efactura/validate Forathugun — staðfesta án sendingar | efactura:read | — | 120 |
| POST | /invoices/{invoice_id}/efactura/submit Senda reikninginn í landskerfi rafrænna reikninga | efactura:submit | krafist | 10 |
| GET | /efactura/submissions Lista sendingar í landskerfið | efactura:read | — | 120 |
| GET | /efactura/submissions/{submission_id} Sækja eina sendingu | efactura:read | — | 120 |
| POST | /efactura/submissions/{submission_id}/refresh Biðja landskerfið um núverandi stöðu | efactura:read | — | 10 |
| GET | /efactura/submissions/{submission_id}/download Sækja undirritað svarskjalasafn | efactura:read | — | 120 |
| GET | /efactura/inbox Reikningar birgja sem bárust um landskerfið | efactura:read | — | 120 |
| GET | /efactura/inbox/{inbound_id} Sækja einn innkominn reikning | efactura:read | — | 120 |
| GET | /efactura/inbox/{inbound_id}/download Sækja skjalasafn innkomins reiknings | efactura:read | — | 120 |
| POST | /efactura/inbox/sync Sækja ný skilaboð úr landskerfinu í innhólfið | efactura:read | — | 10 |
Hvað eru forritaskil 4invoices
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,
# þannig að /inbox/sync telst í 10/mín sendingarfötuna. Keyrðu það af cron, ekki kanna það.https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json
Ferðin um landskerfi rafrænna reikninga
Villur
| Staða | Tegund | Kóði |
|---|---|---|
| 422 | invalid_request_error | cius_ro_incomplete |
Algeng mistök
- Normaliseraður lífsferill: not_sent → validating → queued → sent → processing → accepted | rejected | error.
- accepted þýðir að hann var löglega sendur. rejected þýðir að landskerfi rafrænna reikninga hafnaði honum: lagfærðu og sendu aftur. error er flutningsbilun hjá okkur og er óhætt að endurreyna.
- Sending er óafturkræf: afrit af sama reikningi verður ekki tekið til baka úr landskerfinu. Þess vegna er Idempotency-Key skylda.
- GET /v1/invoices/{id}/xml gefur þér UBL XML (CIUS-RO fyrir Rúmeníu) án nokkurrar sendingar — fyrir þitt eigið safn eða endurskoðun.
- Innhólf: POST /v1/efactura/inbox/sync sækir ný skilaboð, GET /v1/efactura/inbox listar þau, og /download sækir skjalasafn hvers innkomins reiknings.
- e-Factura-endapunktarnir virka aðeins fyrir rúmenska leigjendur; annars færðu 404.
Spurningar og svör fyrir þróendur
Hversu lengi er landskerfi rafrænna reikninga að samþykkja reikning?
Það er breytilegt, frá sekúndum upp í klukkustundir. Ekki hindra söluna: sendu ósamstillt og meðhöndlaðu accepted og rejected sem atburði.
Get ég fengið XML reikningsins án þess að senda nokkuð til landskerfisins?
Já. GET /v1/invoices/{id}/xml myndar skjalið án sendingar, og /efactura/validate með include_xml=true skilar því base64-kóðuðu.
Hversu oft get ég keyrt inbox/sync?
Í mesta lagi 10 köll á mínútu, en í Rúmeníu leyfir ANAF í reynd u.þ.b. eitt kall á skilaboðalista á mínútu á hvert CIF. Keyrðu það af cron, á nokkurra mínútna fresti.
Hvað geri ég ef staðan er áfram error?
error er flutnings- eða auðkenningarbilun hjá okkur, þannig að óhætt er að endurreyna. Ef hún heldur áfram sendu request_id til aðstoðar.