Fint Developer DocsDocumentație Fint pentru dezvoltatori
Fint APIAPI Fint

WelcomeBun venit

Fint exposes a JSON API that lets developers integrate Romanian financial services into their app: open-banking statements, e-invoicing, company lookups and official exchange rates.

Fint expune un API JSON care permite dezvoltatorilor să integreze servicii financiare românești în aplicația lor: extrase bancare open banking, facturare electronică, căutări de companii și cursuri oficiale de schimb.

Versiunea în limba română este oferită pentru comoditate și este tradusă automat. Versiunea în limba engleză este cea de referință - pentru numele câmpurilor, exemplele de cod și detaliile de integrare îți recomandăm să urmezi documentația în engleză (comută la EN din colțul de sus).

Fint account required. API access requires a pre-registered and active Fint account. If you do not have one yet, sign up and complete onboarding at https://fint.ro/.

Cont Fint necesar. Accesul la API necesită un cont Fint preînregistrat și activ. Dacă nu ai încă unul, înregistrează-te și finalizează onboarding-ul la https://fint.ro/.

Production API. These docs describe the live production API at https://api.fint.ro. To build and test without touching real providers or data, use the Sandbox.

API de producție. Această documentație descrie API-ul live de producție de la https://api.fint.ro. Pentru a dezvolta și testa fără a afecta furnizori sau date reale, folosește Sandbox.

ServicesServicii

Fint exposes multiple independent services, each activated separately on a company license. You can use any service on its own or combine them: for example, use eFactura alone to handle Romanian e-invoicing, pair it with Extrase to reconcile bank transactions against invoices, or use Info CUI and Schimb valutar as utility services in any financial workflow. Each company API key you create specifies exactly which services it is allowed to call.

Fint expune mai multe servicii independente, fiecare activat separat pe licența unei companii. Poți folosi orice serviciu individual sau le poți combina: de exemplu, folosește eFactura singur pentru facturarea electronică românească, asociază-l cu Extrase pentru reconcilierea tranzacțiilor bancare cu facturile, sau folosește Info CUI și Schimb valutar ca servicii utilitare în orice flux financiar. Fiecare cheie API de companie pe care o creezi specifică exact ce servicii are voie să apeleze.

Base URLURL de bază

All API requests are made to the base URL:

Toate cererile API se fac către URL-ul de bază:

https://api.fint.ro

Every request must be authenticated with two API keys. See Authentication to get started, or jump to the Quick Start for your first call. Shared response and error conventions are documented under Conventions.

Fiecare cerere trebuie autentificată cu două chei API. Consultă Autentificare pentru a începe, sau treci la Start rapid pentru primul apel. Convențiile comune pentru răspunsuri și erori sunt documentate la Convenții.

Get startedÎncepe aici

Account modelModel de cont

Fint structures access around three entities: an organization, the companies it owns, and the users who belong to it. Understanding this hierarchy is the foundation for working with API keys and services.

Fint structurează accesul în jurul a trei entități: o organizație, companiile pe care le deține și utilizatorii care aparțin organizației. Înțelegerea acestei ierarhii este baza pentru lucrul cu cheile API și serviciile.

OrganizationOrganizație

An organization is the top-level entity registered on Fint. It is the billing unit and owns everything beneath it: companies, API keys, and team members. Every API request must be authenticated with the organization key (X-Org-Key), which you create under User menu → API → Chei API in the Fint UI.

Organizația este entitatea de nivel superior înregistrată pe Fint. Este unitatea de facturare și deține tot ce se află sub ea: companii, chei API și membri ai echipei. Fiecare cerere API trebuie autentificată cu cheia de organizație (X-Org-Key), pe care o creezi în Meniu utilizator → API → Chei API în interfața Fint.

An organization can own multiple companies, each representing a distinct legal entity or operational scope. This makes Fint suitable not only for businesses integrating their own financial operations, but also for software companies and SaaS platforms that embed Fint as a third-party provider for their clients: each client company can be managed as a separate company under the same organization.

O organizație poate deține mai multe companii, fiecare reprezentând o entitate juridică sau un domeniu operațional distinct. Asta face Fint potrivit nu doar pentru afaceri care își integrează propriile operațiuni financiare, ci și pentru companii de software și platforme SaaS care integrează Fint ca furnizor terț pentru clienții lor: fiecare companie client poate fi gestionată ca o companie separată sub aceeași organizație.

Company (license)Companie (licență)

A company, also called a license, is the operational unit within an organization. Each company typically corresponds to a Romanian legal entity with its own CUI. Companies activate services independently: a company may have Extrase and eFactura enabled while another in the same organization has only Info CUI.

O companie, numită și licență, este unitatea operațională din cadrul unei organizații. Fiecare companie corespunde de obicei unei entități juridice românești cu propriul CUI. Companiile activează serviciile independent: o companie poate avea Extrase și eFactura activate, iar alta din aceeași organizație poate avea doar Info CUI.

Each company holds one or more company-level API keys (X-Api-Key), created under Configurare → Chei API in the Fint UI sidebar for the active company. Every company key is scoped to exactly one company and to a chosen subset of that company's active services. A request made with a company key always acts on that specific company.

Fiecare companie deține una sau mai multe chei API de nivel companie (X-Api-Key), create în Configurare → Chei API din bara laterală Fint, pentru compania activă. Fiecare cheie de companie este limitată la exact o companie și la un subset ales din serviciile active ale companiei. O cerere făcută cu o cheie de companie acționează întotdeauna asupra acelei companii.

Companies, services and company API keys can be managed in the Fint UI or programmatically via the Organization API (Enterprise plan). See Self-service API for what can be done through the UI versus the API.

Companiile, serviciile și cheile API de companie pot fi gestionate în interfața Fint sau programatic prin API-ul Organizație (planul Enterprise). Vezi API self-service pentru ce se poate face prin interfață față de API.

Users and rolesUtilizatori și roluri

Users are team members invited to an organization. Each user has one of two roles:

Utilizatorii sunt membri ai echipei invitați într-o organizație. Fiecare utilizator are unul din două roluri:

  • Admin: full control over the organization, including managing companies, inviting and removing users, creating and deleting API keys, billing, and configuring service consents.
  • Admin: control complet asupra organizației, inclusiv gestionarea companiilor, invitarea și eliminarea utilizatorilor, crearea și ștergerea cheilor API, facturare și configurarea consimțămintelor pentru servicii.
  • User: operational access to the platform with limited administrative capabilities. Admins define which actions a user may perform.
  • User: acces operațional la platformă cu capabilități administrative limitate. Adminii definesc ce acțiuni poate efectua un utilizator.

User roles are managed entirely in the Fint UI and do not affect API key permissions directly. API access is controlled by the key's own service scope, regardless of the role of the person who created the key.

Rolurile utilizatorilor sunt gestionate integral în interfața Fint și nu afectează direct permisiunile cheilor API. Accesul la API este controlat de domeniul de servicii al cheii, indiferent de rolul persoanei care a creat cheia.

How it maps to the APICum se reflectă în API

Every API request carries both keys: X-Org-Key identifies the organization; X-Api-Key identifies the company and enforces its service scope. You never pass a company ID or CUI as an authorization parameter; Fint resolves both from the keys and validates that the company key belongs to the organization key's organization.

Fiecare cerere API poartă ambele chei: X-Org-Key identifică organizația; X-Api-Key identifică compania și aplică domeniul ei de servicii. Nu trimiți niciodată un ID de companie sau CUI ca parametru de autorizare; Fint le rezolvă pe ambele din chei și validează că cheia de companie aparține organizației cheii de organizație.

ConceptConceptAPI representationReprezentare APIWhere to createUnde se creează
OrganizationOrganizațieX-Org-Key headerUser menu → API → Chei APIMeniu utilizator → API → Chei API
CompanyCompanieX-Api-Key headerConfigurare → Chei API
User roleRol utilizatorNot sent in API requestsNu se trimite în cererile APITeam management in the Fint UIGestionarea echipei în interfața Fint

See Authentication for the full list of header requirements and error codes.

Consultă Autentificare pentru lista completă a cerințelor de header și codurilor de eroare.

Get startedÎncepe aici

Quick StartStart rapid

Make your first authenticated request in a few minutes.

Fă prima cerere autentificată în câteva minute.

StepsPași

  1. Make sure you have an active company with the service activated Fint requires at least one active company (license) before the API can be used. A first company is created automatically when you sign up; you can add more from the dashboard billing / subscription page or, on the Enterprise plan, via the Organization API. The company must also have the service you intend to call (eFactura, Extrase, Info CUI, Schimb valutar) activated. See the Account model for the organization → company hierarchy.
  2. Asigură-te că ai o companie activă cu serviciul activat Fint necesită cel puțin o companie activă (licență) înainte de a putea folosi API-ul. O primă companie este creată automat la înregistrare; poți adăuga altele din pagina de facturare / abonament a panoului sau, pe planul Enterprise, prin API-ul Organizație. Compania trebuie să aibă și serviciul pe care vrei să-l apelezi (eFactura, Extrase, Info CUI, Schimb valutar) activat. Vezi Modelul de cont pentru ierarhia organizație → companie.
  3. Get your organization key In the Fint dashboard, open the user menu → API → Chei API and create an organization key. This identifies your organization.
  4. Obține cheia de organizație În panoul Fint, deschide meniul utilizator → API → Chei API și creează o cheie de organizație. Aceasta identifică organizația ta.
  5. Get a company key Switch to the company you want to act on, then go to Configurare → Chei API in the sidebar and create a company key. Choose which services the key may call - each must be active on the company (eFactura, Extrase, Info CUI, Schimb valutar).
  6. Obține o cheie de companie Comută la compania asupra căreia vrei să acționezi, apoi mergi la Configurare → Chei API din bara laterală și creează o cheie de companie. Alege ce servicii poate apela cheia - fiecare trebuie să fie activ pe companie (eFactura, Extrase, Info CUI, Schimb valutar).
  7. Send both keys on every request Pass the org key as X-Org-Key and the company key as X-Api-Key.
  8. Trimite ambele chei la fiecare cerere Trimite cheia de organizație ca X-Org-Key și cheia de companie ca X-Api-Key.

Your first callPrimul apel

Look up a Romanian company by its CUI:

Caută o companie românească după CUI:

bash
curl -sS 'https://api.fint.ro/v1/infocui?cui=12345678' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

A successful response returns the company data envelope:

Un răspuns reușit returnează envelopa cu datele companiei:

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "cui": "12345678",
    "name": "Exemplu SRL",
    "registrationNumber": "J40/1234/2010",
    "vatRegistered": true
  }
}

Path note. On the API host api.fint.ro, endpoints are reachable at /v1/....

Notă despre cale. Pe hostul API api.fint.ro, endpoint-urile sunt accesibile la /v1/....

Next: read Authentication for key scoping and error codes, then explore the service references.

Urmează: citește Autentificare pentru domeniul cheilor și codurile de eroare, apoi explorează referințele serviciilor.

Get startedÎncepe aici

AuthenticationAutentificare

Fint uses dual-key authentication: an organization key plus a company key, sent on every request.

Fint folosește autentificare cu două chei: o cheie de organizație plus o cheie de companie, trimise la fiecare cerere.

Required headersHeader-e obligatorii

HeaderHeaderValueValoare
X-Org-KeyOrganization key (identifies your organization)Cheie de organizație (identifică organizația ta)
X-Api-KeyCompany key (selects the company and its allowed services)Cheie de companie (selectează compania și serviciile permise)

Alternatively, the company key may be sent as Authorization: Bearer <company_key>; the org key must still be sent as X-Org-Key.

Alternativ, cheia de companie poate fi trimisă ca Authorization: Bearer <company_key>; cheia de organizație trebuie trimisă tot ca X-Org-Key.

bash
curl -sS 'https://api.fint.ro/v1/extrase/accounts' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

Key scopingDomeniul cheilor

Two key types work together:

Două tipuri de chei lucrează împreună:

  • Organization key: one per organization, created under User menu → API → Chei API. Identifies the organization; it has no per-service scope.
  • Cheie de organizație: una per organizație, creată în Meniu utilizator → API → Chei API. Identifică organizația; nu are domeniu per serviciu.
  • Company key: one per company, created under Configurare → Chei API in the sidebar for the active company. Selects which company the request acts on and which services the key may call.
  • Cheie de companie: una per companie, creată în Configurare → Chei API din bara laterală, pentru compania activă. Selectează compania asupra căreia acționează cererea și serviciile pe care cheia le poate apela.

