Documentație acces API factureaza.ro
Resurse și URL-uri
API-ul factureaza.ro este un API de tip REST, utilizând verbele HTTP corespunzătoare operației invocate.
API-ul este accesibil doar prin HTTPS.
Sunt accesibile următoarele operații pentru modelele de mai jos:
LISTARE https://factureaza.ro/api/[model-plural].xml (HTTP GET)DETALII https://factureaza.ro/api/[model]/[id].xml (HTTP GET)ȘTERGERE https://factureaza.ro/api/[model]/[id].xml (HTTP DELETE)MODIFICARE https://factureaza.ro/api/[model]/[id].xml (HTTP PUT)CREARE https://factureaza.ro/api/[model-plural].xml (HTTP POST)
Exemple folosind curl:
LISTARE curl -i -u [api_key]:x https://factureaza.ro/api/clients.xmlDETALII curl -i -u [api_key]:x https://factureaza.ro/api/clients/1.xmlȘTERGERE curl -i -X DELETE -u [api_key]:x https://factureaza.ro/api/clients/1.xmlMODIFICARE curl -i -X PUT -F "client[name]=Cubus" -u [api_key]:x https://factureaza.ro/api/clients/1.xmlCREARE curl -i -X POST -d "client[name]=Cubus" -d "client[uid]=999999" -u [api_key]:x https://factureaza.ro/api/clients/1.xml
Facturile, proformele, avizele și chitanțele pot fi descărcate direct în format PDF, specificând în URL formatul respectiv:
DESCĂRCARE PDF https://factureaza.ro/api/[model-plural]/[id].pdf (HTTP GET)
Autentificare
Cheia API este definită per utilizator și se poate (re)genera din contul tău factureaza.ro, la punctul “Contul meu” -> “Cheie API”
Sunt disponibile două metode de autentificare:
- HTTP Authentication (se va folosi cheia API ca username, parola fiind ignorată)
- Parametru api_key adăugat fiecărui request.
Rezultate și erori
Resursele sunt returnate în format xml. Rezultatul unui request semnalează prin status-ul HTTP returnat:
- 200 Success (după un request GET, PUT, sau DELETE reușit)
- 201 Created (după un request POST reușit)
- 400 Resource Invalid (request formatat greșit)
- 401 Unauthorized
- 404 Resource Not Found
- 405 Method Not Allowed (Verbul HTTP folosit nu este acceptat pentru această resursă)
- 422 Unprocessable Entity (Request-ul a fost sintactic corect, dar modificările cerute nu sunt valide)
- 500 Application Error (Eroare în sistem)
Pentru cereri corecte sintactic, dar care nu îndeplinesc criteriile de validare ale sistemului, erorile vor fi returnate in corpul răspunsului sub forma:
<errors>
<error>Mesaj eroare</error>
<error>Alt mesaj eroare</error>
...
</errors>
După adăugarea unei înregistrări, in header-ul `Location’ al răspunsului va fi returnat URL-ul la care noua înregistare este disponibilă.
Câmpuri și tipuri de date
Toate modelele conțin următoarele câmpuri:
id- identificatorul unic al înregistrăriicreated_at- data și ora creării înregistrăriiupdated_at- data și ora actualizării înregistrării
Câmpurile marcate cu (R) sunt read-only; ele se calculează de sistem pe baza celorlalte date.
Tipuri de date:
- formatul pentru dată este
AAAA-LL-DD - valori boolean vor fi reprezentate cu
true / false - se folosesc identificatori (
id) numerici
Operațiuni de scriere
- Câmpurile marcate cu * sunt obligatorii
- Modelele agregate vor fi specificate prin identificator. Exemplu: se va specifica currency_id pentru moneda.
- datele pot fi trimise ca xml sau trimise ca parametrii in request-ul HTTP. în ambele cazuri, se va specifica totdeauna și numele modelului.
- la operațiuni de actualizare (POST) nu e necesară decât trimiterea câmpurilor actualizate
Exemple scriere
Modificare nume client (xml):
curl -H 'Content-Type: application/xml'
-X PUT https://factureaza.ro/api/clients/1.xml -u [api_key]:x \
-d '<?xml version="1.0" encoding="UTF-8"?>
<client>
<name>Cubus</name>
<uid>999999</uid>
</client>'
Modificare nume client (application/x-www-form-urlencoded):
curl -X PUT https://factureaza.ro/api/clients/1.xml -u [api_key]:x \
-d 'client[name]=Cubus&client[uid]=999999'
Adăugare produs (xml):
curl -H 'Content-Type: application/xml'
-X POST https://factureaza.ro/api/products.xml -u [api_key]:x \
-d '<?xml version="1.0" encoding="UTF-8"?>
<product>
<description>abonament factureaza.ro</description>
<price>12</price>
<currency_id>1</currency_id>
</product>'
După adăugarea unei înregistrări, in header-ul `Location’ al răspunsului va fi returnat URL-ul la care noua înregistare este disponibilă, iar în body va fi returnată toată înregistrarea
HTTP/1.1 201 Created
...
Location: https://factureaza.ro/api/products/741342701
...
<?xml version="1.0" encoding="UTF-8"?>
<product>
<code></code>
<created_at type="datetime">2011-05-19T14:53:41+03:00</created_at>
<description>abonament factureaza.ro standard</description>
<id type="integer">741342701</id>
<price type="decimal">12.0</price>
...
</product>
Modele
Factura
Nume model: invoice
Poate fi descărcate direct și în format PDF:
DESCĂRCARE PDF https://factureaza.ro/api/invoices/[id].pdf (HTTP GET)
Datele emitentului
-
account_banks(R) Conturile bancare ale emitentului documentului, de forma:<account_banks> <bank> <name>Banca Transilvania</name> <bic>1000000</bic> <accounts> <account> <iban>RO99BTRL000000000000</iban> <currency>EUR</currency> </account> ... more accounts ... </accounts> </bank> ... more banks ... </account_banks> account_xxx(R) - datele emitentului; vezi și datele contului; la scriere se preiau automat din datele contuluibranch_office_id- identificatorul punctului de lucrubranch_office_data(R) - datele punctului de lucru (vezi puncte de lucru)
Datele clientului
client_id *(RW) - identificatorul clientuluiclient_xxx(R) - toate datele unui client; (vezi clienți); la scriere se preiau automat din client
Moneda facturii
currency_id *- moneda care apare pe facturăinput_currency_id- moneda în care se introduc sumele de pe facturăexchange_rate- cursul de schimb, obligatoriu pentru documente cu sumele introduse în alte monede (ex: 4.2 ptr EUR/RON)
Documentele factureaza.ro pot fi emise în orice monedă. Există trei cazuri:
- Sumele se introduc și se afișează în RON
- se va specifica doar
currency_id
- se va specifica doar
- Sumele se introduc într-o monedă externă și se afișează în moneda externă și în RON
- se va specifica doar la
currency_idfiind moneda externă
- se va specifica doar la
- Sumele se introduc într-o monedă externă și se afișează doar în RON
- se specifică RON ca
currency_idși moneda externa cainput_currency_id
- se specifică RON ca
Datele documentului
total(R) - total facturătotal_due(R) - rest de platădocument_date *- data documentuluidocument_series_id *- seria din care face parte acest documentdocument_series_counter *- numărul de ordine al documentului în cadrul serieivat_type *- tipul de TVA aplicabil:- 1: TVA (standard)
- 2: TVA inclus
- 3: TVA scutit cu drept de deducere
- 4: TVA scutit făra drept de deducere
due_days- numărul de zile după care factura devine scadentădue_date(R) - data scadenței (calculată dindue_days)document_state- starea documentului; valori posibile: “draft”, “open”, “closed”, “cancelled”
Date legate de expediție
delegate_iddelegate_cnp(R)delegate_first_name(R)delegate_identity_document(R)delegate_identity_document_issue_date(R)delegate_identity_document_issued_by(R)delegate_identity_document_number(R)delegate_identity_document_series(R)delegate_last_name(R)expedition_time- data și ora expediției
Alte câmpuri
late_fees_cycle- ciclul de calcul al penalităților; valori posibile: [d,m] daily/monthlylate_fees_percentage- procentul penalizare aplicabil per ciclulocale- limba documentului (codul ISO), implicit este ‘ro’lower_annotation- notele adiționale, observații etc.delivery_date- Data livrăriiadvance_date- Data plății avansuluimeans_of_transport- mijlocul de transportmeans_of_transport_number- informații de înmatriculare ale mijlocului de transportnotice_date- data avizuluinotice_number- numărul avizuluiuser_id(R) - utilizatorul emitenthashcode(R) - cod care poate fi folosit pentru shareing-ul read only al documentului la URL-ulhttps://factureaza.ro/vizualizare/[hashcode]
Flaguri
flag_downloaded_pdf- documentul a fost descărcat în format PDFflag_filed- documentul a fost înregistrat în contabilitateflag_sent_by_email- documentul a fost trimis prin emailflag_sent_by_fax- documentul a fost trimis prin faxflag_sent_by_postal_mail- documentul a fost trimis prin poștă
Pozițiile de pe factură
Factura va conține una sau mai multe poziții facturate cu următoarele câmpuri:
description*- descrierea produsului/serviciuluiunit *- unitatea de măsuraunit_count *- numărul unitățilorvat- valoarea TVA în procenteposition- ordinea în documentinput_currency_price**- prețul unitar fără TVA în moneda secundarăinput_currency_total**- prețul total cu TVA în moneda secundarăprice**- prețul unitar fără TVA în moneda principalătotal**- prețul total cu TVA în moneda principală
** se specifica fie prețul unitar fie prețul total și doar pentru o singură monedă. Vezi și detalii despre moneda facturii
Pozițiile de discount
discount_rate *- discount în procentetype- se specifica valoarea “DiscountPosition”
Pentru poziții de discount, câmpurile price, total, unit, unit_count nu se specifică ! Exemplu:
<document_position>
<type>DiscountPosition</type>
<description>Discount conform contract (20.0%)</description>
<discount_rate>20.0</discount_rate>
</document_position>
Stările facturii
Stările facturii nu se pot schimba direct, ci prin request PUT la:
- https://factureaza.ro/api/[model-plural]/[id]/mark_draft.xml - pentru starea
ciornă - https://factureaza.ro/api/[model-plural]/[id]/mark_open.xml - pentru starea
emis - https://factureaza.ro/api/[model-plural]/[id]/mark_closed.xml - pentru starea
închis - https://factureaza.ro/api/[model-plural]/[id]/mark_cancelled.xml - pentru starea
anulat
Exemple editare facturi
Adăugare factură (xml)
curl -i -H 'Content-Type: application/xml' \
-X POST https://factureaza.ro/api/invoices.xml -u [api_key]:x \
-d '<?xml version="1.0" encoding="UTF-8"?>
<invoice>
<client_id>100</client_id>
<currency_id>200</currency_id>
<document_date>2011-05-20</document_date>
<document_series_id>300</document_series_id>
<document_series_counter>10</document_series_counter>
<vat_type>1</vat_type>
<document_positions>
<document_position>
<description>ABONAMENT BASIC</description>
<unit>luni</unit>
<unit_count>12</unit_count>
<price>12</price>
<vat>24</vat>
</document_position>
<document_position>
<type>DiscountPosition</type>
<description>Reducere pentru plata in avans</description>
<discount_rate>10</discount_rate>
</document_position>
</document_positions>
</invoice>'
Modificare factură (xml)
curl -i -H 'Content-Type: application/xml' \
-X PUT https://factureaza.ro/api/invoices/1065253716.xml -u 123:x \
-d '<?xml version="1.0" encoding="UTF-8"?>
<invoice>
<due_days>10</due_days>
</invoice>'
Modificare poziții (xml) toate pozițiile trebuie specificate, nu doar cele actualizate.
curl -i -H 'Content-Type: application/xml' \
-X PUT https://factureaza.ro/api/invoices/100.xml -u [api_key]:x \
-d '<?xml version="1.0" encoding="UTF-8"?>
<invoice>
<document_positions>
<document_position>
<description>ABONAMENT STANDARD</description>
<unit>luni</unit>
<unit_count>12</unit_count>
<price>35</price>
<vat>24</vat>
</document_position>
<document_position>
<type>DiscountPosition</type>
<description>Reducere pentru plata in avans</description>
<discount_rate>10</discount_rate>
</document_position>
</document_positions>
</invoice>'
Factură proforma
Nume model: proforma_invoice
Poate fi descărcate direct și în format PDF:
DESCĂRCARE PDF https://factureaza.ro/api/proforma_invoices/[id].pdf (HTTP GET)
(vezi factură)
Aviz
Nume model: notice
Poate fi descărcate direct și în format PDF:
DESCĂRCARE PDF https://factureaza.ro/api/notices/[id].pdf (HTTP GET)
(vezi factură)
Chitanță
Nume model: invoice
Poate fi descărcate direct și în format PDF:
DESCĂRCARE PDF https://factureaza.ro/api/receipts/[id].pdf (HTTP GET)
vezi factură, precum și următoarele câmpuri adiționale:
receipt_amount*- suma încasată în RONamount(R) - suma încasată calculată în moneda facturii aferente;- ex: pentru 100 RON încasați ptr o factură în RON va returna 100
- ex: pentru 100 RON încasați ptr o factură în EUR va returna suma in EUR (cca 25)
invoice_id- identificatorul facturii aferente acestei chitanțeinvoice_date- data facturii aferente acestei chitanțeinvoice_number- numărul facturii aferente acestei chitanțe
Datele emitentului
user_cnpuser_first_nameuser_iduser_identity_documentuser_identity_document_issue_dateuser_identity_document_issued_byuser_identity_document_numberuser_identity_document_seriesuser_last_name
Plată
Nume model: payment
amount *- suma achitatăcurrency_id- idenfiticatorul monedei plățiicurrency(agregat, R) - moneda plățiipayment_date *- data plățiidescription- descriereinvoice_id **- identificatorul facturii aferenteproforma_invoice_id **- identificatorul proformei aferente
** Se va specifica cel puțin unul dintre câmpurile invoice_id și proforma_invoice_id
Serii documente
Nume model: polimorfic, și anume:
- facturi, accesibile la
/api/invoice_series - proforme, accesibile la
/api/proforma_invoice_series - avize, accesibile la
/api/notice_series - chitanțe, accesibile la
/api/receipt_series
Câmpuri:
counter_current- numărul ultimului document generat pe baza acestei seriiprefix- prefixul numerelor generatesuffix- sufixul numerelor generatesepparator- separatorul folosit la generarea numereloryear- anul valabilității seriei
Client
Nume model: client; permite scrierea (adăugare, modificare, ștergere). Vezi instrucțiunile pentru scriere.
name *- Numele clientuluiis_company- Indică dacă clientul este persoană juridică
Date fiscale
registration_id- numărul de înregistrare la registrul comerțuluitax_id- identificator TVA (RO pentru plătitori TVA din România)uid *- identificator fiscal (CIF pentru România)
Adresă
address *- adresa clientuluiaddress_2- adresa clientului (cont.)city *- orașulzip- codul poștalstate- regiunea administrativă (județ, land etc.)country_id *- identificatorul țariicountry(agregat, R) - țara
Date bancare
bank_iban- codul iban al contului clientuluibank_name- numele bancii
Date de contact
emailfaxhomepagetelephone
Fișa clientului
Accesibilă la adresa /api/clients/[id]/sheet.xml.
Conține:
- lista facturilor cu plățile aferente
- sumele restante defalcate pe monedă
- abonamentele (facturi recurente) la care este trecut acest client se vor afișa doar abonamentele care încă sunt active pentru acest client
Exemplu sume restante:
<dues>
<due currency="EUR" amount="100"/>
<due currency="RON" amount="200"/>
...
</dues>
Abonamente (facturi recurente)
Toate câmpurile sunt read-only.
payment_start_at(R) - data de la care a început abonamentul pentru acest abonatpayment_end_at(R) - data pâna la care este activ abonamentulcovered_until(R) - data până la care s-au emis facturile pentru acest abonatschedule_unit(R) - unitatea unui ciclu abonamentului (d - zi, w - săptamânp, m - month, y - an)schedule_unit_count(R) - numărul de unități ale unui cicluprice(R) - prețul pe ciclu al abonamentuluicurrency(R) - monedarecurrent_name(R) - numele abonamentului
Atenție: Prețul este pentru un ciclu de facturare întreg. Astfel, dacă facturarea se face trimestrial (schedule_unit = m și schedule_unit_count = 3) și prețul este 100, atunci prețul per lună este 100 / 3 = 33
Exemplu listă abonamente (facturi recurente):
<recurrent_jobs>
<recurrent_job schedule_unit_count="1" payment_end_at="" schedule_unit="m" price="1.19" payment_start_at="2011-01-01" recurrent_name="standard" currency="RON" covered_until="" id="1"/>
...
</recurrent_job>
Produs
Nume model: product; permite scrierea (adăugare, modificare, ștergere). Vezi instrucțiunile pentru scriere.
code- codul intern folosit de utilizator pentru acest produsdescription*- descrierea produsuluiquantity- cantitatea implicităunit- număr unitățiprice- prețvat- cota TVAcurrency_id *- identificatorul monedeicurrency(agregat, R) - moneda
Moneda
Nume model: currency
iso_name- codul ISO al monedei
Țara
Nume model: country
name- numele țăriiiso- codul ISO al țării
Datele contului
Nume model: account (singular!)
Accesibile la adresa /api/account.xml, doar pentru citire.
name- numele contuluidisabled- activ / inactivdisabling_reason- motivul dezactivăriitotal_open- total de platătotal_overdue- total scadentbranch_offices- lista a punctelor de lucru
Câmpuri identice cu ale unui client:
company_namecompany_uidcompany_registration_idcompany_tax_idcompany_address_1company_address_2company_statecompany_citycompany_zipcompany_webcompany_phonecompany_faxcompany_email
Punct de lucru
Nume model: branch_office
nameaddress_1address_2statecityzipphonefax
