Chei API și permisiuni
O cheie aparține contului tău. Îi dai firmele la care ajunge, fiecare cu permisiunile ei.
Cheile
Cheile se fac în aplicație, la API și webhookuri, cu contul tău Chappa. Fiecare are un nume (al programului care o folosește) și o listă de firme.

- Cheia arată așa:
chf_urmat de 43 de caractere. O vezi o singură dată, când o faci; noi păstrăm doar o amprentă SHA-256, din care cheia nu se poate reface. Dacă o pierzi, faci alta. - În listă vezi începutul și sfârșitul ei, când a fost folosită ultima dată și de la ce adresă IP.
- O revoci oricând; din acel moment orice cerere cu ea primește
401 invalid_api_key. - La fiecare cheie nouă primești un email, ca să afli dacă a făcut-o altcineva.
- Un cont are cel mult 25 de chei active. Fă câte una pentru fiecare program: o revoci pe una fără să le oprești pe celelalte.

Cheia este a contului, nu a unei firme: aceeași cheie poate lucra cu mai multe firme, fiecare cu alte permisiuni. Cererile spun firma în adresă: /companies/{company_id}/….
Permisiunile pe firmă
Pentru fiecare firmă a cheii alegi ce poate face: pentru fiecare resursă nimic, citire sau scriere, plus emiterea, trimiterea în RO e-Factura și ștergerea documentelor.

Ce înseamnă fiecare:
| Permisiune | Ce permite |
|---|---|
documents:read | Citește facturile, proformele, stornările, PDF-ul, XML-ul și răspunsul ANAF; validează XML-ul. |
documents:write | Creează și modifică ciorne, transformă proforme, trimite documente pe email. |
documents:issue | Emite (dă număr) și stornează. |
documents:submit | Trimite în RO e-Factura. |
documents:delete | Șterge ciorne și documente care nu au ajuns la ANAF. |
payments:read | Citește încasările și chitanțele. |
payments:write | Înregistrează și șterge încasări, emite și anulează chitanțe, marchează plata facturilor primite. |
clients:read | Citește agenda de clienți. |
clients:write | Adaugă, modifică și șterge clienți. |
products:read | Citește catalogul. |
products:write | Adaugă, modifică și scoate produse. |
received:read | Citește facturile primite din SPV, cu XML-ul și PDF-ul lor. |
Scrierea include citirea aceleiași resurse, iar orice permisiune pe documente include documents:read. Fără permisiune, cererea primește 403 missing_permission, cu permisiunea lipsă în permission. O cheie de raportare, de exemplu, are doar permisiuni de citire; una pentru magazinul online are documents:write, documents:issue, documents:submit și payments:write pe o singură firmă.
Rolul tău în firmă
O cheie nu poate face mai mult decât poți tu în firmă, acum. Dacă ai rolul de vizualizare, cheia doar citește, orice permisiuni i-ai fi dat. Dacă rolul se schimbă, cheia urmează imediat; GET /companies arată, la fiecare firmă, permisiunile care lucrează acum.
Dacă ieși dintr-o firmă, cheile tale pierd accesul la ea. Dacă ești adăugat din nou mai târziu, accesul nu revine singur: îl dai din nou cheii, din aplicație.
Firme verificate și neverificate
O firmă adăugată în aplicație este neverificată: este a ta (și a celor pe care îi inviți) până când cineva dovedește drepturile SPV pe codul ei fiscal, conectând-o la ANAF cu certificatul digital. Atunci devine verificată: una singură pentru acel cod fiscal, în toată platforma, cu tot istoricul ei.
| Ce poate cheia | Firmă neverificată | Firmă verificată |
|---|---|---|
| Facturi, proforme, stornări, chitanțe, încasări, PDF | Da | Da |
| Clienți și produse | Da | Da |
| Trimiterea în RO e-Factura | Nu: 409 company_not_verified | Da, cât timp conexiunea ANAF e activă |
| Facturile primite din SPV | Nu: 409 company_not_verified | Da |
| Trimiterea pe email | Nu | Da |
Emailurile și ANAF cer firma verificată ca nimeni să nu poată trimite facturi în numele unei firme care nu e a lui. Câmpul verified al firmei îți spune unde ești.
Când firma devine verificată