Company keys carry a services set (efactura, extrase, infocui, schimbvalutar) enforced at runtime. In addition, the company’s license must have the called service activated.

Cheile de companie poartă un set services (efactura, extrase, infocui, schimbvalutar) aplicat la runtime. În plus, licența companiei trebuie să aibă serviciul apelat activat.

No cui for authorization. eFactura, Extrase and Schimb valutar resolve the company from the company key; do not send cui for authorization. The only exception is Info CUI, where cui in the query string is the lookup target, not an auth parameter.

Fără cui pentru autorizare. eFactura, Extrase și Schimb valutar rezolvă compania din cheia de companie; nu trimite cui pentru autorizare. Singura excepție este Info CUI, unde cui din query string este ținta căutării, nu un parametru de autentificare.

Authentication errorsErori de autentificare

All errors use status: "error" with a human-readable msg and a stable reason. Branch on reason.

Toate erorile folosesc status: "error" cu un msg lizibil și un reason stabil. Ramifică pe reason.

HTTPreasonWhenCând
401missing_org_api_keyNo X-Org-Key headerLipsește header-ul X-Org-Key
401missing_api_keyNo company key / Bearer tokenLipsește cheia de companie / token Bearer
401invalid_org_api_keyUnknown or deleted org keyCheie de organizație necunoscută sau ștearsă
401invalid_api_keyUnknown or deleted company keyCheie de companie necunoscută sau ștearsă
403org_api_key_disabledOrg key exists but disabledCheia de organizație există dar este dezactivată
403organization_disabledOrganization is not enabledOrganizația nu este activă
403api_key_disabledCompany key exists but disabledCheia de companie există dar este dezactivată
403license_disabledLinked license is not enabledLicența asociată nu este activă
403api_key_service_deniedCompany key’s services don’t include the called serviceServiciile cheii de companie nu includ serviciul apelat
403license_service_deniedService not activated on the companyServiciul nu este activat pe companie
403org_mismatchCompany key’s license is not in the org key’s organizationLicența cheii de companie nu aparține organizației cheii de organizație
405method_not_allowedWrong HTTP method for the endpointMetodă HTTP greșită pentru endpoint
429limit_exceededUsage at/over plan limit with extra charges offUtilizare la/peste limita planului, fără taxe suplimentare activate
API referenceReferință API

Extrase

PSD2 open-banking accounts and transactions, already synchronized from connected banks. Reads return stored Fint data only.

Conturi și tranzacții PSD2 open banking, deja sincronizate din băncile conectate. Citirile returnează doar datele stocate în Fint.

Service access. The extrase service must be allowed on your company key and activated on that company’s license. Fint identifies the company from the company key, so you do not send it yourself.

Acces serviciu. Serviciul extrase trebuie permis pe cheia de companie și activat pe licența companiei. Fint identifică compania din cheia de companie, deci nu o trimiți tu.

An Extrase consent is a PSD2 authorization for Fint to read a company’s bank accounts and transactions at a specific bank. It is established when an authorized person completes the bank’s OAuth flow in Fint’s open-banking onboarding. The consent is recorded with status and a validUntil date on your company license, and Fint keeps accounts, balances, and transactions synchronized for you to read. Each connected bank requires its own consent.

Un consimțământ Extrase este o autorizare PSD2 pentru ca Fint să citească conturile bancare și tranzacțiile unei companii la o anumită bancă. Se stabilește când o persoană autorizată finalizează fluxul OAuth al băncii în onboarding-ul open banking Fint. Consimțământul este înregistrat cu status și o dată validUntil pe licența companiei tale, iar Fint menține conturile, soldurile și tranzacțiile sincronizate pentru a fi citite. Fiecare bancă conectată necesită propriul consimțământ.

You can obtain consent in three ways:

Poți obține consimțământul în trei moduri:

  • Fint UI: sign in to Fint, go to Extrase → Conturi, pick a bank, and complete the bank authorization flow.
  • Interfața Fint: autentifică-te în Fint, mergi la Extrase → Conturi, alege o bancă și finalizează fluxul de autorizare bancară.
  • Share link (delegated): from the Fint UI, generate a 7-day onboarding link and send it to someone who can authorize at the bank; they complete the browser flow for your company license.
  • Link de partajare (delegat): din interfața Fint, generează un link de onboarding valabil 7 zile și trimite-l cuiva care poate autoriza la bancă; acea persoană finalizează fluxul în browser pentru licența companiei tale.
  • API (self-service): call /onboarding to generate a share link, have the authorized person open it in a browser and complete bank authorization, then poll /consents until the target bank shows consentStatus: enabled. See Onboarding & consentOnboarding și consimțământ below.
  • API (self-service): apelează /onboarding pentru a genera un link de partajare, lasă persoana autorizată să-l deschidă în browser și să finalizeze autorizarea bancară, apoi interoghează /consents până când banca țintă afișează consentStatus: enabled. Vezi Onboarding & consentOnboarding și consimțământ mai jos.

The bank authorization step can be completed only by a person who can authenticate with that bank as the PSU (payment service user) for the accounts being connected. Steps vary by bank: OAuth redirect, internet banking app approval, or manual confirmation after PSU ID or IBAN collection where required. Fint does not collect or store internet banking passwords, PINs, or OTP/token codes.

Pasul de autorizare bancară poate fi finalizat doar de o persoană care se poate autentifica la banca respectivă ca PSU (utilizator de servicii de plată) pentru conturile conectate. Pașii variază în funcție de bancă: redirect OAuth, aprobare în aplicația de internet banking sau confirmare manuală după colectarea ID-ului PSU sau IBAN-ului, unde este necesar. Fint nu colectează și nu stochează parole de internet banking, PIN-uri sau coduri OTP/token.

The public API reads stored data only; it does not create consents or call the bank. /accounts returns stored accounts even from disabled consents (see consentStatus and consentValidUntil on each account). /transactions and /transaction/{uid} include data from enabled consents only. Without enabled consents, API calls succeed but return empty transaction data.

API-ul public citește doar date stocate; nu creează consimțăminte și nu apelează banca. /accounts returnează conturi stocate chiar și din consimțăminte dezactivate (vezi consentStatus și consentValidUntil pe fiecare cont). /transactions și /transaction/{uid} includ date doar din consimțăminte activate. Fără consimțăminte activate, apelurile API reușesc dar returnează date de tranzacții goale.

Set up bank consents in Fint before expecting account and transaction data via the API.

Configurează consimțămintele bancare în Fint înainte de a aștepta date de cont și tranzacții prin API.

Onboarding & consentOnboarding și consimțământ

API-only flow for delegated bank authorization: generate a share link with /onboarding, have the authorized person complete the bank’s OAuth flow, then poll /consents until the target bank’s entry shows consentStatus: enabled.

Flux doar prin API pentru autorizare bancară delegată: generează un link de partajare cu /onboarding, lasă persoana autorizată să finalizeze fluxul OAuth al băncii, apoi interoghează /consents până când înregistrarea băncii țintă afișează consentStatus: enabled.

Create onboarding linkCreează link de onboarding

POST/v1/extrase/onboarding

Creates a 7-day share link the end-user opens in a browser to connect a bank account. The link opens Fint’s bank-selection and OAuth consent flow.

Creează un link de partajare valabil 7 zile pe care utilizatorul final îl deschide în browser pentru a conecta un cont bancar. Link-ul deschide fluxul de selecție a băncii și consimțământul OAuth Fint.

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/extrase/onboarding' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "authLink": "https://app.fint.ro/onboarding/extrase?token=...",
    "expiresOn": "2026-07-04 08:00:00"
  }
}

Check consentsVerifică consimțămintele

GET/v1/extrase/consents

Returns all bank consents for the company key’s license - one entry per bank (de-duplicated, latest first). Returns an empty list when no consents exist.

Returnează toate consimțămintele bancare pentru licența cheii de companie - o intrare per bancă (deduplicat, cel mai recent primul). Returnează o listă goală când nu există consimțăminte.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/extrase/consents' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

Response (consents present)Răspuns (consimțăminte prezente)

json
{
  "status": "success",
  "data": {
    "consents": [
      {
        "bankCode": "BCR",
        "bankName": "BCR Bank",
        "consentStatus": "enabled",
        "validUntil": "2026-09-01 00:00:00",
        "updatedOn": "2026-06-01 12:00:00"
      }
    ],
    "total": 1
  }
}

Response (no consents)Răspuns (fără consimțăminte)

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "consents": [],
    "total": 0
  }
}

List accountsListează conturi

GET/v1/extrase/accounts

Returns all stored accounts for the company key’s license, including accounts from disabled consents. The account uid is the public identifier. This is a GET endpoint and takes no request body.

Returnează toate conturile stocate pentru licența cheii de companie, inclusiv conturi din consimțăminte dezactivate. uid contului este identificatorul public. Este un endpoint GET și nu primește corp de cerere.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/extrase/accounts' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "accounts": [
      {
        "uid": "a1b2c3d4e5f64789a0123456789abcde",
        "status": "enabled",
        "iban": "RO49RNCB0000000000000001",
        "currency": "RON",
        "balance": "123.45",
        "name": "Cont curent",
        "ownerName": "Exemplu SRL",
        "product": "Current Account",
        "bic": "RNCBROBU",
        "bank": {
          "code": "BCR",
          "name": "BCR Bank",
          "bic": "RNCB",
          "icon": "https://cdn.fint.ro/image/bank/icon/bcr.png"
        },
        "consentStatus": "enabled",
        "consentValidUntil": "2026-12-31",
        "lastTransactionsSync": "2026-06-22 08:00:00",
        "createdOn": "2026-06-01 10:00:00",
        "updatedOn": "2026-06-22 08:00:00"
      }
    ],
    "total": 1
  }
}

List transactionsListează tranzacții

GET/v1/extrase/transactions

Transactions are scoped to enabled Extrase consents for the matched company. Results are newest-first and offset-paginated.

Tranzacțiile sunt limitate la consimțămintele Extrase activate pentru compania potrivită. Rezultatele sunt ordonate de la cele mai recente și paginate prin offset.

ParamParamRequiredObligatoriuDescriptionDescriere
limitnonuPage size, default 50, max 100Dimensiune pagină, implicit 50, max 100
offsetnonuOffset, default 0Offset, implicit 0
typenonuincoming or outgoing
accountUidnonuPublic account UID from /accountsUID public al contului din /accounts
fromnonuBooking date lower bound, YYYY-MM-DDLimită inferioară dată contabilizare, YYYY-MM-DD
tononuBooking date upper bound, YYYY-MM-DDLimită superioară dată contabilizare, YYYY-MM-DD
qnonuSearch across counterparty, IBAN, remittance, description, category, merchant, noteCăutare în contrapartidă, IBAN, detalii plată, descriere, categorie, comerciant, notă

Description fields:

Câmpuri de descriere:

  • fintDescription: Fint-computed best payment narrative.
  • fintDescription: cea mai bună descriere de plată calculată de Fint.
  • rawDescription: original bank remittance text.
  • rawDescription: textul original al detaliilor de plată de la bancă.
  • category: provider category type, exposed separately from descriptions.
  • category: tipul categoriei de la furnizor, expus separat de descrieri.

This is a GET endpoint and takes no request body; pass parameters in the query string.

Este un endpoint GET și nu primește corp de cerere; trimite parametrii în query string.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/extrase/transactions?limit=50&offset=0&type=incoming' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "transactions": [
      {
        "uid": "Qf4x...",
        "type": "incoming",
        "bookingDate": "2026-06-21 00:00:00",
        "interlocutor": "Client SRL",
        "interlocutorIban": "RO49AAAA1B31007593840000",
        "amount": "100.00",
        "currency": "RON",
        "fintDescription": "Payment details",
        "rawDescription": "Original bank remittance text",
        "category": "Comisioane si Taxe",
        "createdOn": "2026-06-22 08:00:00",
        "accountUid": "a1b2c3d4e5f64789a0123456789abcde",
        "accountIban": "RO49RNCB0000000000000001",
        "accountName": "Cont curent",
        "bank": {
          "code": "BCR",
          "name": "BCR Bank",
          "bic": "RNCB",
          "icon": "https://cdn.fint.ro/image/bank/icon/bcr.png"
        }
      }
    ],
    "total": 42,
    "limit": 50,
    "offset": 0
  }
}

