oneapi
Sign in
Financiar v1 / RiscCredit

Services, annual, by activity or mode of supply

Exports and imports of services cut along two axes the monthly series does not have: the firm's economic activity (13 NACE sections × 16 service types) or the mode of supply (32 types × 4 modes). Annually, 2022–2024.

The two cuts share the same check and tie back to /comert-servicii. The annual totals are identical figure for figure between them, and against the sum of the twelve EBOPS months they differ only by rounding — 39,689.12 against 39,689 in 2023. The check is not a claim in the documentation: it is computed on every request, in identitati.control_comert_servicii.

On imports, „unallocated economic activity" is the largest section — 37.4% in 2022, 40.4% in 2023, 39.1% in 2024, against about 13% on exports. It is part of the partition, so the sum of sections closes, but its share is reported separately in identitati.nealocat: without it, a „by sector" reading misattributes the rest.

The axes sit in reverse order in the code — in STEC the service is the last segment, in MOSA the mode is — and the service hierarchy comes from the code prefix and is validated through sums on every request.

GATS mode 3 is legitimately absent: commercial presence is direct investment, not trade in services. That the three present are exhaustive can be seen from the fact that they sum to the total.

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

Query parameters

NameTypeDescriptionAccepted values
dimensiuneoptional string | null Optional, defaults to activitate (NACE sections). Or mod_furnizare — the same totals, a different second axis. activitatemod_furnizare
sensoptional string | null Optional: export or import. exportimport
serviciuoptional string | null Optional, the service type code. The full list is in data.servicii. e.g. ST
categorieoptional string | null Optional — a NACE section (A_B, J) or a mode (M1), depending on the dimension. The list is in data.categorii. e.g. _Te.g. MT
anoptional integer | null Optional, 2022–2024. Without it, every published year. 2000 – 2100

How it behaves

  • Exports and imports of services cut along two axes the monthly series does not have: the enterprise's economic activity (13 NACE sections × 16 service types) or the mode of supply (32 types × 4 modes). Annual, 2022–2024.
  • Both cuts share the same control and tie back to /comert-servicii. The annual totals are identical figure for figure between them, and against the sum of the twelve EBOPS months they differ only by rounding: 39,689.12 here against 39,689 there, in 2023. Hence one route with a parameter, not two.
  • The control is not a claim in the documentation — it is computed on every request, in identitati.control_comert_servicii, and shown pair by pair.
  • The control's tolerance comes from the OTHER class's precision. Here the values carry two decimals, but the twelve monthly EBOPS figures are whole millions, each with up to half a million of rounding error — so the margin on their sum is 6, not 0.065. With the local rule wrongly applied, all six pairs appeared to fail, though the real deviations run from 0.10 to 2.04. In a comparison between two classes, the coarser precision sets the common one.
  • On imports, "unallocated economic activity" is the largest section in the classification — 37.4% in 2022, 40.4% in 2023 and 39.1% in 2024, against roughly 13% on exports. It is part of the partition, so the sum of sections closes correctly, but its share is reported separately in identitati.nealocat: without that figure, a "by sector" reading misattributes the rest.
  • The axes sit in reverse order in the code — for STEC the service is the last segment (STEC2A_E_A_B_ST → section A_B, service ST), for MOSA the mode is (MOSA_E_SC1_M2 → service SC1, mode M2). Parsing is per dimension, not one shared rule.
  • The service hierarchy comes from the code prefix and is validated by sums on every request — SJ1 under SJ, SJ21 under SJ2. If the nesting were a coincidence of strings, the sums would not come out. On mod_furnizare: 7 nodes, all closing, across 143 checks.
  • GATS mode 3 is legitimately absent: commercial presence is direct investment, not trade in services. That the three present are exhaustive shows in their summing to the total — 167 of 167 checks.
  • The tolerance of the sums inside the class is derived: all 1,822 values fit in two decimals, so a sum of k components is bounded by (k+1) × 0.005. This is the module's third tolerance rule and all three are measured — whole millions in the investment position, one decimal in remittances, two here.
  • The four heading series, carrying the unit * and no values, do not appear in the response.

