oneapi
Autentificare
Financiar v1 / RiscCredit

Comerţul cu servicii (EBOPS)

62 de categorii de servicii × 3 fluxuri — export, import, sold — lunar din ianuarie 2010 sau
trimestrial. Ambele frecvenţe au exact aceleaşi 186 de coduri.

Totalul e identic cu linia „Servicii" din contul curent al balanţei de plăţi: 197 din 197 de
luni, abatere 0. În mai 2026: export 3.640, import 2.634, sold 1.007 — aceleaşi cifre în ambele
rute. Asta e desfacerea liniei aceleia în 62 de poziţii, nu un set paralel de date.

Ierarhia e în cod, iar denumirea e plată — invers faţă de rezerve. Toate cele 186 de denumiri
stau la acelaşi nivel, deci structura se ia din sufixul codului, care se cuibăreşte pe caractere:
STRMP sub STRM sub STR sub S. cale se compune din etichetele strămoşilor, deci e derivată,
nu citită dintr-un câmp.

Codul nu e crezut pe cuvânt: identitati.ierarhie verifică fiecare nod cu copii faţă de suma
copiilor lui direcţi, la fiecare cerere. Dacă nesting-ul pe prefix ar fi o coincidenţă de şiruri,
sumele n-ar ieşi. Pe toată istoria, toate cele 48 de noduri se închid.

sold = export − import se verifică pe toate cele 62 de categorii, nu doar pe total — 10.609
verificări la lunar, toate în ±1.

Toleranţa sumelor e derivată: toate cele 31.827 de valori ale clasei sunt milioane întregi, deci o
sumă de k componente e mărginită de ⌊(k+1)/2⌋.

GET
https://oneapi.ro/api/financiar/v1/comert-servicii

Parametri de interogare

NumeTipDescriereValori acceptate
frecventaopțional string | null Opţional, implicit lunar. Sau trimestrial — aceleaşi 186 de coduri. lunartrimestrial
fluxopțional string | null Opţional: export, import, sold. exportimportsold
de_laopțional string | null Opţional, YYYY-MM sau YYYY-Tn. ex. 2024-06-15
pana_laopțional string | null Opţional, YYYY-MM sau YYYY-Tn. Cel mult 120 de perioade. ex. 2024-06-15
nivel_maxopțional integer | null Opţional, 1–5. nivel_max=2 dă cele 12 capitole, fără subdiviziuni. 1 – 5