Get a transactionObține o tranzacție

GET/v1/extrase/transaction/{uid}

Returns one transaction owned by the company key’s license under an enabled consent. The detail response includes the summary fields plus provider fields such as valueDate, executionDateTime, transactionId, entryReference, endToEndId, rawDescription, category and userNote. This is a GET endpoint and takes no request body.

Returnează o tranzacție deținută de licența cheii de companie sub un consimțământ activ. Răspunsul detaliat include câmpurile sumare plus câmpuri de la furnizor precum valueDate, executionDateTime, transactionId, entryReference, endToEndId, rawDescription, category și userNote. Este un endpoint GET și nu primește corp de cerere.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/extrase/transaction/Qf4x...' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "uid": "Qf4x...",
    "type": "incoming",
    "bookingDate": "2026-06-21 00:00:00",
    "valueDate": "2026-06-21 00:00:00",
    "executionDateTime": "2026-06-21 09:14:32",
    "transactionId": "TX-998877",
    "entryReference": "ENTRY-12345",
    "endToEndId": "E2E-55512",
    "interlocutor": "Client SRL",
    "interlocutorIban": "RO49AAAA1B31007593840000",
    "amount": "100.00",
    "currency": "RON",
    "fintDescription": "Payment details",
    "rawDescription": "Original bank remittance text",
    "category": "Comisioane si Taxe",
    "userNote": null,
    "createdOn": "2026-06-22 08:00:00",
    "accountUid": "a1b2c3d4e5f64789a0123456789abcde",
    "accountIban": "RO49RNCB0000000000000001",
    "accountName": "Cont curent",
    "bank": {
      "code": "BCR",
      "name": "BCR Bank",
      "bic": "RNCB",
      "icon": "https://cdn.fint.ro/image/bank/icon/bcr.png"
    }
  }
}

ErrorsErori

HTTPreason
405method_not_allowed_get
400invalid_uid, invalid_type, invalid_account_uid, invalid_date, invalid_date_range, invalid_search
404not_found
429limit_exceeded
API referenceReferință API

eFactura

Submit outgoing Romanian e-invoices and manage incoming and outgoing documents. Fint handles delivery to ANAF e-Factura.

Trimite facturi electronice românești de ieșire și gestionează documente de intrare și ieșire. Fint se ocupă de transmiterea către ANAF e-Factura.

Service access. The efactura service must be allowed on your company key and activated on that company’s license. Fint identifies the company from the company key, so you do not send it yourself.

Acces serviciu. Serviciul efactura trebuie permis pe cheia de companie și activat pe licența companiei. Fint identifică compania din cheia de companie, deci nu o trimiți tu.

An eFactura consent is the company’s authorization for Fint to access ANAF e-Factura on its behalf. It is established through ANAF’s OAuth flow: the authorized person grants access at ANAF, and the consent is recorded for the company license with a CUI and a validUntil date. While the consent is enabled, Fint can submit outgoing documents, report their status, and provide incoming documents from ANAF for that CUI.

Un consimțământ eFactura este autorizarea companiei pentru ca Fint să acceseze ANAF e-Factura în numele ei. Se stabilește prin fluxul OAuth ANAF: persoana autorizată acordă acces la ANAF, iar consimțământul este înregistrat pe licența companiei cu un CUI și o dată validUntil. Cât timp consimțământul este activ, Fint poate trimite documente de ieșire, raporta statusul lor și furniza documente de intrare de la ANAF pentru acel CUI.

You can obtain consent in two ways:

Poți obține consimțământul în două moduri:

  • Fint UI: sign in to Fint, go to Configurare → Servicii, and complete the eFactura authorization flow for the company.
  • Interfața Fint: autentifică-te în Fint, mergi la Configurare → Servicii și finalizează fluxul de autorizare eFactura pentru companie.
  • API (self-service): call /onboarding to generate a share link, have the authorized person open it in a browser and complete ANAF authorization, then poll /consent until data.consentStatus is enabled. See Onboarding & consentOnboarding și consimțământ below.
  • API (self-service): apelează /onboarding pentru a genera un link de partajare, lasă persoana autorizată să-l deschidă în browser și să finalizeze autorizarea ANAF, apoi interoghează /consent până când data.consentStatus este enabled. Vezi Onboarding & consentOnboarding și consimțământ mai jos.

The ANAF authorization step can be completed only by a person who holds a qualified digital certificate registered at ANAF for the company’s CUI (fiscal code). That person must authenticate at ANAF with that certificate; Fint does not collect or store certificate passwords, PINs, or other signing credentials. The company must also have active e-Factura access in ANAF SPV (Spatiu Privat Virtual).

Pasul de autorizare ANAF poate fi finalizat doar de o persoană care deține un certificat digital calificat înregistrat la ANAF pentru CUI-ul (codul fiscal) companiei. Acea persoană trebuie să se autentifice la ANAF cu certificatul respectiv; Fint nu colectează și nu stochează parole de certificat, PIN-uri sau alte credențiale de semnare. Compania trebuie să aibă și acces activ e-Factura în ANAF SPV (Spațiu Privat Virtual).

For outgoing documents, the consent CUI must match from.cui on each /send request. Without an enabled consent, /send returns 403 efactura_consent_required.

Pentru documente de ieșire, CUI-ul consimțământului trebuie să coincidă cu from.cui la fiecare cerere /send. Fără consimțământ activ, /send returnează 403 efactura_consent_required.

Complete consent setup before calling /send. Use the Fint UI or the Onboarding & consentOnboarding și consimțământ API endpoints below.

Finalizează configurarea consimțământului înainte de a apela /send. Folosește interfața Fint sau endpoint-urile API de Onboarding & consentOnboarding și consimțământ de mai jos.

Onboarding & consentOnboarding și consimțământ

API-only flow for delegated ANAF authorization: generate a share link with /onboarding, have the certificate holder complete authorization at ANAF, then poll /consent until consent is enabled.

Flux doar prin API pentru autorizare ANAF delegată: generează un link de partajare cu /onboarding, lasă titularul certificatului să finalizeze autorizarea la ANAF, apoi interoghează /consent până când consimțământul este activ.

Create onboarding linkCreează link de onboarding

POST/v1/efactura/onboarding

Creates a 7-day share link the end-user opens in a browser to authorize Fint at ANAF.

Creează un link de partajare valabil 7 zile pe care utilizatorul final îl deschide în browser pentru a autoriza Fint la ANAF.

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/efactura/onboarding' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "authLink": "https://app.fint.ro/onboarding/efactura?token=...",
    "expiresOn": "2026-06-27 12:00:00"
  }
}
GET/v1/efactura/consent

Returns the enabled ANAF consent for the company key’s license, or data: null when none is enabled yet.

Returnează consimțământul ANAF activ pentru licența cheii de companie, sau data: null când niciunul nu este încă activ.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/efactura/consent' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

Response (consent enabled)Răspuns (consimțământ activ)

json
{
  "status": "success",
  "data": {
    "consentStatus": "enabled",
    "validUntil": "2027-01-01",
    "updatedOn": "2026-06-01 10:00:00"
  }
}

Response (no enabled consent)Răspuns (fără consimțământ activ)

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": null
}

Document structureStructura documentului

A document is a single JSON object - the same shape consumed by POST /send and returned by GET /document. This is the full field reference: what each field means and when it is required. Fint maps it to a CIUS-RO (EN 16931) UBL invoice before sending it to ANAF.

Un document este un singur obiect JSON - aceeași structură folosită de POST /send și returnată de GET /document. Aceasta este referința completă a câmpurilor: ce înseamnă fiecare și când este obligatoriu. Fint îl transformă într-o factură UBL CIUS-RO (EN 16931) înainte de a o trimite la ANAF.

Totals are computed, not sent. Line amounts, the VAT breakdown and the invoice totals are derived by Fint from items. Do not send total fields - they are ignored.

Totalurile sunt calculate, nu trimise. Valorile de linie, defalcarea TVA și totalurile facturii sunt derivate de Fint din items. Nu trimite câmpuri de total - sunt ignorate.

HeaderAntet

FieldCâmpRequirementCerințăMeaningSemnificație
documentNumberRequiredObligatoriuInvoice number (BT-1). Must be non-empty and unique per seller; a repeat returns 409 duplicate_document.Numărul facturii (BT-1). Nevid și unic per furnizor; o repetare returnează 409 duplicate_document.
documentDateRequiredObligatoriuIssue date (BT-2); any parseable date, emitted as YYYY-MM-DD.Data emiterii (BT-2); orice dată parsabilă, emisă ca YYYY-MM-DD.
dueDateOptionalOpționalPayment due date (BT-9).Data scadenței plății (BT-9).
currencyRequiredObligatoriuInvoice currency (BT-5). Must be RON.Moneda facturii (BT-5). Trebuie să fie RON.
documentTypeCodeOptionalOpționalUNCL 1001 type (BT-3); default 380. Allowed: 380 Factură, 381 Notă de creditare, 384 Factură corectată, 389 Autofactură, 751 Informații contabile.Tip UNCL 1001 (BT-3); implicit 380. Permise: 380 Factură, 381 Notă de creditare, 384 Factură corectată, 389 Autofactură, 751 Informații contabile.
noteOptionalOpționalFree-text note or observation (BT-22), max 300 characters.Notă sau observație text liber (BT-22), max 300 caractere.
deliveryDateOptionalOpționalActual delivery date of the goods/services (BT-72). Required by ANAF when any item uses vatScheme K (intra-community supply).Data efectivă a livrării bunurilor/serviciilor (BT-72). Cerută de ANAF când un articol folosește vatScheme K (livrare intracomunitară).
deliveryAddressOptionalOpționalDelivery location address (same shape as a party address). Emitted only alongside deliveryDate; if omitted, the buyer address is used.Adresa locului de livrare (aceeași structură ca address al unei părți). Emisă doar împreună cu deliveryDate; dacă lipsește, se folosește adresa clientului.
buyerReferenceOptionalOpționalBuyer’s reference (BT-10), e.g. a PO or cost-center code, max 30 characters.Referința cumpărătorului (BT-10), ex. o comandă sau cod de centru de cost, max 30 caractere.

Parties - from & toPărți - from și to

from is the supplier (furnizor) and to is the customer (client). Both share the same shape. from.cui must equal the enabled consent CUI for your license, otherwise 422 from_cui_mismatch. For a consumer (B2C) buyer, set to.cui to 0000000000000; a full to.name and to.address are still required.

from este furnizorul și to este clientul. Ambele au aceeași structură. from.cui trebuie să fie egal cu CUI-ul consimțământului activ al licenței, altfel 422 from_cui_mismatch. Pentru un client persoană fizică (B2C), setează to.cui la 0000000000000; sunt necesare în continuare to.name și to.address complete.

FieldCâmpRequirementCerințăMeaningSemnificație
cuiRequiredObligatoriuFiscal code. from.cui must match the consent; to.cui a valid CUI, or 0000000000000 for B2C.Cod fiscal. from.cui trebuie să coincidă cu consimțământul; to.cui un CUI valid, sau 0000000000000 pentru B2C.
nameRequiredObligatoriuLegal name of the party.Denumirea legală a părții.
address.lineRequiredObligatoriuStreet address.Adresa (stradă, număr).
address.cityRequiredObligatoriuCity. In Bucharest use the sector, e.g. SECTOR1.Localitate. În București folosește sectorul, ex. SECTOR1.
address.countrySubdivisionRequiredObligatoriuCounty as RO-XX (e.g. RO-CJ); Bucharest is RO-B.Județul ca RO-XX (ex. RO-CJ); Bucureștiul este RO-B.
address.countryRequiredObligatoriuISO country code, e.g. RO.Cod ISO de țară, ex. RO.
address.postalCodeOptionalOpționalPostal code.Cod poștal.

Normalization. You do not need to pre-format addresses. Fint accepts county names or codes (e.g. Cluj or RO-CJ) and Bucharest variants (București, Sector 1, RO-B) and normalizes them to ANAF/CIUS-RO form; unrecognized city/subdivision is filled from Info CUI by the party’s cui.

Normalizare. Nu trebuie să pre-formatezi adresele. Fint acceptă nume sau coduri de județ (ex. Cluj sau RO-CJ) și variante pentru București (București, Sector 1, RO-B) și le normalizează în forma ANAF/CIUS-RO; localitatea/subdiviziunea nerecunoscută este completată din Info CUI după cui-ul părții.