What it is for

  • Which sectors export services: ICT, transport, manufacturing.
  • How much of the service export is supplied "at a distance", with no travel.
  • Architectural and engineering services, separated from the rest of consulting.

Response structure

FieldTypeDescription
data.dimensiune string The dimension the values are broken down by.
data.axa string What categorie means for the requested dimension.
data.ani array Years for which values exist.
data.unitate string The unit of the values. Read it before plotting or adding them up.
data.filtre array The filters actually applied, as the route understood them — useful when a value was normalised.
data.servicii object Each service type's code and label. For mod_furnizare the label comes from the "all modes" series, the only one describing the service without the mode trailing it.
data.categorii object The second axis's values and their labels.
data.categorii._T string
data.categorii.A_B string
data.categorii.C string
data.categorii.D_E string
data.categorii.F string
data.categorii.G string
data.categorii.H string
data.categorii.J string
data.categorii.K string
data.categorii.M string
data.categorii.N string
data.categorii.X string
data.categorii._U string
data.pozitii[].cod string Code from the source code list — the key you filter on.
data.pozitii[].sens string Direction of the operation.
data.pozitii[].serviciu string
data.pozitii[].serviciu_eticheta string
data.pozitii[].serviciu_nivel integer Depth in the service tree.
data.pozitii[].serviciu_parinte null The parent service's code, from the code prefix. null at the total.
data.pozitii[].categorie string Category in the source classification.
data.pozitii[].categorie_eticheta string
data.pozitii[].unitate string Unit of measure of the values. Read it before plotting or summing them.
data.pozitii[].ani_publicati integer Years the source actually published for this series.
data.pozitii[].valori object The values of the series, by period.
data.identitati.partitie object The second axis's categories against its total, for each direction, service and year.
data.identitati.partitie.identitate string The identity being checked — which sum must equal which total.
data.identitati.partitie.componente integer The components that add up to the total.
data.identitati.partitie.toleranta string How much deviation is accepted before the identity counts as unclosed — the source rounding, not an error.
data.identitati.partitie.verificari integer How many combinations were checked.
data.identitati.partitie.verificari_inchise integer How many checks closed within tolerance.
data.identitati.partitie.abatere_maxima string Largest deviation found between the sum of components and the total.
data.identitati.arbore_servicii object Each service against the sum of its direct children — the validation of the hierarchy inferred from the code.
data.identitati.arbore_servicii.identitate string The identity being checked — which sum must equal which total.
data.identitati.arbore_servicii.noduri_cu_copii integer How many nodes in the hierarchy have at least one descendant.
data.identitati.arbore_servicii.noduri_inchise integer How many hierarchy nodes closed within tolerance.
data.identitati.arbore_servicii.verificari integer How many combinations were checked.
data.identitati.arbore_servicii.abateri array
data.identitati.control_comert_servicii object The annual total against the sum of the twelve months in /comert-servicii, pair by pair.
data.identitati.control_comert_servicii.identitate string The identity being checked — which sum must equal which total.
data.identitati.control_comert_servicii.toleranta string How much deviation is accepted before the identity counts as unclosed — the source rounding, not an error.
data.identitati.control_comert_servicii.toleranta_nota string
data.identitati.control_comert_servicii.perechi_verificate integer
data.identitati.control_comert_servicii.perechi_inchise integer How many checked pairs closed within tolerance.
data.identitati.control_comert_servicii.perechi[].an string The year the value refers to.
data.identitati.control_comert_servicii.perechi[].sens string Direction of the operation.
data.identitati.control_comert_servicii.perechi[].aici string
data.identitati.control_comert_servicii.perechi[].comert_servicii string
data.identitati.control_comert_servicii.perechi[].abatere string The measured difference between the two quantities compared.
data.identitati.control_comert_servicii.perechi[].se_inchide boolean Whether the check closed within tolerance.
data.identitati.nealocat object Only for activitate: the residual section's share of the total, by direction and year.
data.identitati.nealocat.sectiune string Section of the classification — the broadest level.
data.identitati.nealocat.nota string A note on how to read the data — a pitfall, a convention or a limit of the source.
data.identitati.nealocat.procent_din_total.export object The value on the export side.
data.identitati.nealocat.procent_din_total.import object The value on the import side.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.ani_disponibili array
meta.pozitii_totale integer How many positions match the filters, beyond the current page.
meta.pozitii_returnate integer How many positions this response actually returned.
meta.nota_control string Which control check was run on the values in the response.
meta.nota_partitie string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_arbore string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_toleranta string Where the tolerance comes from and why it is not zero.
meta.nota_moduri string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_null string Why some values are missing: the source did not publish, did not compute, or suppressed them.
meta.fara_date data is null and this says why. No values in the database for the requested dimension.
meta.fara_date_cod The short, STABLE word for the reason, for clients that branch on it in code: fara_date is prose and may be rephrased, this is not.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/servicii-anual
{
    "data": {
        "dimensiune": "activitate",
        "axa": "secţiune CAEN",
        "ani": [
            "2022",
            "2023",
            "2024"
        ],
        "unitate": "milioane EUR",
        "filtre": [],
        "servicii": {
            "ST": "Total",
            "SA": "Servicii de prelucrare a bunurilor",
            "SB": "Servicii de întreţinere şi reparaţii",
            "SC": "Servicii de transport",
            "SD": "Turism / Călătorii",
            "SE": "Servicii de construcţii",
            "SF": "Servicii de asigurare şi ale fondurilor de pensii",
            "SG": "Servicii financiare",
            "SH": "Taxe pentru utilizarea proprietăţii intelectuale",
            "SI": "Servicii de telecomunicaţii, informatice şi informaţionale",
            "SJ": "Alte servicii pentru afaceri",
            "SJ1": "Servicii de cercetare și dezvoltare",
            "SJ2": "Servicii de consultanță profesională și managerială",
            "SJ3": "Servicii tehnice, comerciale și alte servicii pentru afaceri",
            "SK": "Servicii personale, culturale şi recreaţionale",
            "SL": "Bunuri şi servicii guvernamentale, neclasificate în altă parte"
        },
        "categorii": {
            "_T": "Toate activitățile economice",
            "A_B": "Agricultură, silvicultură și pescuit",
            "C": "Industria prelucrătoare (C)",
            "D_E": "Producția și furnizarea de energie electrică și termică, gaze, apă caldă și aer condiționat",
            "F": "Construcții (F)",
            "G": "Comerț cu ridicata și cu amănuntul",
            "H": "Transport și depozitare (H)",
            "J": "Informații și comunicații (J)",
            "K": "Intermedieri financiare și asigurări (K)",
            "M": "Activități profesionale, științifice și tehnice (M)",
            "N": "Activități de servicii administrative și activități de servicii suport (N)",
            "X": "Alte activități (ILOPQRSTU)",
            "_U": "Activitate economică nealocată"
        },
        "pozitii": [
            {
                "cod": "STEC2A_E__T_ST",
                "sens": "export",
                "serviciu": "ST",
                "serviciu_eticheta": "Total",
                "serviciu_nivel": 1,
                "serviciu_parinte": null,
                "categorie": "_T",
                "categorie_eticheta": "Toate activitățile economice",
                "unitate": "mil. EUR",
                "ani_publicati": 3,
                "valori": {
                    "2022": "36161.52",
                    "2023": "39689.12",
                    "2024": "39642.16"
                }
            }
        ],
        "identitati": {
            "partitie": {
                "identitate": "totalul pe secţiune CAEN = suma categoriilor",
                "componente": 12,
                "toleranta": "0.065",
                "verificari": 38,
                "verificari_inchise": 38,
                "abatere_maxima": "0.02"
            },
            "arbore_servicii": {
                "identitate": "fiecare serviciu = suma copiilor lui direcţi",
                "noduri_cu_copii": 2,
                "noduri_inchise": 2,
                "verificari": 93,
                "abateri": []
            },
            "control_comert_servicii": {
                "identitate": "totalul anual = suma celor douăsprezece luni din /comert-servicii",
                "toleranta": "6",
                "toleranta_nota": "Derivată din precizia seriei lunare, care e în milioane întregi: douăsprezece cifre rotunjite dau o marjă de 6. Precizia mai grosieră dintre cele două clase o decide pe cea comună.",
                "perechi_verificate": 6,
                "perechi_inchise": 6,
                "perechi": [
                    {
                        "an": "2022",
                        "sens": "export",
                        "aici": "36161.52",
                        "comert_servicii": "36162.00",
                        "abatere": "0.48",
                        "se_inchide": true
                    }
                ]
            },
            "nealocat": {
                "sectiune": "_U",
                "nota": "Secţiunea „activitate economică nealocată\" face parte din partiţie, dar la importuri e cea mai mare din clasificare — peste 39%. Fără cifra asta, o citire „pe sectoare\" atribuie greşit restul.",
                "procent_din_total": {
                    "export": {
                        "2022": "13.25",
                        "2023": "12.94",
                        "2024": "13.97"
                    },
                    "import": {
                        "2022": "37.41",
                        "2023": "40.44",
                        "2024": "39.15"
                    }
                }
            }
        }
    },
    "meta": {
        "sursa": "BNR — comerţul cu servicii pe caracteristicile întreprinderilor (STEC) şi pe modalitatea de furnizare (MOS), serii anuale (clasa 2077).",
        "ani_disponibili": [
            "2022",
            "2023",
            "2024"
        ],
        "pozitii_totale": 416,
        "pozitii_returnate": 416,
        "nota_control": "Totalul anual e confruntat la fiecare cerere cu suma celor douăsprezece luni din /comert-servicii: 6 din 6 perechi se închid, cu toleranţa ±6. Aceea vine din precizia seriei lunare — milioane întregi — nu din a acestei clase: într-o comparaţie între două clase, precizia mai grosieră o decide pe cea comună.",
        "nota_partitie": "Categoriile de pe axa a doua formează o partiţie: 38 din 38 verificări se închid, cu toleranţa ±0.065 derivată pentru 12 componente.",
        "nota_arbore": "Ierarhia serviciilor vine din prefixul codului şi e validată prin sume: 2 din 2 noduri se închid, pe 93 verificări.",
        "nota_toleranta": "Toleranţa e derivată: toate valorile celor două clase încap în două zecimale, deci o sumă de k componente e mărginită de (k+1) × 0,005. E a treia regulă de toleranţă din modul şi toate trei sunt măsurate — milioane întregi la poziţia investiţională, o zecimală la remiteri, două aici.",
        "nota_moduri": "Modul 3 GATS — prezenţa comercială — lipseşte legitim: e investiţie directă, nu comerţ cu servicii. Cele trei prezente sunt exhaustive, ceea ce se vede din faptul că se însumează la total.",
        "nota_null": "`null` într-un an înseamnă că poziţia n-a fost publicată atunci, nu zero."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareA dimension or direction outside the list, or a service or category code written as anything other than alphanumeric. dimensiune_necunoscuta, an_indisponibil — the response lists the published years. serviciu_necunoscut and categorie_necunoscuta — the response carries the lists, and categories differ between dimensions.
429cota_depasitaThe plan's monthly quota has been exceeded (see Retry-After).

All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.

{
    "eroare": {
        "cod": "validare",
        "mesaj": "A dimension or direction outside the list, or a service or category code written as anything other than alphanumeric. dimensiune_necunoscuta, an_indisponibil — the response lists the published years. serviciu_necunoscut and categorie_necunoscuta — the response carries the lists, and categories differ between dimensions.",
        "detalii": {
            "dimensiune": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}