Cum se comportă

  • Comerţul internaţional cu servicii în clasificarea extinsă EBOPS — 62 de categorii × 3 fluxuri (export, import, sold), lunar din ianuarie 2010 sau trimestrial. Ambele frecvenţe au exact aceleaşi 186 de coduri.
  • Totalul e identic cu linia „Servicii" din contul curent al balanţei de plăţi — verificat pe 197 din 197 de luni, abatere 0. În mai 2026: export 3.640, import 2.634, sold 1.007, aceleaşi cifre în ambele rute. Ruta desface acea linie în 62 de poziţii; nu e un set paralel de date.
  • Ierarhia e în cod, iar denumirea e plată — exact invers faţă de rezerve. Toate cele 186 de denumiri stau la acelaşi nivel („EXPORT; Servicii de transport maritim de pasageri"), deci calea din denumire nu spune nimic. Structura trăieşte în sufixul codului, care se cuibăreşte pe caractere: STRMP sub STRM sub STR sub S. Verificarea cale-vs-cod, rulată la fiecare clasă, e cea care prinde diferenţa — la rezerve verdictul a fost invers.
  • Codul nu e crezut pe cuvânt. cale e derivată din etichetele strămoşilor, deci ar minţi dacă nesting-ul pe prefix ar fi o simplă coincidenţă de şiruri. De aceea identitati.ierarhie verifică, la fiecare cerere, fiecare nod cu copii faţă de suma copiilor lui direcţi: 48 de noduri, toate se închid, pe 7.989 de perioade-nod la lunar şi 2.637 la trimestrial.
  • sold = export − import se verifică pe toate cele 62 de categorii, nu doar pe total — 10.609 verificări la lunar şi 3.497 la trimestrial, toate în ±1.
  • Ambele verificări rulează pe toate cele 186 de poziţii, indiferent de flux sau nivel_max: un filtru n-are voie să facă garanţia să dispară.
  • Toleranţa sumelor e derivată, fiindcă toate cele 31.827 de valori ale clasei sunt milioane întregi — verificat, niciuna cu zecimale — deci o sumă de k componente e mărginită de ⌊(k+1)/2⌋. La investiţiile directe regula nu se aplică, acolo valorile au zecimale.
  • Trimestrialul e suma celor trei luni (65 din 65, abatere maximă 1). Seria lunară merge cu patru luni mai departe.
  • Fereastra e plafonată la 120 de perioade, ca la balanţa de plăţi — sunt 186 de poziţii.

La ce folosește

  • Exportul de servicii informatice, categoria cea mai mare a României după transport.
  • Balanţa turismului: cât cheltuiesc străinii aici faţă de cât cheltuiesc românii afară.
  • Transportul rutier de mărfuri, separat de restul transporturilor.

Structura răspunsului

CâmpTipDescriere
data.frecventa string Frecvenţa la care sursa publică seria (zilnic, lunar, trimestrial, anual).
data.clasificare string Clasificarea după care sunt împărţite valorile.
data.de_la string Începutul intervalului acoperit de răspuns.
data.pana_la string Sfârşitul intervalului acoperit de răspuns, inclusiv.
data.unitate string Unitatea de măsură a valorilor. Citeşte-o înainte de a le pune pe un grafic sau de a le aduna.
data.filtre array Filtrele aplicate efectiv, aşa cum le-a înţeles ruta — util când o valoare a fost normalizată.
data.perioade array Perioadele pentru care există valori.
data.pozitii[].cod string Codul din nomenclatorul sursei — cheia pe care se filtrează.
data.pozitii[].flux string Sensul fluxului (de regulă import ori export).
data.pozitii[].categorie string Sufixul de cod comun celor trei fluxuri — STRM e transportul maritim şi la export, şi la import.
data.pozitii[].eticheta string Eticheta afişabilă a valorii — versiunea citibilă a codului de alături.
data.pozitii[].cale array Etichetele strămoşilor, de la „Servicii" în jos. Derivată din ierarhia codului, validată prin sume.
data.pozitii[].nivel integer Adâncimea, 1–5.
data.pozitii[].parinte null Codul poziţiei-părinte. null la totalul fiecărui flux.
data.pozitii[].unitate string Unitatea de măsură a valorilor. Citeşte-o înainte de a le pune pe un grafic sau de a le aduna.
data.pozitii[].perioade_publicate integer Câte perioade a publicat efectiv sursa.
data.pozitii[].valori object Valorile seriei, pe perioade.
data.identitati.ierarhie.identitate string Identitatea verificată — ce sumă trebuie să dea ce total.
data.identitati.ierarhie.noduri_cu_copii integer Câte noduri din ierarhie au cel puţin un descendent.
data.identitati.ierarhie.noduri_inchise integer Câte dintre nodurile cu copii se închid faţă de suma copiilor. Dacă nu sunt toate, abateri spune care.
data.identitati.ierarhie.verificari integer Câte combinaţii au fost verificate.
data.identitati.ierarhie.regula_tolerantei string Cum se derivă toleranţa fiecărei sume din numărul ei de componente.
data.identitati.ierarhie.abateri array
data.identitati.sold.identitate string Identitatea verificată — ce sumă trebuie să dea ce total.
data.identitati.sold.categorii integer Câte categorii au toate cele trei fluxuri, deci pot fi verificate.
data.identitati.sold.verificari integer Câte combinaţii au fost verificate.
data.identitati.sold.verificari_inchise integer Câte verificări s-au închis în toleranţă.
data.identitati.sold.abatere_maxima string Cea mai mare abatere întâlnită între suma componentelor şi total.
data.identitati.sold.toleranta string Cât se acceptă ca abatere înainte ca identitatea să fie considerată neînchisă — rotunjirea sursei, nu o eroare.
meta.sursa string Sursa oficială din care vin datele, cu licenţa ei acolo unde e cerută.
meta.acoperire.de_la string Prima perioadă pentru care avem date.
meta.acoperire.pana_la string Ultima perioadă pentru care avem date.
meta.perioade integer Perioadele pentru care există valori.
meta.categorii integer Categoriile disponibile.
meta.pozitii_totale integer Câte poziţii se potrivesc filtrelor, dincolo de pagina curentă.
meta.pozitii_returnate integer Câte poziţii s-au întors efectiv în răspunsul ăsta.
meta.nota_balanta string Precizare despre cum se citeşte răspunsul: o capcană, o convenţie sau o limită a sursei.
meta.nota_ierarhie string Cum se citeşte ierarhia clasificării şi ce niveluri nu se adună între ele.
meta.nota_toleranta string De unde vine toleranţa şi de ce nu e zero.
meta.nota_frecvente string Precizare despre cum se citeşte răspunsul: o capcană, o convenţie sau o limită a sursei.
meta.nota_null string De ce lipsesc unele valori: sursa nu le-a publicat, nu le-a calculat ori le-a suprimat.
data.identitati.sold.unde Categoria şi perioada cu abaterea cea mai mare. Absent când totul se închide.
meta.fara_date data e null, iar aici stă motivul. Nu există valori pentru frecvenţa cerută. Intervalul e în afara acoperirii (ianuarie 2010 → prezent).
meta.fara_date_cod Cuvântul scurt şi STABIL al motivului, pentru clienţii care comută pe el în cod: fara_date e proză şi se poate reformula, ăsta nu.

Exemple de răspuns

GEThttps://oneapi.ro/api/financiar/v1/comert-servicii
{
    "data": {
        "frecventa": "lunar",
        "clasificare": "EBOPS",
        "de_la": "2026-07",
        "pana_la": "2026-07",
        "unitate": "milioane EUR",
        "filtre": [],
        "perioade": [
            "2026-07"
        ],
        "pozitii": [
            {
                "cod": "CIS6L_E_S",
                "flux": "export",
                "categorie": "S",
                "eticheta": "Servicii",
                "cale": [
                    "Servicii"
                ],
                "nivel": 1,
                "parinte": null,
                "unitate": "milioane EUR",
                "perioade_publicate": 1,
                "valori": {
                    "2026-07": "4013"
                }
            }
        ],
        "identitati": {
            "ierarhie": {
                "identitate": "fiecare poziţie = suma copiilor ei direcţi",
                "noduri_cu_copii": 48,
                "noduri_inchise": 48,
                "verificari": 48,
                "regula_tolerantei": "⌊(k+1)/2⌋ milioane pentru k componente — valorile clasei sunt milioane întregi",
                "abateri": []
            },
            "sold": {
                "identitate": "sold = export − import",
                "categorii": 62,
                "verificari": 62,
                "verificari_inchise": 62,
                "abatere_maxima": "1",
                "toleranta": "1"
            }
        }
    },
    "meta": {
        "sursa": "BNR — comerţul cu servicii, clasificarea extinsă EBOPS (clasa 1267).",
        "acoperire": {
            "de_la": "2010-01",
            "pana_la": "2026-07"
        },
        "perioade": 1,
        "categorii": 62,
        "pozitii_totale": 186,
        "pozitii_returnate": 186,
        "nota_balanta": "Totalul de servicii e identic cu linia „Servicii\" din contul curent al balanţei de plăţi — verificat pe 197 din 197 de luni, abatere 0. Ruta desface acea linie în 62 de poziţii.",
        "nota_ierarhie": "Denumirile sunt plate, toate la acelaşi nivel, deci ierarhia se ia din sufixul codului, care se cuibăreşte pe caractere. `cale` e derivată din etichetele strămoşilor, nu citită. Validarea nu e opţională: 48 din 48 noduri se închid faţă de suma copiilor, pe 48 verificări.",
        "nota_toleranta": "Toleranţa sumelor e derivată — toate valorile clasei sunt milioane întregi, deci o sumă de k componente e mărginită de ⌊(k+1)/2⌋. La investiţiile directe regula nu se aplică, fiindcă acolo valorile au zecimale.",
        "nota_frecvente": "Lunar şi trimestrial au aceleaşi 186 de coduri, iar trimestrialul e suma celor trei luni (65 din 65, abatere maximă 1). Seria lunară merge cu patru luni mai departe.",
        "nota_null": "`null` într-o perioadă înseamnă că poziţia n-a fost publicată atunci, nu zero."
    }
}

Coduri de eroare

CodSlugCând apare
401neautentificatToken lipsă, invalid, expirat sau revocat.
403feature_indisponibilPlanul curent nu include funcţia de care ţine ruta.
422validareinterval_prea_lung peste 120 de perioade, flux în afara listei, sau nivel_max în afara intervalului 1–5. frecventa_necunoscuta — valoare în afara listei.
429cota_depasitaCota lunară a planului a fost depăşită (vezi Retry-After).

Toate erorile au aceeași formă. eroare.cod e stabil și e cel după care trebuie să ramifici în cod — nu după textul din mesaj, care se poate schimba.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "interval_prea_lung peste 120 de perioade, flux în afara listei, sau nivel_max în afara intervalului 1–5. frecventa_necunoscuta — valoare în afara listei.",
        "detalii": {
            "frecventa": [
                "Valoarea trimisă nu respectă regula parametrului."
            ]
        }
    }
}