Randează factura
Factura în PDF, de trimis clientului. Răspunsul e documentul, nu JSON; dacă ai nevoie de PDF cu XML-ul încorporat, vezi Factur-X din zona de interoperabilitate.
Corpul cererii
Corpul cererii e documentul întreg, trimis brut (Content-Type: application/xml) — nu un obiect cu câmpuri.
Parametri de interogare
Cum se comportă
- Documentul se poate trimite şi ca fişier:
multipart/form-datacu câmpulfisier(curl -F fisier=@document.xml), în locul corpului brut. Conţinutul fişierului devine corpul cererii, deci rezultatul e identic; opţiunile rămân în query string, iar alt câmp de formular lângăfisierdă422 camp_necunoscut. - Primeşte XML-ul unei facturi CIUS-RO şi întoarce PDF-ul ei — reprezentarea vizuală, umană, a documentului. Răspunsul e binar (
application/pdf), nu JSON. - PDF-ul se generează local şi in-memory: nu se apelează niciun serviciu extern şi nimic nu se scrie pe disc. Ca la celelalte rute, e zero retenţie — XML-ul primit nu se loghează.
- Util pentru a arăta factura unui om (client, contabil) sau pentru a o arhiva alături de XML-ul depus. XML-ul rămâne documentul oficial; PDF-ul e doar reprezentarea lui.
- Un XML care nu se poate parsa întoarce
422cu un corp JSON{eroare:{cod,mesaj,camp}}(nu PDF), ca eroarea să fie citibilă.
La ce folosește
- Afişarea sau tipărirea facturii pentru client.
- Arhivarea unui PDF lizibil alături de XML-ul CIUS-RO depus.
- Ataşarea PDF-ului la un e-mail de notificare a facturii.
Structura răspunsului
Toate câmpurile de mai jos sunt în data.
Content-Type: application/pdf), nu un envelope JSON.
Exemple de răspuns
body: @efactura.xml
Răspunsul e un document binar, nu JSON: application/pdf, 23,5 KB în acest exemplu.
body: @efactura-corectata.xml
Răspunsul e un document binar, nu JSON: application/pdf, 23,5 KB în acest exemplu.
body: @efactura-stornare.xml
Răspunsul e un document binar, nu JSON: application/pdf, 22,3 KB în acest exemplu.
body: @efactura-intracomunitara.xml
Răspunsul e un document binar, nu JSON: application/pdf, 25,3 KB în acest exemplu.
Coduri de eroare
| Cod | Slug | Când apare |
|---|---|---|
| 401 | neautentificat | Token lipsă, invalid, expirat sau revocat. |
| 403 | feature_indisponibil | Planul curent nu include funcţia de care ţine ruta. |
| 422 | xml_invalid | Corpul nu e XML parsabil. Eroarea vine ca JSON {eroare:{cod,mesaj,camp}}, nu ca PDF. |
| 429 | cota_depasita | Cota lunară a planului a fost depăşită (vezi Retry-After). |
Erorile modulului Anaf au acelaşi plic ca restul platformei, cu două câmpuri în plus: {eroare: {cod, mesaj, camp, request_id}}. eroare.cod e stabil şi e cel după care ramifici în cod; la validare (422) codul e specific cazului: xml_invalid, xml_nu_e_factura, unitate_necunoscuta, luna_invalida ş.a. camp arată câmpul vinovat, când se poate identifica.
{
"eroare": {
"cod": "xml_invalid",
"mesaj": "Corpul nu e XML parsabil. Eroarea vine ca JSON {eroare:{cod,mesaj,camp}}, nu ca PDF.",
"camp": null,
"request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
}
}