- O verifici tu (Setări, Conexiune ANAF, în aplicație): firma își păstrează id-ul, cheile merg mai departe fără nicio schimbare și primești evenimentul
company.verified. De acum trimite și în RO e-Factura. - Codul fiscal era deja verificat pe Chappa, de altcineva: după propria ta dovadă SPV intri în firma verificată și îți poți muta acolo copia, din aplicație. La mutare, cheile și webhookurile tale trec pe firma verificată, cu aceleași permisiuni, limitate de rolul tău acolo; cererile pe vechiul id primesc
410 company_merged, cu noul id înmerged_into, și primești evenimentulcompany.merged. Documentele își păstrează id-urile. - O verifică altcineva din copia ta: cei care erau în copie fără dovadă SPV ies din ea, iar cheile lor pierd accesul. Intră înapoi printr-o invitație de la un administrator verificat sau prin propria dovadă, apoi dau din nou acces cheilor.
Păstrarea cheilor
- Doar pe server, într-o variabilă de mediu sau într-un manager de secrete. Niciodată în codul din browser, într-o aplicație de telefon sau într-un depozit de cod.
- Dă fiecărei chei doar firmele și permisiunile de care are nevoie programul ei.
- Ca s-o schimbi fără întrerupere: faci una nouă, o pui în program, apoi o revoci pe cea veche.
- Dacă a scăpat undeva, revoc-o imediat. Prefixul
chf_o face ușor de găsit de scannerele de secrete.
Referința
Cheia folosită
GET /api/v1/me
Cine ești și unde ajungi: numele cheii, contul ei și firmele, cu permisiunile de acum. Bun ca prim apel, ca să verifici cheia.
Răspuns 200: ApiKey.
Firmele cheii
GET /api/v1/companies
Firmele la care ajunge cheia acum (toate, pe o pagină).
O firmă, cu serii, cote și conturi
GET /api/v1/companies/{company_id}
Profilul firmei și ce îți trebuie ca să emiți: seriile, cotele de TVA (vat_rate_id) și conturile bancare (bank_account_id).
| Parametru | Tip | Ce este |
|---|---|---|
company_id în adresă | integer | Id-ul firmei. |
Răspuns 200: CompanyDetail.
{
"id": 7,
"object": "company",
"kind": "pj",
"cif": "47755081",
"fiscal_code": "RO47755081",
"name": "Alfa Soft SRL",
"reg_com": "J40/1234/2023",
"address": "Bd. Unirii 1",
"city": "Sector 4",
"county": "București",
"country": "RO",
"vat_payer": true,
"vat_on_collection": false,
"verified": true,
"efactura": { "applies": true, "connected": true, "submit_mode": "manual", "submit_delay_hours": 24 },
"default_currency": "RON",
"default_due_days": 14,
"track_payments": true,
"role": "verified",
"permissions": ["documents:read", "documents:write", "documents:issue", "documents:submit", "payments:read", "payments:write"]
}Obiectul ApiKey
Cheia cu care faci cererea.
| Câmp | Tip | Ce este |
|---|---|---|
object | api_key | Mereu api_key. |
id | integer | Id-ul cheii. |
name | string | Numele dat în aplicație. |
hint | string | Începutul și sfârșitul cheii, ca s-o recunoști. |
account | object | Contul Chappa al cheii: name, email. |
companies | listă de object | Firmele la care ajunge acum, fiecare cu id și permissions (după rolul contului în firmă). |
rate_limit | object | requests pe per_seconds secunde. |
Obiectul Company
O firmă (sau un PFA, o persoană fizică) la care ajunge cheia.
| Câmp | Tip | Ce este |
|---|---|---|
id | integer | Id-ul firmei în Chappa Facturare. |
object | company | Mereu company. |
kind | pj | pfa | pf | Persoană juridică, PFA / II / IF sau persoană fizică pe CNP. |
cif | string | CUI fără RO, sau CNP. |
fiscal_code | string | Codul fiscal cum apare pe facturi (cu RO pentru plătitorii de TVA). |
name | string | Denumirea din registrul ANAF. |
reg_com | string sau null | Numărul de ordine în Registrul Comerțului. |
address | string sau null | Sediul. |
city | string sau null | Localitatea. |
county | string sau null | Județul. |
country | string | Țara, cod ISO 3166-1 (RO). |
vat_payer | boolean | Plătitoare de TVA. |
vat_on_collection | boolean | Aplică TVA la încasare. |
verified | boolean | Cineva a dovedit drepturi SPV pe codul fiscal. Doar o firmă verificată trimite în RO e-Factura și vede facturile primite. |
efactura | object | applies (firma trimite în RO e-Factura), connected (are conexiune ANAF activă), submit_mode (manual, immediate, delayed), submit_delay_hours. |
default_currency | string | Moneda implicită a documentelor. |
default_due_days | integer | Zile până la scadență, implicit. |
track_payments | boolean | Firma ține evidența încasărilor în aplicație. |
role | verified | owner | admin | member | viewer | Rolul contului cheii în firmă. |
permissions | listă de string | Ce poate face cheia aici acum: permisiunile date, reduse la ce permite rolul. |
Obiectul CompanyDetail
Firma, cu ce îți trebuie ca să emiți: Company plus:
| Câmp | Tip | Ce este |
|---|---|---|
series | listă de object | Seriile: id, doc_type (invoice, proforma, receipt), code, is_default, active, next_number. |
vat_rates | listă de object | Cotele de TVA: id, label, percent, category (S, Z, E, AE, K, G, O), exemption_code, exemption_text, is_default, active. |
bank_accounts | listă de object | Conturile: id, iban, bank, currency, is_default. |