Line items - items[]Linii - items[]

A non-empty array; each element is one invoice line.

Un array nevid; fiecare element este o linie de factură.

FieldCâmpRequirementCerințăMeaningSemnificație
nameRequiredObligatoriuItem name/description (BT-153), max 200 characters.Denumirea/descrierea articolului (BT-153), max 200 caractere.
quantityRequiredObligatoriuInvoiced quantity.Cantitatea facturată.
price / unitPriceRequiredObligatoriuNet unit price (BT-146). Send one of the two keys.Prețul unitar net (BT-146). Trimite una dintre cele două chei.
vatRateRequiredObligatoriuVAT percentage (BT-152), 0-100. Must be 0 for every scheme except S.Procent TVA (BT-152), 0-100. Trebuie să fie 0 pentru orice schemă în afară de S.
vatSchemeRequiredObligatoriuVAT category code (BT-151), UNCL 5305 - see the table below.Cod categorie TVA (BT-151), UNCL 5305 - vezi tabelul de mai jos.
vatexCodeConditionalCondiționatVAT exemption reason code (BT-121), e.g. VATEX-EU-AE. Required by ANAF for exempt / reverse-charge categories (E, AE, K, G, O); not used for S or Z.Cod motiv scutire TVA (BT-121), ex. VATEX-EU-AE. Cerut de ANAF pentru categoriile scutite / taxare inversă (E, AE, K, G, O); neutilizat pentru S sau Z.
vatexReasonOptionalOpționalFree-text VAT exemption reason (BT-120), paired with vatexCode.Motiv de scutire TVA în text liber (BT-120), împreună cu vatexCode.
classificationCodeOptionalOpționalItem classification code (BT-158), e.g. a CPV code. Requires classificationList.Cod de clasificare a articolului (BT-158), ex. un cod CPV. Necesită classificationList.
classificationListOptionalOpționalClassification scheme id (BT-158-1, listID). Must be a UNTDID 7143 code (e.g. STI for CPV). Requires classificationCode.Id-ul schemei de clasificare (BT-158-1, listID). Trebuie să fie un cod UNTDID 7143 (ex. STI pentru CPV). Necesită classificationCode.

VAT schemes (vatScheme)Scheme de TVA (vatScheme)

The per-item vatScheme is a UNCL 5305 category code. Every scheme except S is a zero-rate category and requires vatRate: 0. The API validates vatScheme and the vatRate: 0 coupling; the vatexCode and deliveryDate requirements in the "Requires" column are enforced by ANAF at submission, not pre-checked by this API.

Câmpul vatScheme per articol este un cod de categorie UNCL 5305. Orice schemă în afară de S este o categorie cu cotă zero și necesită vatRate: 0. API-ul validează vatScheme și corelarea cu vatRate: 0; cerințele vatexCode și deliveryDate din coloana "Necesită" sunt aplicate de ANAF la trimitere, nu pre-verificate de acest API.

CodeCodMeaningSemnificațieRequiresNecesită
SStandard rateCotă standardvatRate > 0vatRate > 0
ZZero ratedCotă zerovatRate: 0vatRate: 0
EExempt from VATScutit de TVAvatRate: 0, vatexCodevatRate: 0, vatexCode
AEReverse chargeTaxare inversăvatRate: 0, vatexCode (e.g. VATEX-EU-AE)vatRate: 0, vatexCode (ex. VATEX-EU-AE)
KIntra-community supplyLivrare intracomunitarăvatRate: 0, deliveryDate, vatexCode (VATEX-EU-IC)vatRate: 0, deliveryDate, vatexCode (VATEX-EU-IC)
GExport outside the EUExport în afara UEvatRate: 0, vatexCode (VATEX-EU-G)vatRate: 0, vatexCode (VATEX-EU-G)
OOutside scope of VATÎn afara sferei TVAvatRate: 0, vatexCode (VATEX-EU-O)vatRate: 0, vatexCode (VATEX-EU-O)
LCanary Islands (IGIC)Insulele Canare (IGIC)vatRate: 0vatRate: 0
MCeuta & Melilla (IPSI)Ceuta și Melilla (IPSI)vatRate: 0vatRate: 0

Payment - paymentMeansPlată - paymentMeans

The paymentMeans object is optional. When you include it, paymentMeansCode is required within it.

Obiectul paymentMeans este opțional. Când îl incluzi, paymentMeansCode este obligatoriu în interiorul lui.

FieldCâmpRequirementCerințăMeaningSemnificație
paymentMeansCodeRequired if paymentMeans presentObligatoriu dacă paymentMeans existăUNCL 4461 payment means code (BT-81), a number 1-97; e.g. 30 credit transfer.Cod mijloc de plată UNCL 4461 (BT-81), un număr 1-97; ex. 30 transfer bancar.
ibanOptionalOpționalPayee account IBAN (BT-84). Recommended.IBAN-ul contului beneficiar (BT-84). Recomandat.
paymentIdOptionalOpționalPayment reference / remittance information (BT-83).Referință de plată / informații de remitere (BT-83).
accountNameOptionalOpționalPayee account holder name (BT-85).Numele titularului contului beneficiar (BT-85).

Send a documentTrimite un document

POST/v1/efactura/send

Validates and enqueues one outgoing document. The request body is a single JSON object describing the invoice; all fields below are top-level keys of that body (not HTTP headers).

Validează și pune în coadă un document de ieșire. Corpul cererii este un singur obiect JSON care descrie factura; toate câmpurile de mai jos sunt chei de nivel superior ale acelui corp (nu header-e HTTP).

Example requestExemplu de cerere
curl -sS -X POST 'https://api.fint.ro/v1/efactura/send' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "documentNumber": "INV-1",
    "documentDate": "2025-03-21",
    "currency": "RON",
    "documentTypeCode": "380",
    "note": "Livrare conform contract 42/2025.",
    "deliveryDate": "2025-03-21",
    "from": {
      "cui": "34790982",
      "name": "Seller SRL",
      "address": {
        "line": "Str. Test 1",
        "city": "SECTOR1",
        "postalCode": "010001",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "to": {
      "cui": "12345678",
      "name": "Buyer SRL",
      "address": {
        "line": "Str. Client 2",
        "city": "SECTOR1",
        "postalCode": "010002",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "items": [
      {
        "name": "Service",
        "quantity": 1,
        "price": 100,
        "vatRate": 19,
        "vatScheme": "S",
        "classificationCode": "79411000",
        "classificationList": "STI"
      }
    ],
    "paymentMeans": {
      "paymentMeansCode": "30",
      "iban": "RO49AAAA1B31007593840000",
      "paymentId": "ORD-1"
    }
  }'
{
  "documentNumber": "INV-1",
  "documentDate": "2025-03-21",
  "currency": "RON",
  "documentTypeCode": "380",
  "note": "Livrare conform contract 42/2025.",
  "deliveryDate": "2025-03-21",
  "from": {
    "cui": "34790982",
    "name": "Seller SRL",
    "address": {
      "line": "Str. Test 1",
      "city": "SECTOR1",
      "postalCode": "010001",
      "countrySubdivision": "RO-B",
      "country": "RO"
    }
  },
  "to": {
    "cui": "12345678",
    "name": "Buyer SRL",
    "address": {
      "line": "Str. Client 2",
      "city": "SECTOR1",
      "postalCode": "010002",
      "countrySubdivision": "RO-B",
      "country": "RO"
    }
  },
  "items": [
    {
      "name": "Service",
      "quantity": 1,
      "price": 100,
      "vatRate": 19,
      "vatScheme": "S",
      "classificationCode": "79411000",
      "classificationList": "STI"
    }
  ],
  "paymentMeans": {
    "paymentMeansCode": "30",
    "iban": "RO49AAAA1B31007593840000",
    "paymentId": "ORD-1"
  }
}

The request body is the invoice document object. See Document structure above for the full field reference - every field, its meaning, and when it is required. In short: documentNumber, documentDate, currency (RON), from, to, and a non-empty items array are required; everything else is optional.

Corpul cererii este obiectul document al facturii. Vezi Structura documentului mai sus pentru referința completă a câmpurilor - fiecare câmp, semnificația sa și când este obligatoriu. Pe scurt: documentNumber, documentDate, currency (RON), from, to și un array items nevid sunt obligatorii; restul sunt opționale.

After local checks and a duplicate check, Fint pre-validates the generated UBL with ANAF.

După verificări locale și verificarea duplicatelor, Fint pre-validează UBL-ul generat cu ANAF.

Response (201 Created)Răspuns (201 Created)

json
{
  "status": "success",
  "msg": "Document has been validated with Fint. Pending upload and ANAF confirmation.",
  "reason": null,
  "data": {
    "uid": "a1b2c3d4-e5f6-4789-a012-3456789abcde",
    "status": "pending"
  }
}

Response (422 validation failed)Răspuns (422 validare eșuată)

json
{
  "status": "error",
  "msg": "Document is not valid.",
  "reason": "validation_failed",
  "data": {
    "errors": [
      {
        "code": "from_cui_mismatch",
        "field": "from.cui",
        "message": "from.cui must match the enabled consent CUI."
      }
    ]
  }
}

Other errors: 409 duplicate_document, 429 limit_exceeded, 500 enqueue_failed.

Alte erori: 409 duplicate_document, 429 limit_exceeded, 500 enqueue_failed.

Get a documentObține un document

GET/v1/efactura/document

Resolves any document (outgoing or incoming) owned by the company key’s license, including parties, line items, payment means, ANAF state and download availability. Pass the document UID in the query string.

Rezolvă orice document (de ieșire sau intrare) deținut de licența cheii de companie, inclusiv părți, linii, mijloace de plată, starea ANAF și disponibilitatea descărcării. Transmite UID-ul documentului în query string.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/efactura/document?uid=a1b2c3d4-e5f6-4789-a012-3456789abcde' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "uid": "a1b2c3d4-...",
    "type": "outgoing",
    "status": "validated",
    "errorMessage": null,
    "source": "fint",
    "documentTypeCode": "380",
    "documentNumber": "INV-1",
    "documentDate": "2025-03-21",
    "currency": "RON",
    "fromTo": "Buyer SRL",
    "fromToCui": "12345678",
    "total": "100.00",
    "anafStatus": "ok",
    "anafId": "5032836579",
    "pdfAvailable": 1,
    "xmlAvailable": 1,
    "processed": 1,
    "createdOn": "2025-03-21 10:00:00",
    "updatedOn": "2025-03-21 12:00:00",
    "note": "Livrare conform contract 42/2025.",
    "deliveryDate": "2025-03-21",
    "deliveryAddress": null,
    "from": {
      "cui": "34790982",
      "name": "Seller SRL",
      "address": {
        "line": "Str. Test 1",
        "city": "SECTOR1",
        "postalCode": "010001",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "to": {
      "cui": "12345678",
      "name": "Buyer SRL",
      "address": {
        "line": "Str. Client 2",
        "city": "SECTOR1",
        "postalCode": "010002",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "items": [
      {
        "name": "Service",
        "quantity": 1,
        "price": 100,
        "vatRate": 0,
        "vatScheme": "E",
        "vatexCode": "VATEX-EU-D",
        "vatexReason": "Scutit conform reglementarilor UE",
        "classificationCode": "79411000",
        "classificationList": "STI"
      }
    ],
    "paymentMeans": {
      "paymentMeansCode": "30",
      "paymentId": "ORD-1",
      "iban": "RO49AAAA1B31007593840000",
      "accountName": "Main account",
      "bic": null
    }
  }
}

fromTo is the counterparty name and fromToCui its CUI (buyer on outgoing, supplier on incoming). errorMessage carries a failure detail or null; processed is 1 once the document has been fully processed after ANAF confirmation. createdOn / updatedOn are timestamps.

fromTo este numele contrapărții, iar fromToCui CUI-ul acesteia (client la ieșire, furnizor la intrare). errorMessage conține detaliul unei erori sau null; processed este 1 după procesarea completă a documentului în urma confirmării ANAF. createdOn / updatedOn sunt marcaje temporale.

The optional fields are returned when present: note, deliveryDate, deliveryAddress, and the item-level vatexCode, vatexReason, classificationCode, classificationList.

Câmpurile opționale sunt returnate când există: note, deliveryDate, deliveryAddress și, la nivel de linie, vatexCode, vatexReason, classificationCode, classificationList.

Errors: 400 invalid_uid; 404 not_found.

Erori: 400 invalid_uid; 404 not_found.

List documentsListează documente

GET/v1/efactura/documents

Lists documents for the key’s license. No query parameters uses defaults. For line items and download availability, use /document.

Listează documentele pentru licența cheii. Fără parametri de query folosește valorile implicite. Pentru linii și disponibilitate descărcare, folosește /document.

ParamParametruDefaultImplicitDescriptionDescriere
typeoutgoingoutgoing or incoming
limit50Page size (max 100)Dimensiune pagină (max 100)
offset0Skip rowsSari rânduri
status(all)(toate)Comma-separated list of statusesStatusuri separate prin virgulă

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/efactura/documents?type=incoming&limit=50&offset=0' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "documents": [
      {
        "uid": "a1b2c3d4-...",
        "type": "incoming",
        "status": "validated",
        "source": "spv",
        "documentTypeCode": "380",
        "documentNumber": "INV-1",
        "documentDate": "2025-03-21",
        "currency": "RON",
        "fromTo": "Seller SRL",
        "fromToCui": "34790982",
        "total": "119.00",
        "anafStatus": "ok",
        "anafId": "5032836579",
        "createdOn": "2025-03-21 10:00:00",
        "updatedOn": "2025-03-21 12:00:00"
      }
    ],
    "total": 42,
    "limit": 50,
    "offset": 0
  }
}

Download a documentDescarcă un document

GET/v1/efactura/download

Returns the raw binary as an attachment, not the JSON envelope. PDF for type=pdf; signed XML delivered as a ZIP for type=xml (zip is an alias for xml). Use pdfAvailable/xmlAvailable from /document to know which exist.

Returnează binarul brut ca atașament, nu envelopa JSON. PDF pentru type=pdf; XML semnat livrat ca ZIP pentru type=xml (zip este alias pentru xml). Folosește pdfAvailable/xmlAvailable din /document pentru a ști ce există.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/efactura/download?uid=a1b2c3d4-e5f6-4789-a012-3456789abcde&type=pdf' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY' \
  -o document.pdf

Response (200 OK)Răspuns (200 OK)

The response is the raw file as a binary attachment (with a Content-Disposition header), not JSON. Save it to disk with -o, as shown above.

Răspunsul este fișierul brut ca atașament binar (cu header Content-Disposition), nu JSON. Salvează-l pe disc cu -o, ca mai sus.

Errors: 400 invalid_uid, invalid_type; 404 not_found, document_not_available.

Erori: 400 invalid_uid, invalid_type; 404 not_found, document_not_available.

API referenceReferință API

Info CUI

Look up Romanian company data by CUI (fiscal code). Responses are cached permanently.

Caută date despre companii românești după CUI (cod fiscal). Răspunsurile sunt cache-uite permanent.

Service access. The infocui service must be allowed on your company key and activated on that company’s license. Fint identifies the company from the company key, so you do not send it yourself.

Acces serviciu. Serviciul infocui trebuie permis pe cheia de companie și activat pe licența companiei. Fint identifică compania din cheia de companie, deci nu o trimiți tu.

Look up a companyCaută o companie

GET/v1/infocui

Pass the company to look up as the required cui query parameter (string or integer; RO prefix stripped, digits only); any valid Romanian CUI is allowed. Dual-key auth still applies. This is a GET endpoint and takes no request body.

Trimite compania de căutat ca parametru query obligatoriu cui (string sau întreg; prefixul RO eliminat, doar cifre); orice CUI românesc valid este permis. Autentificarea cu două chei se aplică în continuare. Este un endpoint GET și nu primește corp de cerere.

ParamParamRequiredObligatoriuDescriptionDescriere
cuiyesdaCompany to look up (RO prefix stripped, digits only)Compania de căutat (prefix RO eliminat, doar cifre)

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/infocui?cui=12345678' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "cui": "12345678",
    "name": "Exemplu SRL",
    "registrationNumber": "J40/1234/2010",
    "address": "Str. Exemplu 1",
    "addressFull": "Str. Exemplu 1, București, Sector 3",
    "city": "București",
    "county": "Sector 3",
    "countyCode": "B",
    "country": "România",
    "postalCode": "010101",
    "phone": null,
    "fax": null,
    "iban": null,
    "registrationStatus": "INREGISTRAT din data 01.01.2010",
    "registrationDate": "2010-01-01",
    "caenCode": "6201",
    "eInvoiceEnabled": false,
    "taxAuthority": "Administrația Finanțelor Publice",
    "legalForm": "SOCIETATE COMERCIALĂ CU RĂSPUNDERE LIMITATĂ",
    "vatRegistered": true,
    "cashVatEnabled": false
  }
}

