Sari la conținut

Lista principalelor endpoint-uri API publice

5 min citire·Actualizat 2 iul. 2026

API-ul public SoftFactura urmeaza convențiile REST și returnează răspunsuri JSON. Toate endpoint-urile necesită autentificare cu cheia API, transmisă fie în header-ul X-Api-Key, fie ca Authorization: Bearer sf_live_....

URL de baza: https://api.softfactura.ro/public/v1

Facturi

MetodaEndpointDescriereScope necesar
GET/invoicesLista facturi (paginată)read
GET/invoices/:idDetalii facturaread
POST/invoicesCreează factura nouăwrite
PATCH/invoices/:idActualizează facturawrite
GET/invoices/:id/pdfDescarcă PDF facturaread
POST/invoices/:id/send-emailTrimite factura pe email către clientwrite
GET/invoices/:id/efactura/statusStatus e-Factura ANAF pentru facturaread
POST/invoices/:id/shipmentGenerează AWB pentru factura (necesită modulul Curieri)write

Legarea liniilor de produse + descărcarea stocului

Câmpuri opționale la POST /invoices (DOAR la creare — la PATCH sunt respinse cu field_not_supported_on_update, pentru că update-ul înlocuiește liniile fără legare de produse):

  • lines[].product_id — leagă linia de un produs EXISTENT din catalog (UUID — string; vezi GET /products și /products/lookup). Produsul trebuie să aparțină firmei și să fie activ, altfel cererea e respinsă (invalid_product_id pentru UUID malformat sau tip greșit, product_not_found, product_inactive). Descrierea, prețul și TVA rămân cele trimise pe linie.
  • lines[].code — cod produs (SKU): dacă firma are activată salvarea automată a produselor noi, linia e potrivită după cod cu catalogul (sau produsul e creat automat).
  • descarca_stoc (pe document, default false) — dacă true, factura emisă descarcă stocul produselor gestionate, exact ca emiterea din aplicație, inclusiv verificările pre-emitere: stoc insuficient sau vânzare sub cost răspund 400 (below_cost). Cere modulul Stoc activ (stock_module_required) și, pe cheia API, scope-ul stock:read (verificările expun niveluri de stoc — 403 insufficient_scope altfel). Descărcarea propriu-zisă rulează asincron, imediat după emitere — confirmarea se vede în mișcările de stoc, nu în răspunsul HTTP. Ignorat pentru proforme.
  • allow_below_cost (pe document, doar împreună cu descarca_stoc: true) — confirmă explicit vânzarea sub costul de achiziție (echivalentul confirmării din aplicație); fără el, liniile cu preț ≤ cost sunt respinse cu below_cost.

Creare factura — exemplu

POST /public/v1/invoices
{
  "client_id": "cl_abc123",
  "type": "factura",
  "currency": "RON",
  "issue_date": "2026-07-02",
  "due_date": "2026-08-01",
  "auto_submit_efactura": true,
  "lines": [
    {
      "description": "Servicii consultanta IT",
      "quantity": 10,
      "unit_price": 500,
      "vat_rate": 21
    }
  ]
}

Parametri de filtrare

  • ?status=issued — filtrează după status (draft, issued, paid, cancelled).
  • ?from=2026-01-01&to=2026-03-31 — interval de date.
  • ?page=2&limit=50 — paginare (default: page 1, limit 20).

Clienti

MetodaEndpointDescriereScope necesar
GET/clientsLista clientiread
GET/clients/:idDetalii clientread
POST/clientsCreează client nouwrite
PATCH/clients/:idActualizează clientwrite
DELETE/clients/:idȘterge clientwrite
GET/clients/lookup/anaf/:cuiPreia datele firmei de la ANAF, după CUIread
GET/clients/lookup/vies/:vatVerificare TVA intracomunitar (VIES)read

Parametri de filtrare

  • ?search=firma — caută după nume, CUI sau email.
  • ?type=pj — filtrează după tip (pj = persoana juridica, pf = persoana fizica).

Produse (read-only)

MetodaEndpointDescriereScope necesar
GET/productsLista produselor ACTIVE (paginată: ?page= / ?limit=, default 20, max 100; ?search= pe nume/cod/barcode/cod furnizor)read
GET/products/lookup?code=SKU123Găsire exactă după cod intern / barcode / cod furnizor (doar produse active; found: false fără match)read
GET/products/:idDetalii produs — întoarce și produsele dezactivate, cu is_active: false (utile la reconciliere); produsele șterse răspund 404 product_not_foundread

Crearea și actualizarea produselor prin API nu sunt încă disponibile — catalogul se administrează din aplicație. Liniile de factură se pot lega de produse existente cu lines[].product_id, iar liniile fără produs se trimit cu descriere liberă. Stocul curent NU e inclus în răspunsurile de produse — folosește endpoint-urile de stoc de mai jos (scope separat stock:read).

Stoc

MetodaEndpointDescriereScope necesar
GET/stock?code=SKU123Stocul curent pentru un produs, după codread
GET/stock/allStocul curent pentru toate produseleread

Informații cont

MetodaEndpointDescriereScope necesar
GET/accountInformații firma și abonamentread

Calcul TVA

MetodaEndpointDescriereScope necesar
POST/tax/calculateCalcul automat cota TVA pe baza tipului de client, țară și produsread

Format răspuns

Toate răspunsurile urmeaza un format consistent:

{
  "data": { ... },
  "meta": {
    "total": 142,
    "page": 1,
    "limit": 20,
    "totalPages": 8
  }
}

Erorile returnează:

{
  "error": {
    "type": "validation_error",
    "code": "missing_client_id",
    "message": "client_id is required",
    "field": "client_id"
  },
  "meta": {
    "request_id": "req_24e4cae10b0846ffb261b40d",
    "api_version": "v1"
  }
}

Coduri HTTP

CodSemnificație
200Succes
201Resursa creată cu succes
400Date invalide (verificare parametri)
401Cheie API invalida sau lipsa
403Permisiuni insuficiente (scope lipsa)
404Resursa nu exista
429Rate limit depășit
500Eroare server

Testează integrarea fără riscuri în mediul de test (sandbox), iar pentru întrebări scrie-ne la contact@softfactura.ro.

Ți-a fost util acest articol?

Ai în continuare nevoie de ajutor?

Contactează-ne pe email cu detalii — răspundem în maxim 24h în zilele lucrătoare.

Trimite email cu context pre-completat