Validează în lot
Validează mai multe documente deodată, de tipuri diferite — facturi, declaraţii, notificări de transport în acelaşi lot. Fiecare primeşte verdictul lui, iar la final un sumar spune câte au trecut.
Corpul cererii
Se trimite ca JSON, în corpul cererii (Content-Type: application/json) — nu în şirul de interogare.
{id, xml} — cu id, rezultatele vin etichetate cu identificatorul tău, nu cu poziţia din listă.
{
"documente": [
"@efactura.xml",
"@etransport.xml",
"@d394.xml"
]
}
În exemplu, @efactura.xml, @etransport.xml, @d394.xml ţin locul unor documente întregi: trimiţi conţinutul fişierului — XML-ul ca text sau base64, un PDF ca base64 — nu numele lui.
{
"documente": [
"@efactura.xml",
"@efactura-stornare.xml",
"@efactura-intracomunitara.xml"
]
}
În exemplu, @efactura.xml, @efactura-stornare.xml, @efactura-intracomunitara.xml ţin locul unor documente întregi: trimiţi conţinutul fişierului — XML-ul ca text sau base64, un PDF ca base64 — nu numele lui.
Parametri de interogare
Cum se comportă
- Un element din
documentepoate fi direct XML-ul (text sau base64) sau obiectul{id, xml}— aceeaşi formă acceptată şi defacturila/reconciliere-facturişi/declaratii/deriva. Cuidprimeşti rezultatele etichetate cu identificatorul tău, nu cu poziţia din listă. - Validează mai multe documente ANAF (eterogene) într-un singur apel. Corpul e JSON:
{documente:[{id?, xml}]}, undexmle brut sau base64. Fiecare document e detectat automat și rutat la validatorul produsului lui (e-Factura, e-Transport, SAF-T, declarații „D"). - Un document defect nu rupe lotul: erorile sunt izolate per element și raportate, restul se validează normal.
- Plafon de 50 de documente per apel (validarea Schematron/XSD e costisitoare per document).
- Zero retenție: documentele primite nu se scriu și nu se loghează.
La ce folosește
- Validarea unui set de facturi/declarații exportate din ERP, într-o singură cerere.
- Pre-verificarea în masă a unor fișiere înainte de depunerea în SPV.
Structura răspunsului
id) sau indexul din listă.
null dacă documentul nu a fost recunoscut).
true/false, sau null când validarea nu a putut rula.
{cod,mesaj,camp}.
{cod,mesaj,camp}.
total, valide, invalide, nerecunoscute.
Exemple de răspuns
body: {"documente": ["@efactura.xml", "@etransport.xml", "@d394.xml"]}
{
"data": {
"rezultate": [
{
"id": 0,
"tip": "e-Factura",
"produs": "efactura",
"valid": true,
"nr_erori": 0,
"errors": [],
"warnings": []
}
],
"sumar": {
"total": 3,
"valide": 3,
"invalide": 0,
"nerecunoscute": 0
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 41+03: 00",
"request_id": "01a11303-d7d3-727f-b28c-1623f1a1fd48"
}
}
body: {"documente": ["@efactura.xml", "@efactura-stornare.xml", "@efactura-intracomunitara.xml"]}
{
"data": {
"rezultate": [
{
"id": 0,
"tip": "e-Factura",
"produs": "efactura",
"valid": true,
"nr_erori": 0,
"errors": [],
"warnings": []
}
],
"sumar": {
"total": 3,
"valide": 3,
"invalide": 0,
"nerecunoscute": 0
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 41+03: 00",
"request_id": "01a11303-d809-73d3-9354-bc92928f8e9c"
}
}
body: {"documente": ["@d100.xml", "@d390.xml", "@d311.xml", "@d394.xml"]}
{
"data": {
"rezultate": [
{
"id": 0,
"tip": "D100",
"produs": "declaratii",
"valid": true,
"nr_erori": 0,
"errors": [],
"warnings": []
}
],
"sumar": {
"total": 4,
"valide": 4,
"invalide": 0,
"nerecunoscute": 0
}
},
"meta": {
"generat_la": "2026-10-06T23: 59: 41+03: 00",
"request_id": "01a11303-d82a-711d-a0db-d7da897e29b4"
}
}
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 | Corp fără documente (sau gol), sau peste 50 de documente. |
| 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": "Corp fără documente (sau gol), sau peste 50 de documente.",
"camp": null,
"request_id": "0199c1f0-6e1a-7c3d-9b2f-4a8e5d1c7b04"
}
}