ErrorsErori

HTTPreason
405method_not_allowed_get
400missing_cui, invalid_cui
404company_not_found
429limit_exceeded
API referenceReferință API

Schimb valutar

Official Romanian reference exchange rates for RON to foreign currency pairs.

Cursuri oficiale românești de referință pentru perechi RON cu valute străine.

Service access. The schimbvalutar service must be allowed on your company key and activated on that company’s license. Fint identifies the company from the company key, so you do not send it yourself.

Acces serviciu. Serviciul schimbvalutar trebuie permis pe cheia de companie și activat pe licența companiei. Fint identifică compania din cheia de companie, deci nu o trimiți tu.

Get a rateObține un curs

GET/v1/schimbvalutar
ParamParamRequiredObligatoriuDescriptionDescriere
fromyesdaMust be RONTrebuie să fie RON
toyesdaTarget ISO 4217 code (e.g. EUR, USD)Cod țintă ISO 4217 (ex. EUR, USD)
datenonuCalendar date YYYY-MM-DD; omit for latest publicationDată calendaristică YYYY-MM-DD; omite pentru ultima publicare

This is a GET endpoint and takes no request body; pass parameters in the query string.

Este un endpoint GET și nu primește corp de cerere; trimite parametrii în query string.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/schimbvalutar?from=RON&to=EUR' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "from": "RON",
    "to": "EUR",
    "date": "2026-05-20",
    "rate": 4.9756,
    "multiplier": 1,
    "source": "bnr",
    "publishedDate": "2026-05-20"
  }
}

rate is RON per 1 unit of to (the official multiplier is already applied).

rate este RON per 1 unitate din to (multiplicatorul oficial este deja aplicat).

The response date / publishedDate is the publication date actually used. On weekends, holidays, or before the daily update (~13:00), this may be earlier than the date you requested (previous banking day fallback). Future dates return 400 future_date.

date / publishedDate din răspuns este data publicării efectiv folosită. În weekend, sărbători sau înainte de actualizarea zilnică (~13:00), poate fi anterioară datei cerute (fallback la ziua bancară anterioară). Datele viitoare returnează 400 future_date.

ErrorsErori

HTTPreason
405method_not_allowed_get
400missing_from, invalid_from, missing_to, invalid_to, invalid_date, future_date
404rate_not_found (unknown currency or historical date before available data)(valută necunoscută sau dată istorică înainte de datele disponibile)
429limit_exceeded
502provider_error (upstream rate source failure)(eroare la sursa de cursuri)

Historical rateCurs istoric

Pass a date to request the rate for a specific calendar date.

Trimite un date pentru a solicita cursul pentru o dată calendaristică specifică.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/schimbvalutar?from=RON&to=USD&date=2025-01-15' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'X-Api-Key: YOUR_COMPANY_KEY'
API referenceReferință API

Organization APIAPI Organizație

Manage companies, activate services, and create API keys at the organization level - using your organization key only.

Gestionează companii, activează servicii și creează chei API la nivel de organizație - folosind doar cheia de organizație.

Enterprise only. These endpoints are available exclusively on the Enterprise plan. Non-Enterprise organizations receive 403 enterprise_required on every request.

Doar Enterprise. Aceste endpoint-uri sunt disponibile exclusiv pe planul Enterprise. Organizațiile non-Enterprise primesc 403 enterprise_required la fiecare cerere.

Authentication exception. Send only X-Org-Key - no company key (X-Api-Key / Bearer) is used. All operations are automatically scoped to your organization.

Excepție de autentificare. Trimite doar X-Org-Key - nu se folosește cheie de companie (X-Api-Key / Bearer). Toate operațiile sunt automat limitate la organizația ta.

List companiesListare companii

GET/v1/organization/companies/list

Returns all active companies in the organization, including each company's currently active services.

Returnează toate companiile active din organizație, inclusiv serviciile active ale fiecărei companii.

Example requestExemplu de cerere

bash
curl -sS 'https://api.fint.ro/v1/organization/companies/list' \
  -H 'X-Org-Key: YOUR_ORG_KEY'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": [
    {
      "uid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
      "name": "Acme SRL",
      "cui": "12345678",
      "status": "enabled",
      "activeServices": [
        "efactura",
        "extrase"
      ]
    }
  ]
}

Create a companyCreare companie

POST/v1/organization/companies/create

Creates a new company under the organization. The CUI (2-10 digits; optional RO prefix) must be unique within the organization.

Creează o nouă companie în organizație. CUI-ul (2-10 cifre; prefix RO opțional) trebuie să fie unic în organizație.

FieldCâmpRequiredObligatoriuDescriptionDescriere
nameyesdaCompany display nameNumele companiei
cuiyesdaRomanian tax id; unique in your orgCUI românesc; unic în organizație

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/organization/companies/create' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Acme SRL","cui":"12345678"}'

Response (201)Răspuns (201)

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "uid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
    "name": "Acme SRL",
    "cui": "12345678"
  }
}

List available servicesListare servicii disponibile

GET/v1/organization/services/list

Returns the service keys that can be activated on a company and used as API key scopes.

Returnează cheile de serviciu care pot fi activate pe o companie și folosite ca domeniu pentru cheile API.

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": [
    {
      "key": "extrase",
      "label": "Extrase"
    },
    {
      "key": "efactura",
      "label": "eFactura"
    },
    {
      "key": "infocui",
      "label": "Info CUI"
    },
    {
      "key": "schimbvalutar",
      "label": "Schimb valutar"
    }
  ]
}

Activate a serviceActivare serviciu

POST/v1/organization/companies/{uid}/services/activate

Activates a single service for a company. A company must have a service active before API keys can call it. Use the uid from companies/list. The action is in the URL, so the body only carries the service.

Activează un singur serviciu pentru o companie. O companie trebuie să aibă serviciul activ înainte ca cheile API să-l poată apela. Folosește uid-ul din companies/list. Acțiunea este în URL, deci corpul conține doar serviciul.

FieldCâmpRequiredObligatoriuDescriptionDescriere
serviceyesdaService key: efactura, extrase, infocui, schimbvalutarCheie serviciu: efactura, extrase, infocui, schimbvalutar

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/organization/companies/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4/services/activate' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"service":"efactura"}'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "companyUid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
    "service": "efactura",
    "active": true
  }
}

Deactivate a serviceDezactivare serviciu

POST/v1/organization/companies/{uid}/services/deactivate

Deactivates a single service for a company (removes its service plan). Use the uid from companies/list. The body carries only the service.

Dezactivează un singur serviciu pentru o companie (îi elimină planul de serviciu). Folosește uid-ul din companies/list. Corpul conține doar serviciul.

FieldCâmpRequiredObligatoriuDescriptionDescriere
serviceyesdaService key: efactura, extrase, infocui, schimbvalutarCheie serviciu: efactura, extrase, infocui, schimbvalutar

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/organization/companies/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4/services/deactivate' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"service":"efactura"}'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "companyUid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
    "service": "efactura",
    "active": false
  }
}

Create a company API keyCreare cheie API pentru companie

POST/v1/organization/companies/{uid}/apikeys/create

Creates a company API key scoped to the given services. Use the uid from companies/list. The plaintext key is returned only once - store it securely. Use the returned key as X-Api-Key on service endpoints together with X-Org-Key.

Creează o cheie API pentru companie, limitată la serviciile indicate. Folosește uid-ul din companies/list. Cheia în clar este returnată o singură dată - stocheaz-o în siguranță. Folosește cheia returnată ca X-Api-Key pe endpoint-urile de servicii împreună cu X-Org-Key.

