Docs

3 API3.1

3.1

Rulare de probă: POST /validate

Rulează aceleași verificări ca transmiterea. Nu stochează și nu trimite nimic.

  • În sandbox

În cuvinte simple

O rulare de probă verifică o factură așa cum ar face-o o transmitere reală, fără să trimită nimic, astfel încât un partener să poată găsi orice problemă înainte ca factura unui client să plece undeva.

POST /validate rulează aceleași verificări ca o transmitere și răspunde cu un raport. Nu pune nimic în coadă și nu trimite nimic. Apelul necesită o cheie cu domeniul submit. Corpul cererii este JSON, de cel mult 5 MB.

Sfat

Începeți de aici când mapați un client nou.

Cererea

CâmpSemnificație
invoice_refObligatoriu. ID-ul propriu al documentului în ERP, de cel mult 100 de caractere. Apare în fiecare eveniment de stare.
routeObligatoriu. DE-XRECHNUNG, PEPPOL, FR-PA, PL-KSEF sau RO-EFACTURA.
documentO factură în modelul canonic. Trimiteți acest câmp sau un export, nu pe amândouă.
export, connectorUn export ERP așa cum l-a scris ERP-ul, cu connector setat pe business-central sau sap-b1. Trimiteți acest câmp sau un document, nu pe amândouă. Pe un alt canal decât Germania, raportul începe cu un nivel mapping. mapping_version alege o altă versiune decât cea activă (consultați versiunile de mapare).
formatsDocumentele de generat, acolo unde canalul permite o alegere. Germania: oricare dintre xrechnung-ubl (implicit), xrechnung-cii și zugferd; KoSIT rulează o dată pentru fiecare format, iar pentru PDF rulează în plus Mustang și veraPDF. Franța: ubl, cii sau facturx.
environmentOpțional. Trebuie să corespundă mediului cheii dumneavoastră.
erp_totalsTotalurile calculate de ERP-ul dumneavoastră: payable_amount, currency și, opțional, tax_amount, ca șiruri de caractere. Dacă diferă de totalurile pe care serviciul le calculează din liniile facturii, raportul conține o constatare EI-TOTALS-MISMATCH pe erp_totals.payable_amount.

Lista completă a câmpurilor este în referință.

O factură care trece verificările

Cererea exemplu este validate-de-ok.json, o factură germană fictivă. Raportul are valid: true, un document cu SHA-256-ul său și patru niveluri trecute.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @validate-de-ok.json
Răspuns200 OK
{
  "valid": true,
  "route": "DE-XRECHNUNG",
  "documents": [
    {
      "sha256": "e21ab9d5097022bea30bfa9f9fe0a4c7ca9afdbd672b0ce2f9150461db773625",
      "kind": "xrechnung-ubl",
      "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi... (7,092 characters, shortened for these docs)"
    }
  ],
  "layers": [
    {
      "findings": [],
      "passed": true,
      "layer": "schema"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "mapping"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "pre-check"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "kosit"
    }
  ]
}
Înregistrat pe 7 oct. 2026. Rulați comanda în propriul folder, cu fișierul exemplu alături.

O factură care nu trece verificările

Aceeași factură fără numele vânzătorului, validate-de-missing-seller-name.json. O rulare de probă răspunde tot 200. valid este false, iar fiecare constatare indică câmpul și cine îl corectează. Cele două linii evidențiate sunt cele de urmărit: code din catalog și field din datele clientului.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @validate-de-missing-seller-name.json
Răspuns200 OK
{
  "valid": false,
  "route": "DE-XRECHNUNG",
  "layers": [
    {
      "findings": [
        {
          "code": "EI-SCHEMA",
          "field": "seller.name",
          "related": [
            {
              "code": "Art.226(5)",
              "source": "pre-check"
            }
          ],
          "fix_hint": "Read the JSON path in the error and correct the client mapping.",
          "who_fixes": "us",
          "source": "schema",
          "message": "We could not read this invoice from your export. We are correcting our mapping; if a field is missing in the ERP we will tell you which one."
        }
      ],
      "passed": false,
      "layer": "schema"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "mapping"
    },
    {
      "findings": [
        {
          "code": "Art.226(5)",
          "field": "seller.name",
          "related": [
            {
              "code": "EI-SCHEMA",
              "source": "schema"
            }
          ],
          "fix_hint": "Complete the party's name and address in the master data.",
          "who_fixes": "erp",
          "source": "pre-check",
          "message": "A company name or street address is missing. Complete the company or customer record in the ERP."
        }
      ],
      "passed": false,
      "layer": "pre-check"
    }
  ]
}
Înregistrat pe 7 oct. 2026.

Citirea raportului

  • valid este true doar când toate nivelurile au trecut.
  • layers rulează în ordine: schema, mapping, pre-check, apoi validatoarele proprii ale canalului, numite după ce a rulat (de exemplu KoSIT-XRechnung-3.0.2).
  • Fiecare constatare are un code din catalog, câmpul field, who_fixes (us sau erp), un fix_hint, un message și nivelul source. Pagina Erori și catalogul enumeră toate codurile.
  • documents enumeră ce s-a generat, cu SHA-256-ul fiecărui document și, pentru un fișier de cel mult 2 MiB, cu octeții săi în content_base64. Apare când factura este validă.

Alte răspunsuri

CodSemnificație
200Un raport, pentru o factură validă sau nu.
400Cererea nu poate fi citită: nu este JSON, un câmp este greșit sau sunt prezente atât document, cât și export.
401Lipsește cheia sau cheia este necunoscută.
403Cheia nu are domeniul submit.
413Corpul cererii depășește 5 MB (payload-too-large).
422Un număr peste limite, de exemplu unul de peste 40 de caractere (EI-SCHEMA, cu indicarea câmpului). Orice altă constatare vine în raportul 200.
429Prea multe cereri pentru cheie. Așteptați numărul de secunde din Retry-After.
503Toate validatoarele sunt ocupate (busy). Reîncercați după numărul de secunde din Retry-After.
curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @not-json.txt
Răspuns400 Bad Request
{
  "detail": "The request is not valid JSON.",
  "type": "https://eurinvoice.com/problems/bad-request",
  "title": "The request could not be read",
  "status": 400
}
Înregistrat pe 7 oct. 2026.

Pe această pagină