API
Prezentare generala
Tipul API-ului
apiefactura.ro este de un API tip REST și utilizeaza formatul JSON pentru comunicarea datelor.
Securitate
Toate comunicarile prin intermediul acestui API sunt criptate folosind protocolul HTTPS/SSL pentru asigurarea securitatii. Accesul necriptat prin HTTP nu este permis și este respins automat.
Autentificarea la API se bazeaza pe o combinatie a cheii API a utilizatorului (Apikey) și a parolei API (Apipassword). Mai multe detalii despre autentificare pot fi gasite in sectiunea "Autentificare" a acestei documentatii.
URL de baza
URL-ul de baza pentru efectuarea cererilor catre API-ul apiefactura.ro este:
https://secure.apiefactura.ro/api/
Acest URL trebuie utilizat ca punct de plecare pentru construirea cererilor catre endpoint-urile API-ului.
Endpoint-uri disponibile
API-ul ofera mai multe endpoint-uri (puncte terminale) pentru diferite functionalitati, inclusiv autentificare, gestionarea licentelor, trimiterea și testarea documentelor, precum și obtinerea detaliilor despre documente.
Raspunsuri standard
API-ul furnizeaza raspunsuri standard in format JSON, care contin un camp "status" pentru a indica daca solicitarea a fost un succes sau a intampinat erori, un camp "message" pentru mesaje de clarificare, un camp "errors" pentru a lista eventualele erori și un camp "data" pentru datele returnate (daca exista).
Autentificare
Autentificarea la API-ul apiefactura.ro se realizeaza prin intermediul cheilor API și a parolei API ale utilizatorului. Aceasta este o masura de securitate esentiala pentru a asigura ca doar utilizatorii autorizati pot accesa și utiliza serviciile API-ului.
Pentru a efectua autentificarea, trebuie sa furnizati urmatoarele informatii:
- Apikey (Cheia API): Aceasta este o cheie unica generata pentru utilizator și este folosita pentru a identifica și autentifica solicitarile API. Apikey trebuie inclusa in antetul fiecarei solicitari catre API pentru a indica sursa solicitarii.
- Apipassword (Parola API): Parola API este o alta componenta a autentificarii și trebuie furnizata impreuna cu Apikey pentru a valida solicitarea. Aceasta asigura ca doar utilizatorii cu acces autorizat pot interactiona cu API-ul.
Este important sa mentionam ca autentificarea la API trebuie sa fie securizata și sa respecte cerintele de securitate. Prin urmare, urmatoarele aspecte trebuie avute in vedere:
- Toate solicitarile catre API trebuie sa includa atat Apikey, cat și Apipassword in antetul cererii pentru a fi validate corect.
- Comunicarea cu API-ul trebuie sa se realizeze prin intermediul protocolului HTTPS sau SSL pentru a asigura criptarea datelor și protejarea informatiilor confidentiale.
- In cazul in care autentificarea nu reușește sau una dintre cele doua componente (Apikey sau Apipassword) lipsește sau este incorecta, API-ul va respinge automat solicitarea.
Exemplu de autentificare generic:
curl -X GET "https://secure.apiefactura.ro/api/{endpoint}" -H "Apikey: {Apipassword}" -H "Apipassword: {Apipassword}"
Exemplu de autentificare pentru endpoint-ul testAuth:
curl -X GET "https://secure.apiefactura.ro/api/testAuth" -H "Apikey: {Apipassword}" -H "Apipassword: {Apipassword}"
Structura document
Aceasta este o descriere a campurilor obligatorii și optionale care alcatuiesc o factura, precum și informatii suplimentare pentru fiecare camp.
Variabila | Obligatoriu | Descriere |
---|---|---|
Informatii privind documentul | ||
number | obligatoriu | Acest camp reprezinta numarul unic al facturii și este esential pentru identificarea acesteia in evidenta financiara. Numarul poate fi format dintr-un prefix, cum ar fi seria. |
issueDate | obligatoriu | Data emiterii facturii este data in care factura este emisa și transmisa catre client. Aceasta trebuie sa fie in formatul "YYYY-MM-DD" (de exemplu, "2024-01-01"). |
currency | obligatoriu | Valuta in care este exprimata factura (de exemplu, "RON" pentru Lei Romanești). ISO 4217 |
dueDate | optional | Data scadentei platii facturii. Acest camp este optional și poate fi utilizat pentru a specifica data limita pana la care clientul trebuie sa efectueze plata. Aceasta trebuie sa fie in formatul "YYYY-MM-DD" (de exemplu, "2024-01-01"). In cazul in care nu se comunica "dueDate", factura va avea data scadenta data emiterii ("issueDate"). |
iban | optional | Contul bancar (IBAN) al companiei emitente in care se doreste plata. |
bank | optional | Numele bancii la care este deschis contul bancar al companiei emitente. Trebuie utilizat impreuna cu campul "iban". |
note | optional | Orice nota sau observatie suplimentara care trebuie inclusa in factura. |
deliveryDate | optional | Data livrarii bunurilor sau serviciilor pentru care se emite factura. Acest camp este optional, dar necesar in cazul schemei TVA ("vatScheme") K al cel putin un articol. |
invoiceCode | optional |
Tipul de factura:
"380" (Factura) "381" (Nota de creditare) "384" (Factura corectata) "389" (Autofactura) "751" (Factura informatii in scopuri contabile) Valoarea implicita este "380". |
Informatii privind emitentul | ||
obligatoriu | Adresa de e-mail a emitentului facturii, care poate fi utilizata pentru corespondenta și notificari. | |
name | obligatoriu | Numele complet al companiei emitente a facturii. |
address | obligatoriu | Adresa companiei emitente. |
city | obligatoriu | Orașul in care este situat sediul companiei emitente. |
subdivision | obligatoriu | Judetul/municipiul in care este situat sediul companiei emitente. |
country | obligatoriu | Tara in care este situata compania emitenta. ISO 3166 |
regCom | optional | Nr. Inreg. Registrul Comertului al companiei emitente |
Informatii privind clientul | ||
clientCui | obligatoriu | Codul Unic de Inregistrare (CUI) al clientului catre care se emite factura. Pentru persoane fizice se poate trimite CNP-ul persoanei fizice sau "0000000000000" |
clientName | obligatoriu | Numele complet al clientului catre care se emite factura. |
clientAddress | obligatoriu | Adresa clientului catre care se emite factura. |
clientSubdivision | obligatoriu | Judetul/municipiul clientului catre care se emite factura. |
clientCountry | obligatoriu | Tara in care este situat clientul. ISO 3166 |
clientSubdivision | obligatoriu | Judetul/municipiul clientului catre care se emite factura. |
clientRegCom | optional | Nr. Inreg. Registrul Comertului al clientului |
Informatii privind continutul documentului | ||
items | obligatoriu | Array ce contine articolele documentului |
Informatii privind un articol | ||
(items) name | obligatoriu | Numele produsului sau serviciului furnizat, care trebuie inclus in factura. |
(items) price | obligatoriu | Pretul unitar al produsului sau serviciului. Acesta indica costul unei singure unitati a produsului sau serviciului. |
(items) name | obligatoriu | Numele produsului sau serviciului furnizat, care trebuie inclus in factura. |
(items) quantity | obligatoriu | Cantitatea de produse sau servicii furnizate. Acest camp indica numarul de unitati vandute. |
(items) vatRate | obligatoriu | Rata TVA (Taxa pe Valoarea Adaugata) aplicata produsului sau serviciului. TVA-ul este adesea exprimat ca procent (de exemplu, 19%). |
(items) vatScheme | obligatoriu | Schema TVA aplicata pentru acest produs sau serviciu. Valori acceptate: "AE", "E", "S", "Z", "G", "O", "K", "L", "M" și "B". UNCL5305 |
(items) vatexCode | optional | Codul de exceptie de la TVA, daca este aplicabil. Acesta este un camp optional, dar necesar in cazul schemei TVA ("vatScheme") E. |
(items) classificationList | optional | N/A |
(items) classificationCode | optional | N/A |
testAuth (testare autentificare)
Acest endpoint are ca scop verificarea starii de autentificare a API-ului și furnizarea informatiilor despre licenta asociata autentificarii.
URL:
https://secure.apiefactura.ro/api/testAuth
Tipul de request:
GET
Variabile necesare:
Nu necesita variabile suplimentare header-ului de autentificare.
Exemplu de cerere:
curl -X GET "https://secure.apiefactura.ro/api/testAuth" -H "Apikey: {Apipassword}" -H "Apipassword: {Apipassword}"
Exemplu de cerere cu raspuns succes:
{
"status": "success",
"message": "API autentification successful.",
"data": {
"license": "{CUI licenta}"
}
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "API autentification failed."
}
getLicense (obtinere licenta)
Acest endpoint permite utilizatorilor sa obtina informatii despre licenta asociata cu autentificarea lor.
URL:
https://secure.apiefactura.ro/api/getLicense
Tipul de request:
GET
Variabile necesare:
Nu necesita variabile suplimentare header-ului de autentificare.
Exemplu de cerere:
curl -X GET "https://secure.apiefactura.ro/api/getLicense" -H "Apikey: {Apipassword}" -H "Apipassword: {Apipassword}"
Exemplu de cerere cu raspuns succes:
{
"status": "success",
"message": "License retrieved.",
"data": {
"id": "{ID-ul companiei in API}",
"cui": "{codul fiscal al companiei}",
"companyName": "{numele companiei}",
"status": "enabled",
"expire": "{data expirarii abonamentului}"
}
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "API autentification failed."
}
testDocument (validare document)
Acest endpoint permite utilizatorilor sa trimita documente pentru a le testa validitatea fara a le incarca in mod efectiv in sistemul API.
URL:
https://secure.apiefactura.ro/api/testDocument
Tipul de request:
POST
Variabile necesare:
Datele documentului sub forma unui obiect JSON (vezi structura document) in corpul cererii.
Exemplu de cerere:
curl -X POST -H "Apikey: {Apikey}" -H "Apipassword: {Apipassword}" -d '{
"documentData": {
"number": "ABC123",
"issueDate": "2025-04-28",
...
}
}' "https://secure.apiefactura.ro/api/testDocument"
Exemplu de cerere cu raspuns succes:
{
"status": "success",
"message": "Document has been validated with apiefactura.ro. Warning: Test endpoint, document has not been uploaded."
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "Test document failed.",
"errors": [
...
]
}
sendDocument (trimitere document)
Acest endpoint permite utilizatorilor sa trimita documente pentru a fi procesate de sistemul API. Documentul va fi validat și incarcat in sistem pentru a fi prelucrat ulterior.
URL:
https://secure.apiefactura.ro/api/sendDocument
Tipul de request:
POST
Variabile necesare:
Datele documentului sub forma unui obiect JSON (vezi structura document) in corpul cererii.
Exemplu de cerere:
curl -X POST -H "Apikey: {Apikey}" -H "Apipassword: {Apipassword}" -d '{
"documentData": {
"number": "ABC123",
"issueDate": "2025-04-28",
...
}
}' "https://secure.apiefactura.ro/api/sendDocument"
Exemplu de cerere cu raspuns succes:
{
"status": "success",
"message": "Document has been validated with apiefactura.ro. Pending upload and RO eFactura confirmation.",
"data": [
"id": "{ID document}",
"status": "{status document}",
"docName": "{nume document}",
"docName": "{nume document}"
]
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "Send document failed.",
"errors": [
...
]
}
Acest endpoint este destinat pentru trimiterea documentelor pentru procesare reala in sistem. Daca dorești doar sa testezi validarea documentelor, te rugam sa folosești functia "testDocument".
getDocument (obtinere document)
Acest endpoint permite utilizatorilor sa obtina detalii despre un document specific, utilizand ID-ul documentului. Se pot returna atat documente comunicate catre RO eFactura (exemplu: facturi emise), cat si documente primite din RO eFactura (exemplu: facturi furnizor).
URL:
https://secure.apiefactura.ro/api/getDocument
Tipul de request:
POST
Variabile necesare:
ID-ul documentului pentru care dorești sa obtii detalii.
Exemplu de cerere:
curl -X POST -H "Apikey: {Apikey}" -H "Apipassword: {Apipassword}" -d '{
"id": "{ID document}"
}' "https://secure.apiefactura.ro/api/getDocument"
Exemplu de cerere cu raspuns succes:
{
"status": "success",
"message": "Document found.",
"data": {
"id": "{ID-ul documentui}",
"type": "{tipul documentului",
"status": "{status document}",
"docName": "{nume document}",
"indexIncarcare ": "{index incarcarcare SPV}",
"indexDescarcare": "{index descarcare SPV}",
"invoiceCode": "{codul documentului}",
"issueDate": "{data emiterii}",
"dueDate": "{data scadenta}",
"totalValue": "{valoare totala}",
"currency": "{moneda}",
"seller": "{denumirea emitentului}",
"sellerInfo": [
... (informatii suplimentare despre emitent)
]
"buyer": "{denumirea cumparatorului}",
"buyerInfo": [
... (informatii suplimentare despre cumparator)
]
"content": [
... (continutul documentului - versiune BETA)
]
}
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "Document not found.",
"errors": [
...
]
}
getDocuments (obtinere lista documente)
Acest endpoint permite utilizatorilor sa obtina o lista de documente, utilizand un ID de start si filtre optionale, cum ar fi tipul documentului. Pot fi returnate atat documente comunicate catre RO eFactura (ex: facturi emise), cat si documente primite (ex: facturi furnizor). Sistemul returneaza maximum 50 de documente per cerere.
URL:
https://secure.apiefactura.ro/api/getDocuments
Tipul de request:
POST
Variabile obligatorii:
start
ID-ul documentului de la care doresti sa incepi listarea documentelor. Toate documentele returnate vor avea un ID mai mare sau egal cu acest ID.
Variabile optionale:
type
Tipul documentelor pe care doresti sa le obtii: outgoing sau incoming.
Exemplu de cerere:
curl -X POST -H "Apikey: {Apikey}" -H "Apipassword: {Apipassword}" -d '{
"start": "1"
}' "https://secure.apiefactura.ro/api/getDocuments"
Exemplu de cerere cu raspuns succes:
{
"errors": [],
"status": "success",
"message": "Documents found.",
"data": [
{
"id": "{ID-ul documentului}",
"type": "{tipul documentului}",
"status": "{status document}",
"docName": "{nume document}",
"createdOn": "{data prezentarii documentului}",
"processedOn": "{data procesarii documentului}"
},
{
"id": "{ID-ul documentului}",
"type": "{tipul documentului}",
"status": "{status document}",
"docName": "{nume document}",
"createdOn": "{data prezentarii documentului}",
"processedOn": "{data procesarii documentului}"
}
...
]
}
Exemplu de cerere cu raspuns eroare:
{
"status": "error",
"message": "No documents found."
}
downloadPdf (obtinere fisier PDF)
Aceasta functionalitate este in teste si va fi disponibila in curand.
downloadZip (obtinere arhiva ZIP)
Aceasta functionalitate este in teste si va fi disponibila in curand.
Status si tip document
In cadrul API-ului apiefactura.ro, documentele sunt identificate și clasificate prin intermediul a doua atribute importante: "status" (stare) și "type" (tip). Aceste doua atribute ofera informatii cruciale despre starea și natura documentului. Iata o descriere detaliata a acestor atribute și a valorilor posibile pentru fiecare:
status (stare document)
Starea documentului reprezinta stadiul actual al unui document in sistem. Aceasta indica in ce faza se afla documentul in procesul sau de manipulare și transmitere. Valorile posibile pentru atributul "status" sunt urmatoarele:
- lobby: documentul a fost receptionat si validat de catre apiefactura.ro, urmand sa fie comunicat catre RO eFactura.
- pending documentul a fost comunicat catre RO eFactura, se asteapta validarea sau invalidarea acestuia.
- validated documentul a fost validat de catre RO eFactura.
- errors documentul a fost invalidat de catre RO eFactura.
type (tip document)
Tipul documentului indica natura specifica a documentului. Acesta ne spune daca documentul este o factura de intrare, o factura de ieșire sau alt tip de document fiscal. Valorile posibile pentru atributul "type" sunt urmatoarele:
- outgoing: documentul reprezinta o factura de ieșire, adica o factura emisa de catre utilizatorul API catre un client.
- incoming: documentul reprezinta o factura de intrare, adica o factura primita de catre utilizatorul API de la un furnizor.