FieldCâmpRequiredObligatoriuDescriptionDescriere
nameyesdaHuman-readable label for the keyEtichetă lizibilă pentru cheie
servicesyesdaArray of service keys the key may call (at least one)Array de chei de serviciu pe care le poate apela (cel puțin una)

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://api.fint.ro/v1/organization/companies/a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4/apikeys/create' \
  -H 'X-Org-Key: YOUR_ORG_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"name":"My integration","services":["efactura","infocui"]}'

Response (201)Răspuns (201)

json
{
  "status": "success",
  "msg": "Store this key securely - it will not be shown again.",
  "reason": null,
  "data": {
    "id": 7,
    "companyUid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
    "name": "My integration",
    "apiKey": "key_live_Ab3...48chars",
    "services": [
      "efactura",
      "infocui"
    ]
  }
}

ErrorsErori

HTTPreasonWhenCând
401missing_org_api_keyNo X-Org-Key headerLipsește headerul X-Org-Key
401invalid_org_api_keyUnknown or deleted org keyCheie organizație necunoscută sau ștearsă
403enterprise_requiredOrganization is not on the Enterprise planOrganizația nu este pe planul Enterprise
403org_api_key_disabled, organization_suspended, organization_disabledOrg key or organization not activeCheie sau organizație inactivă
400invalid_json, missing_name, missing_cui, invalid_cui, missing_service, invalid_service, missing_servicesMissing or invalid body fieldsCâmpuri lipsă sau invalide
404company_not_foundCompany uid not in your organizationuid-ul companiei nu aparține organizației tale
409duplicate_cui, service_already_active, service_not_activeConflict - already exists or state mismatchConflict - există deja sau stare incorectă
500company_create_failed, service_update_failed, api_key_create_failedServer error while applying the changeEroare de server la aplicarea modificării
API referenceReferință API

SandboxSandbox

Build and test your integration against https://sandbox.fint.ro - a fully mocked copy of the Fint API that mirrors the live request and response shapes but never touches real providers or real company data.

Construiește și testează integrarea pe https://sandbox.fint.ro - o copie complet simulată a API-ului Fint, care reproduce structura cererilor și răspunsurilor reale, dar nu atinge niciodată furnizorii reali sau date reale de companie.

Safe to test. Sandbox responses are hardcoded mock data. No documents are sent to ANAF, no banks are contacted, nothing is stored, no billing limits apply, and calls are not logged. Use it to validate your HTTP client, auth headers, and response parsing before going live.

Sigur pentru testare. Răspunsurile sandbox sunt date simulate, codate fix. Niciun document nu ajunge la ANAF, nicio bancă nu este contactată, nimic nu este stocat, nu se aplică limite de facturare, iar apelurile nu sunt înregistrate. Folosește-l pentru a valida clientul HTTP, headerele de autentificare și parsarea răspunsurilor înainte de a trece pe producție.

How it worksCum funcționează

The sandbox is served from a separate host, sandbox.fint.ro, and exposes the same service endpoints as the live API (Extrase, eFactura, Info CUI, Schimb valutar) under the /v1 prefix. Every endpoint returns deterministic mock data, so the same request always yields the same response. Request methods, query parameters, the { status, msg, reason, data } envelope, and reason error codes all match the live API - only the host and the API keys differ.

Sandbox-ul este servit de pe un host separat, sandbox.fint.ro, și expune aceleași endpoint-uri ca API-ul live (Extrase, eFactura, Info CUI, Schimb valutar) sub prefixul /v1. Fiecare endpoint returnează date simulate deterministe, deci aceeași cerere produce mereu același răspuns. Metodele cererilor, parametrii din query, plicul { status, msg, reason, data } și codurile de eroare reason sunt identice cu API-ul live - diferă doar hostul și cheile API.

Differences from the live APIDiferențe față de API-ul live

AspectAspectLive APIAPI liveSandboxSandbox
Base URLURL de bazăhttps://api.fint.rohttps://sandbox.fint.ro
KeysCheiorg_live_* + key_live_*org_sandbox_* + key_sandbox_*
ProvidersFurnizoriReal upstream providersFurnizori realiNone - all data is mockedNiciunul - toate datele sunt simulate
DataDateYour real company dataDatele reale ale companiei taleFixed mock data, not persistedDate simulate fixe, nestocate
Billing / limitsFacturare / limite429 limit_exceeded may applyse poate aplicaNot enforcedNeaplicate
Request loggingÎnregistrare cereriLoggedÎnregistrateNot loggedNeînregistrate
Organization APIAPI OrganizațieAvailableDisponibilNot availableIndisponibil

AuthenticationAutentificare

Sandbox uses the same dual-key authentication as the live API, with one rule: both keys must carry the sandbox prefix. Live keys are rejected with invalid_org_api_key / invalid_api_key, and both keys must belong to the same organization.

Sandbox folosește aceeași autentificare cu două chei ca API-ul live, cu o regulă: ambele chei trebuie să aibă prefixul sandbox. Cheile live sunt respinse cu invalid_org_api_key / invalid_api_key, iar ambele chei trebuie să aparțină aceleiași organizații.

HeaderValueValoare
X-Org-KeyOrganization sandbox key (org_sandbox_…)Cheia sandbox de organizație (org_sandbox_…)
X-Api-KeyCompany sandbox key (key_sandbox_…)Cheia sandbox de companie (key_sandbox_…)

The company key may instead be sent as Authorization: Bearer key_sandbox_….

Cheia de companie poate fi trimisă alternativ ca Authorization: Bearer key_sandbox_….

bash
curl -sS 'https://sandbox.fint.ro/v1/extrase/accounts' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

Obtaining sandbox keysObținerea cheilor sandbox

Generate a sandbox key pair from the same pages as live keys, using the dedicated Cheie sandbox button. Each key is created once and is idempotent - returning to the page shows the same key. Sandbox keys are hidden from the live key list.

Generează o pereche de chei sandbox din aceleași pagini ca cele live, folosind butonul dedicat Cheie sandbox. Fiecare cheie este creată o singură dată și este idempotentă - la revenirea pe pagină apare aceeași cheie. Cheile sandbox nu apar în lista cheilor live.

KeyCheieWhereUndeNotesNote
OrganizationOrganizație (org_sandbox_)Header → API → Chei APICheie sandboxGenerează cheie sandboxHeader → API → Chei APICheie sandboxGenerează cheie sandboxOne per organization.Una per organizație.
CompanyCompanie (key_sandbox_)Configurare → Chei APICheie sandboxGenerează cheie sandboxConfigurare → Chei APICheie sandboxGenerează cheie sandboxOne per active company; automatically scoped to all four services.Una per companie activă; include automat toate cele patru servicii.

Extrase

Mocks 4 bank accounts (BCR RON, BCR EUR, ING RON, CEC RON), 50 transactions, and 3 bank consents (BCR and ING enabled; CEC disabled/expired). Field and parameter reference is identical to the production Extrase page - only the host and key prefixes differ.

Simulează 4 conturi bancare (BCR RON, BCR EUR, ING RON, CEC RON), 50 de tranzacții și 3 consimțăminte bancare (BCR și ING active; CEC inactiv/expirat). Referința câmpurilor și parametrilor este identică cu pagina de producție Extrase - diferă doar hostul și prefixele cheilor.

List accountsListare conturi

GET/v1/extrase/accounts

Example requestExemplu de cerere

bash
curl -sS 'https://sandbox.fint.ro/v1/extrase/accounts' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

Response (first of 4 accounts)Răspuns (primul din 4 conturi)

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "accounts": [
      {
        "uid": "bcrron0000000000000000000000acc1",
        "status": "enabled",
        "iban": "RO49RNCB0000000000000001",
        "currency": "RON",
        "balance": 15230.45,
        "name": "Cont curent RON",
        "ownerName": "Sandbox Test SRL",
        "product": "Cont curent",
        "cashAccountType": "CACC",
        "bic": "RNCBROBU",
        "bank": {
          "code": "BCR",
          "name": "BCR Bank",
          "bic": "RNCBROBU",
          "icon": "https://cdn.fint.ro/image/bank/icon/bcr.png"
        },
        "consentStatus": "enabled",
        "consentValidUntil": "2026-12-26",
        "lastTransactionsSync": "2026-06-29 07:00:00",
        "createdOn": "2026-06-29 09:00:00",
        "updatedOn": "2026-06-29 09:00:00"
      }
    ],
    "total": 4
  }
}

The CEC RON account is returned too, but with consentStatus: disabled and an expired consentValidUntil.

Contul CEC RON este returnat și el, dar cu consentStatus: disabled și un consentValidUntil expirat.

List transactionsListare tranzacții

GET/v1/extrase/transactions

Supports the same query parameters as live: limit, offset, type, accountUid, from, to, q. Transactions belong only to the three enabled accounts (the disabled CEC account returns none).

Acceptă aceiași parametri de query ca live: limit, offset, type, accountUid, from, to, q. Tranzacțiile aparțin doar celor trei conturi active (contul CEC inactiv nu returnează niciuna).

Example requestExemplu de cerere

bash
curl -sS 'https://sandbox.fint.ro/v1/extrase/transactions?limit=50&offset=0' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "transactions": [
      {
        "uid": "txn00000000000000000000000000001",
        "type": "outgoing",
        "bookingDate": "2026-06-28",
        "interlocutor": "Enel Energie SA",
        "interlocutorIban": "RO55BACX0000000000000555",
        "amount": -73.30,
        "currency": "RON",
        "fintDescription": "Factura energie electrica",
        "rawDescription": "Factura energie electrica / ref 1",
        "category": "utilities",
        "createdOn": "2026-06-28 09:00:00",
        "accountUid": "bcrron0000000000000000000000acc1",
        "accountIban": "RO49RNCB0000000000000001",
        "accountName": "Cont curent RON",
        "bank": {
          "code": "BCR",
          "name": "BCR Bank",
          "bic": "RNCBROBU",
          "icon": "https://cdn.fint.ro/image/bank/icon/bcr.png"
        }
      }
    ],
    "total": 50,
    "limit": 50,
    "offset": 0
  }
}

Get a transactionObținere tranzacție

GET/v1/extrase/transaction/{uid}

Use a uid from the list above (e.g. txn00000000000000000000000000001). The detail response adds provider fields such as valueDate, executionDateTime, transactionId, entryReference and endToEndId.

Folosește un uid din lista de mai sus (ex. txn00000000000000000000000000001). Răspunsul detaliat adaugă câmpuri de la furnizor precum valueDate, executionDateTime, transactionId, entryReference și endToEndId.

bash
curl -sS 'https://sandbox.fint.ro/v1/extrase/transaction/txn00000000000000000000000000001' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

Create onboarding linkCreare link de onboarding

POST/v1/extrase/onboarding

Example requestExemplu de cerere

bash
curl -sS -X POST 'https://sandbox.fint.ro/v1/extrase/onboarding' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…' \
  -H 'Content-Type: application/json' \
  -d '{}'

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "authLink": "https://sandbox.fint.ro/consent/extrase",
    "expiresOn": "2026-07-06 09:00:00"
  }
}

The authLink opens a mock consent landing page (see Consent pages) - no bank OAuth occurs.

Linkul authLink deschide o pagină de consimțământ simulată (vezi Pagini de consimțământ) - nu are loc niciun OAuth bancar.

Check consentsVerificare consimțăminte

GET/v1/extrase/consents

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "consents": [
      {
        "bankCode": "BCR",
        "bankName": "BCR Bank",
        "consentStatus": "enabled",
        "validUntil": "2026-12-26",
        "updatedOn": "2026-06-26 09:00:00"
      },
      {
        "bankCode": "ING",
        "bankName": "ING Bank",
        "consentStatus": "enabled",
        "validUntil": "2026-12-26",
        "updatedOn": "2026-06-26 09:00:00"
      },
      {
        "bankCode": "CEC",
        "bankName": "CEC Bank SA",
        "consentStatus": "disabled",
        "validUntil": "2026-06-19",
        "updatedOn": "2026-03-21 09:00:00"
      }
    ],
    "total": 3
  }
}

eFactura

Mocks 50 documents (30 outgoing, 20 incoming, including two type 381 credit notes). Document uids are production-shaped with a sandbox_ prefix (^sandbox_[A-Za-z0-9]{32}$) and are deterministic. Field reference is identical to the production eFactura page.

Simulează 50 de documente (30 emise, 20 primite, inclusiv două note de creditare tip 381). Uid-urile documentelor au forma de producție cu prefix sandbox_ (^sandbox_[A-Za-z0-9]{32}$) și sunt deterministe. Referința câmpurilor este identică cu pagina de producție eFactura.

Send a documentTrimitere document

POST/v1/efactura/send

Validates the JSON body and returns 201 with the uid of the first mock outgoing pending document - you can immediately fetch it with GET /v1/efactura/document. Nothing is uploaded to ANAF.

Validează corpul JSON și returnează 201 cu uid-ul primului document emis simulat cu status pending - îl poți obține imediat cu GET /v1/efactura/document. Nimic nu este încărcat la ANAF.

Example requestExemplu de cerere
curl -sS -X POST 'https://sandbox.fint.ro/v1/efactura/send' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…' \
  -H 'Content-Type: application/json' \
  -d '{
    "documentNumber": "TEST-1",
    "documentDate": "2026-06-29",
    "currency": "RON",
    "documentTypeCode": "380",
    "from": {
      "cui": "123456",
      "name": "Sandbox Test SRL"
    },
    "to": {
      "cui": "654321",
      "name": "Buyer SRL"
    },
    "items": [
      {
        "name": "Service",
        "quantity": 1,
        "price": 100,
        "vatRate": 19,
        "vatScheme": "S"
      }
    ]
  }'
{
  "documentNumber": "TEST-1",
  "documentDate": "2026-06-29",
  "currency": "RON",
  "documentTypeCode": "380",
  "from": {
    "cui": "123456",
    "name": "Sandbox Test SRL"
  },
  "to": {
    "cui": "654321",
    "name": "Buyer SRL"
  },
  "items": [
    {
      "name": "Service",
      "quantity": 1,
      "price": 100,
      "vatRate": 19,
      "vatScheme": "S"
    }
  ]
}

Response (201)Răspuns (201)

json
{
  "status": "success",
  "msg": "Document has been validated with Fint. Pending upload and ANAF confirmation.",
  "reason": null,
  "data": {
    "uid": "sandbox_XqdTICN1YmGkD8RV3cUE0keIZkRMoufc",
    "status": "pending"
  }
}

Get a documentObținere document

GET/v1/efactura/document

Example requestExemplu de cerere

bash
curl -sS 'https://sandbox.fint.ro/v1/efactura/document?uid=sandbox_XqdTICN1YmGkD8RV3cUE0keIZkRMoufc' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "uid": "sandbox_XqdTICN1YmGkD8RV3cUE0keIZkRMoufc",
    "type": "outgoing",
    "status": "pending",
    "errorMessage": null,
    "source": "api",
    "documentTypeCode": "380",
    "documentNumber": "SBX-OUT-0001",
    "documentDate": "2026-06-28",
    "currency": "RON",
    "fromTo": "Alpha Distribution SRL",
    "fromToCui": "RO234567",
    "total": 173.50,
    "anafStatus": null,
    "anafId": null,
    "pdfAvailable": 0,
    "xmlAvailable": 0,
    "from": {
      "cui": "RO123456",
      "name": "Sandbox Test SRL",
      "address": {
        "line": "Str. Exemplu nr. 10",
        "city": "București",
        "postalCode": "010101",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "to": {
      "cui": "RO234567",
      "name": "Alpha Distribution SRL",
      "address": {
        "line": "Bd. Unirii nr. 5",
        "city": "București",
        "postalCode": "030101",
        "countrySubdivision": "RO-B",
        "country": "RO"
      }
    },
    "items": [
      {
        "name": "Produs/serviciu sandbox",
        "quantity": 1,
        "unitOfMeasure": "C62",
        "unitPrice": 145.80,
        "vatRate": 19,
        "lineTotal": 145.80
      }
    ],
    "paymentMeans": {
      "paymentMeansCode": "30",
      "paymentId": "SBX-OUT-0001",
      "iban": "RO49RNCB0000000000000001",
      "accountName": "Sandbox Test SRL",
      "bic": "RNCBROBU"
    },
    "vatTotal": 27.70
  }
}

List documentsListare documente

GET/v1/efactura/documents

Same query parameters as live: type (outgoing default, or incoming), limit, offset, status.

Aceiași parametri de query ca live: type (outgoing implicit, sau incoming), limit, offset, status.

bash
curl -sS 'https://sandbox.fint.ro/v1/efactura/documents?type=incoming&limit=50&offset=0' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "documents": [
      {
        "uid": "sandbox_…",
        "type": "incoming",
        "status": "validated",
        "source": "spv",
        "documentTypeCode": "380",
        "documentNumber": "SUP-IN-0001",
        "documentDate": "2026-06-28",
        "currency": "RON",
        "fromTo": "Alpha Distribution SRL",
        "fromToCui": "RO234567",
        "total": 167.75,
        "anafStatus": "ok",
        "anafId": "6000000001",
        "processed": 1,
        "createdOn": "2026-06-28 09:00:00",
        "updatedOn": "2026-06-28 09:30:00"
      }
    ],
    "total": 20,
    "limit": 50,
    "offset": 0
  }
}

Download a documentDescărcare document

GET/v1/efactura/download

No binary files exist in the sandbox, so this endpoint always returns 404 sandbox_download_unavailable.

În sandbox nu există fișiere binare, așa că acest endpoint returnează mereu 404 sandbox_download_unavailable.

json
{
  "status": "error",
  "msg": null,
  "reason": "sandbox_download_unavailable",
  "data": null
}

Create onboarding linkCreare link de onboarding

POST/v1/efactura/onboarding

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "authLink": "https://sandbox.fint.ro/consent/efactura",
    "expiresOn": "2026-07-06 09:00:00"
  }
}
GET/v1/efactura/consent

ResponseRăspuns

json
{
  "status": "success",
  "data": {
    "consentStatus": "enabled",
    "validUntil": "2026-12-26",
    "updatedOn": "2026-06-26 09:00:00"
  }
}

Info CUI

GET/v1/infocui

Most CUIs return a fixed mock company, Sandbox Test SRL. The special CUI RO222222 returns 404 company_not_found so you can test the not-found path. Field reference is identical to the production Info CUI page.

Majoritatea CUI-urilor returnează o companie simulată fixă, Sandbox Test SRL. CUI-ul special RO222222 returnează 404 company_not_found, ca să poți testa cazul „negăsit”. Referința câmpurilor este identică cu pagina de producție Info CUI.

Example requestExemplu de cerere

bash
curl -sS 'https://sandbox.fint.ro/v1/infocui?cui=RO123456' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "cui": "123456",
    "name": "Sandbox Test SRL",
    "registrationNumber": "J40/1234/2015",
    "address": "Str. Exemplu nr. 10, Sector 1",
    "addressFull": "Str. Exemplu nr. 10, Sector 1, București, România",
    "city": "București",
    "county": "București",
    "countyCode": "B",
    "country": "România",
    "postalCode": "010101",
    "phone": "+40212345678",
    "fax": null,
    "iban": "RO49RNCB0000000000000001",
    "registrationStatus": "INREGISTRAT din data 2015-03-12",
    "registrationDate": "2015-03-12",
    "caenCode": "6201",
    "eInvoiceEnabled": true,
    "taxAuthority": "Administrația Sector 1",
    "legalForm": "Societate cu răspundere limitată",
    "vatRegistered": true,
    "cashVatEnabled": false
  }
}

Schimb valutar

GET/v1/schimbvalutar

Returns fixed mock rates with no upstream fetch: EUR 5.2390, USD 4.8500, GBP 6.1200, CHF 5.4500, HUF 1.3120 (per 100). from must be RON; an optional date is echoed back. Field reference is identical to the production Schimb valutar page.

Returnează cursuri simulate fixe, fără apel extern: EUR 5.2390, USD 4.8500, GBP 6.1200, CHF 5.4500, HUF 1.3120 (la 100). from trebuie să fie RON; un date opțional este returnat ca atare. Referința câmpurilor este identică cu pagina de producție Schimb valutar.

Example requestExemplu de cerere

bash
curl -sS 'https://sandbox.fint.ro/v1/schimbvalutar?from=RON&to=EUR' \
  -H 'X-Org-Key: org_sandbox_…' \
  -H 'X-Api-Key: key_sandbox_…'

ResponseRăspuns

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "from": "RON",
    "to": "EUR",
    "date": "2026-06-29",
    "rate": 5.239,
    "multiplier": 1,
    "source": "bnr",
    "publishedDate": "2026-06-29"
  }
}

Onboarding endpoints return an authLink that opens in a browser. In sandbox these resolve to mock success pages - same layout as production, but no provider redirect, session, or database write.

Endpoint-urile de onboarding returnează un authLink care se deschide în browser. În sandbox acestea duc la pagini de succes simulate - același aspect ca producția, dar fără redirecționare către furnizor, sesiune sau scriere în baza de date.

URLSimulatesSimulează
https://sandbox.fint.ro/consent/extraseExtrase onboarding success (mock IBAN list)Succes onboarding Extrase (listă IBAN simulată)
https://sandbox.fint.ro/consent/efacturaeFactura onboarding success (mock CUI)Succes onboarding eFactura (CUI simulat)

Not available in sandbox. The Organization API (/v1/organization/*) is live-only and is not served by the sandbox host. Billing limits are never enforced and sandbox calls are not logged.

Indisponibil în sandbox. API-ul Organizație (/v1/organization/*) există doar pe producție și nu este servit de hostul sandbox. Limitele de facturare nu se aplică niciodată, iar apelurile sandbox nu sunt înregistrate.

ReferenceReferință

ConceptsConcepte

Background on the Romanian financial and regulatory context behind Fint's services. Useful if you are new to open banking, e-invoicing, or Romanian tax identifiers.

Context financiar și de reglementare românesc din spatele serviciilor Fint. Util dacă ești nou în open banking, facturare electronică sau identificatori fiscali românești.

Open Banking (PSD2)Open Banking (PSD2)

PSD2 (the EU Payment Services Directive 2) requires banks to expose customer account data and payment initiation via standardized APIs, provided the account holder has given explicit consent. The consent is established through an OAuth flow with the bank: the account holder authenticates at their bank and authorizes a third party to read their accounts and transactions.

PSD2 (Directiva europeană privind serviciile de plată 2) obligă băncile să expună date de cont și inițiere de plăți prin API-uri standardizate, cu condiția consimțământului explicit al titularului de cont. Consimțământul se stabilește printr-un flux OAuth cu banca: titularul se autentifică la bancă și autorizează o terță parte să citească conturile și tranzacțiile.

In Fint's Extrase service, this means each connected bank requires its own PSD2 consent. Once authorized, Fint keeps accounts, balances, and transactions synchronized from the bank. The public API returns this already-synchronized data; it does not call the bank in real time. Consents have a validity period set by the bank; Fint maintains the connection and notifies your organization when a consent expires or is revoked.

În serviciul Extrase Fint, asta înseamnă că fiecare bancă conectată necesită propriul consimțământ PSD2. Odată autorizat, Fint menține conturile, soldurile și tranzacțiile sincronizate de la bancă. API-ul public returnează aceste date deja sincronizate; nu apelează banca în timp real. Consimțămintele au o perioadă de valabilitate stabilită de bancă; Fint menține conexiunea și notifică organizația când un consimțământ expiră sau este revocat.

See Extrase for API endpoints and consent setup.

Vezi Extrase pentru endpoint-uri API și configurarea consimțământului.

eFactura (Romanian e-invoicing)eFactura (facturare electronică românească)

eFactura is the Romanian government's electronic invoicing system, operated by ANAF (Agenția Națională de Administrare Fiscală). Businesses in Romania are legally required to submit and receive invoices electronically through ANAF's SPV (Spațiu Privat Virtual). Invoices are formatted as UBL 2.1 XML; ANAF validates the document and countersigns it upon acceptance.

eFactura este sistemul guvernamental român de facturare electronică, operat de ANAF (Agenția Națională de Administrare Fiscală). Afacerile din România sunt obligate legal să trimită și să primească facturi electronic prin SPV ANAF (Spațiu Privat Virtual). Facturile sunt formatate ca UBL 2.1 XML; ANAF validează documentul și îl contrasemnează la acceptare.

To submit invoices via Fint, the company must have active SPV access at ANAF and must authorize Fint through an ANAF OAuth consent. This authorization can only be completed by a person who holds a qualified digital certificate registered at ANAF for that company's CUI. Once authorized, Fint submits outgoing documents to ANAF and provides incoming documents received from other parties.

Pentru a trimite facturi prin Fint, compania trebuie să aibă acces SPV activ la ANAF și să autorizeze Fint printr-un consimțământ OAuth ANAF. Această autorizare poate fi finalizată doar de o persoană cu certificat digital calificat înregistrat la ANAF pentru CUI-ul companiei. Odată autorizat, Fint trimite documentele de ieșire la ANAF și furnizează documente de intrare primite de la alte părți.

The most common document type is 380 (standard invoice). Other types include 381 (credit note) and 384 (corrective invoice). See eFactura for the full API reference and consent setup.

Cel mai frecvent tip de document este 380 (factură standard). Alte tipuri includ 381 (notă de creditare) și 384 (factură corectată). Vezi eFactura pentru referința API completă și configurarea consimțământului.

CUI (Cod Unic de Înregistrare)CUI (Cod Unic de Înregistrare)

The CUI is the Romanian company fiscal identifier, roughly equivalent to a VAT or company registration number in other EU countries. It uniquely identifies a legal entity registered in Romania. A CUI may appear with or without the RO prefix (e.g. RO12345678 or 12345678); Fint normalizes all inputs to digits only.

CUI-ul este identificatorul fiscal al companiei românești, echivalent aproximativ cu numărul de TVA sau de înregistrare în alte țări UE. Identifică unic o entitate juridică înregistrată în România. Un CUI poate apărea cu sau fără prefixul RO (ex. RO12345678 sau 12345678); Fint normalizează toate intrările la cifre.

The CUI is used in two ways within Fint: as the lookup target in Info CUI (retrieve public company data for any valid Romanian CUI), and as the company identifier in eFactura where from.cui must match the CUI for which your ANAF consent was granted.

CUI-ul este folosit în două moduri în Fint: ca țintă de căutare în Info CUI (recuperează date publice despre companie pentru orice CUI românesc valid) și ca identificator de companie în eFactura, unde from.cui trebuie să coincidă cu CUI-ul pentru care ai primit consimțământ ANAF.

Reference exchange ratesCursuri de referință

One official Romanian reference exchange rate is published per foreign currency per banking day, typically around 13:00 local time. Rates are expressed as RON per 1 unit of the foreign currency, with a multiplier applied for currencies quoted in lots (e.g. 100 JPY). These are official reference rates used for accounting and fiscal purposes, not live market trading rates.

Se publică un curs oficial românesc de referință per valută străină per zi bancară, de obicei în jurul orei 13:00 ora locală. Cursurile sunt exprimate ca RON per 1 unitate de valută străină, cu multiplicator aplicat pentru valute cotate în loturi (ex. 100 JPY). Sunt cursuri oficiale de referință pentru contabilitate și fiscalitate, nu cursuri de tranzacționare live.

When querying a rate for a date when no publication exists (weekends, public holidays, or before the daily update), Fint returns the most recent available rate with its actual publication date in publishedDate. Future dates are rejected with 400 future_date. See Schimb valutar for the API reference.

Când interoghezi un curs pentru o dată fără publicare (weekend, sărbători legale sau înainte de actualizarea zilnică), Fint returnează cel mai recent curs disponibil cu data reală de publicare în publishedDate. Datele viitoare sunt respinse cu 400 future_date. Vezi Schimb valutar pentru referința API.

ReferenceReferință

ConventionsConvenții

Conventions shared by every Fint endpoint: request format, the response envelope, error handling, and identifiers.

Convenții comune tuturor endpoint-urilor Fint: formatul cererii, envelopa de răspuns, gestionarea erorilor și identificatorii.

GeneralGenerale

  • Content type: request bodies are JSON (Content-Type: application/json) unless noted.
  • Tip de conținut: corpurile cererilor sunt JSON (Content-Type: application/json), dacă nu se specifică altfel.
  • Envelope: responses use { "status", "msg", "reason", "data" }. On success, msg and reason are usually null.
  • Envelopă: răspunsurile folosesc { "status", "msg", "reason", "data" }. La succes, msg și reason sunt de obicei null.
  • Error handling: branch on the stable reason field (snake_case), not the human-readable msg.
  • Gestionarea erorilor: ramifică pe câmpul stabil reason (snake_case), nu pe msg lizibil.
  • Identifiers: resources are referenced by a public uid; internal numeric ids are never exposed.
  • Identificatori: resursele sunt referite printr-un uid public; id-urile numerice interne nu sunt expuse niciodată.

Error envelopeEnvelopă de eroare

All responses share a single JSON envelope. On errors, branch on the stable reason field rather than the human-readable msg.

Toate răspunsurile folosesc o singură envelopă JSON. La erori, ramifică pe câmpul stabil reason, nu pe msg lizibil.

json
{
  "status": "error",
  "msg": "A human-readable English sentence.",
  "reason": "stable_snake_case_identifier",
  "data": null
}

The /efactura/download endpoint is the exception on success: it streams a binary file instead of the envelope. Validation errors on /efactura/send include a data.errors[] array with per-field code, field and message.

Endpoint-ul /efactura/download este excepția la succes: transmite un fișier binar în loc de envelopă. Erorile de validare la /efactura/send includ un array data.errors[] cu code, field și message per câmp.

Error codes are documented where they occur: each service’s reference page lists its own reason codes, and authentication errors are documented under Authentication.

Codurile de eroare sunt documentate acolo unde apar: pagina de referință a fiecărui serviciu listează propriile coduri reason, iar erorile de autentificare sunt documentate la Autentificare.

Request bodyCorpul cererii

  • Content-Type: always Content-Type: application/json for POST requests.
  • Content-Type: întotdeauna Content-Type: application/json pentru cererile POST.
  • Root type: the body must be a JSON object ({…}). An empty object is accepted on endpoints that take no body.
  • Tipul rădăcinii: corpul trebuie să fie un obiect JSON ({…}). Un obiect gol este acceptat pe endpoint-urile care nu necesită corp.
  • Size limit: 512 KiB maximum. Bodies larger than this are rejected before JSON parsing.
  • Limită de dimensiune: maximum 512 KiB. Corpurile mai mari sunt respinse înainte de parsarea JSON.

Body parse errors return 400 invalid_json with a data.detail sub-code identifying the cause:

Erorile de parsare a corpului returnează 400 invalid_json cu un sub-cod data.detail care identifică cauza:

data.detailCauseCauză
empty_bodyNo body sent when one is requiredNiciun corp trimis când este necesar
payload_too_largeBody exceeds 512 KiBCorpul depășește 512 KiB
json_syntax_errorBody is not valid JSONCorpul nu este JSON valid
invalid_rootRoot value is not a JSON objectValoarea rădăcină nu este un obiect JSON

PaginationPaginare

List endpoints use offset-based pagination with two query parameters: limit (page size, default 50, max 100) and offset (rows to skip, default 0). The response always echoes both values back alongside a total count of all matching rows - use it to calculate whether more pages exist.

Endpoint-urile de listare folosesc paginare bazată pe offset cu doi parametri: limit (dimensiunea paginii, implicit 50, maxim 100) și offset (rânduri de sărit, implicit 0). Răspunsul returnează mereu ambele valori împreună cu un total al tuturor rândurilor care corespund - folosește-l pentru a calcula dacă mai există pagini.

json
{
  "status": "success",
  "msg": null,
  "reason": null,
  "data": {
    "documents": [
      "..."
    ],
    "total": 142,
    "limit": 50,
    "offset": 0
  }
}

Monetary amountsSume monetare

All monetary amounts in API responses are decimal strings, not JSON numbers - e.g. "119.00", not 119.00. This avoids the floating-point rounding errors that affect native floats in most languages (119.10 cannot be represented exactly in binary IEEE 754). Always parse monetary fields with your language’s decimal type (Decimal, BigDecimal, decimal.Decimal, etc.).

Toate sumele monetare din răspunsurile API sunt șiruri zecimale, nu numere JSON - ex. "119.00", nu 119.00. Aceasta evită erorile de rotunjire în virgulă mobilă care afectează float-urile native în majoritatea limbajelor (119.10 nu poate fi reprezentat exact în IEEE 754 binar). Parsează întotdeauna câmpurile monetare cu tipul zecimal al limbajului tău (Decimal, BigDecimal, decimal.Decimal etc.).

Dates and timestampsDate și timestamp-uri

  • Dates - calendar dates use YYYY-MM-DD (e.g. "2026-06-29"), both in query parameters and response fields such as documentDate, bookingDate, validUntil.
  • Date calendaristice - folosesc formatul YYYY-MM-DD (ex. "2026-06-29"), atât în parametrii de interogare cât și în câmpurile de răspuns precum documentDate, bookingDate, validUntil.
  • Timestamps - datetime fields use YYYY-MM-DD HH:MM:SS (e.g. "2026-06-29 10:00:00"), as in createdOn, updatedOn, expiresOn.
  • Timestamp-uri - câmpurile datetime folosesc YYYY-MM-DD HH:MM:SS (ex. "2026-06-29 10:00:00"), ca în createdOn, updatedOn, expiresOn.

Unknown routesRute necunoscute

Any misspelled or non-existent path under /v1/ returns 404 not_found in the standard JSON envelope - never an HTML error page. It is safe to always parse Fint API responses as JSON.

Orice cale greșită sau inexistentă sub /v1/ returnează 404 not_found în envelopa JSON standard - niciodată o pagină de eroare HTML. Răspunsurile API Fint pot fi parsate întotdeauna ca JSON.

ReferenceReferință

Self-service APIAPI self-service

Most operations you would perform in the Fint dashboard (/ui) are also available through the API, so you can provision and operate entities programmatically - no manual UI steps.

Majoritatea operațiunilor pe care le-ai face în panoul Fint (/ui) sunt disponibile și prin API, astfel încât poți provisiona și opera entități programatic - fără pași manuali în interfață.

Two building blocks make this possible. The Organization API manages organization-level resources - create companies, activate or deactivate services, and issue company API keys - using your organization key alone. Per-service onboarding endpoints (eFactura and Extrase) generate a browser link your end-user opens to grant ANAF or bank (PSD2) consent, so even consent flows can be triggered straight from the API.

Două componente fac asta posibil. API-ul Organizație gestionează resursele la nivel de organizație - creează companii, activează sau dezactivează servicii și emite chei API de companie - folosind doar cheia de organizație. Endpoint-urile de onboarding per serviciu (eFactura și Extrase) generează un link de browser pe care utilizatorul final îl deschide pentru a acorda consimțământul ANAF sau bancar (PSD2), astfel încât și fluxurile de consimțământ pot fi declanșate direct din API.

Enterprise plan. The Organization API capabilities below require the Enterprise plan. On other plans these are managed in the UI, and the API returns 403 enterprise_required.

Plan Enterprise. Capabilitățile API-ului Organizație de mai jos necesită planul Enterprise. Pe alte planuri acestea se gestionează în interfață, iar API-ul returnează 403 enterprise_required.

UI vs APIInterfață vs API

CapabilityCapabilitateUI (/ui)Interfață (/ui)Self-service APIAPI self-service
Create company (license)Creare companie (licență)YesDaYes - Organization API EnterpriseDa - API Organizație Enterprise
List companiesListare companiiYesDaYes - Organization API EnterpriseDa - API Organizație Enterprise
Activate / deactivate a service on a companyActivare / dezactivare serviciu pe o companieYesDaYes - Organization API EnterpriseDa - API Organizație Enterprise
Create company API keyCreare cheie API de companieYesDaYes - Organization API EnterpriseDa - API Organizație Enterprise
Create organization (master) API keyCreare cheie API de organizație (master)YesDaNo - UI onlyNu - doar în interfață
Generate sandbox keysGenerare chei sandboxYesDaNo - UI onlyNu - doar în interfață
eFactura ANAF consent onboardingOnboarding consimțământ ANAF eFacturaYesDaYes - onboarding endpointDa - endpoint onboarding
Extrase bank (PSD2) consent onboardingOnboarding consimțământ bancar (PSD2) ExtraseYesDaYes - onboarding endpointDa - endpoint onboarding
Manage users / rolesGestionare utilizatori / roluriYesDaNo - UI onlyNu - doar în interfață

See the Organization API for request and response shapes, and Account model for how organizations, companies, and keys fit together.

Vezi API-ul Organizație pentru formatele de cerere și răspuns și Modelul de cont pentru cum se leagă organizațiile, companiile și cheile.