oneapi
Sign in
Financiar v1 / Fiscal

Contributions of the self-employed

The pension and health contributions due on an estimated net income for a year, with the threshold applied and the minimum wage used.

⚠️ The thresholds are multiples of the minimum wage, not amounts — 6, 12, 24, and 60 or 72 minimum wages — so they change with it even when the law does not. That is why the year is required, and why the response always says which minimum wage it used and which Government Decision it comes from.

⚠️ The regime changed four times, and the thresholds do not apply retroactively. Up to the income of 2022 there was a single threshold, 12 minimum wages, with a fixed base; the pension tiers 12/24 and the health tiers 6/12/24 arrive with Government Ordinance 16/2022 and apply to the income of 2023; from 2024 the health base becomes the income actually earned, between 6 and 60 minimum wages (Law 296/2023); from the income of 2026 the upper cap rises to 72 (Law 239/2025). A 2022 calculation run with the tiers in force today would double the contributions.

POST
https://oneapi.ro/api/financiar/v1/calcul/independenti/contributii

Request body

Sent as JSON in the request body (Content-Type: application/json) — not in the query string.

NameTypeDescriptionAccepted values
venit_estimatrequired integer Required, the estimated net income, in whole lei. 0 – 1000000000
anrequired integer Required — the thresholds depend on that year minimum wage. 2018 – 2100
60,000 lei income, 2025 Request body
{
    "venit_estimat": 60000,
    "an": 2025
}
A low income, below the thresholds Request body
{
    "venit_estimat": 30000,
    "an": 2025
}
A high income, above the 24-wage threshold Request body
{
    "venit_estimat": 150000,
    "an": 2025
}
The same income, the 2024 thresholds Request body
{
    "venit_estimat": 60000,
    "an": 2024
}

Query parameters

This route accepts no query parameters.

How it behaves

  • The pension and health contributions owed on an estimated net income for a year, with the threshold applied and the minimum wage used, plus the decision it comes from.
  • ⚠️ The thresholds are multiples of the minimum wage, not amounts — 6, 12, 24, and 60 or 72 minimum wages — so they change with the minimum wage even when the law stays the same. That is why the year is required, and why the response always states which minimum wage it used. A calculation made with another year minimum wage gives a different result with nothing appearing wrong.
  • ⚠️ The regime changed four times, and the thresholds do not apply retroactively. Up to the income of 2022 there was a single threshold of 12 minimum wages with a fixed base; the tiers 12/24 (pension) and 6/12/24 (health) arrive with Government Ordinance 16/2022, for the income of 2023; from 2024 the health base is the income actually earned, between 6 and 60 minimum wages (Law 296/2023); from the income of 2026 the cap rises to 72 (Law 239/2025). Every rule now carries the act it comes from, confirmed on the source.
  • ⚠️ POST and zero retention: an estimated income is as personal as a salary.

What it is for

  • Estimating the contributions owed for a year at a forecast income.
  • Comparing the burden across thresholds before settling on a declared income level.

Response structure

FieldTypeDescription
data.an integer The year the data refers to.
data.venit_estimat integer
data.salariu_minim_folosit integer The minimum wage in force on 30 June of the requested year.
data.act_normativ_salariu_minim string
data.total_contributii integer
data.componente[].cod string Code from the source code list — the key you filter on.
data.componente[].denumire string The name, exactly as the source publishes it.
data.componente[].datorata boolean false when the income is below the first threshold; then valoare is 0 and motiv says why.
data.componente[].baza_de_calcul integer The amount the rate was applied to — for income tax it is the taxable base, not the gross.
data.componente[].prag_aplicat_salarii_minime integer How many minimum wages form the base. null when the base is the income itself, bounded between thresholds.
data.componente[].explicatie_prag string
data.componente[].cota string
data.componente[].valoare integer The value published by the source for the combination above.
data.componente[].act_normativ string The legal basis of the rate applied to that component.
data.componente[].de_verificat boolean
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.retentie string Confirmation that the input was not stored anywhere.
meta.avertismente array States, where applicable, that several grosses yield the same net, and which.
meta.nota_acoperire string Why the total is a lower bound, in prose. meta.total_e_limita_de_jos is the word to switch on in code.
meta.fara_date data is null and this says why. No minimum wage or rates for the requested year; an_viitor — the year is after the current one and its minimum wage is not yet in the register (today's is not used instead).
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

body: {"venit_estimat": 60000, "an": 2025}

POSThttps://oneapi.ro/api/financiar/v1/calcul/independenti/contributii
{
    "data": {
        "an": 2025,
        "venit_estimat": 60000,
        "salariu_minim_folosit": 4050,
        "act_normativ_salariu_minim": "HG 1506/2024",
        "total_contributii": 18150,
        "componente": [
            {
                "cod": "cas",
                "denumire": "Contribuţia de asigurări sociale",
                "datorata": true,
                "baza_de_calcul": 48600,
                "prag_aplicat_salarii_minime": 12,
                "explicatie_prag": "CAS se datorează dacă venitul net estimat atinge 12 salarii minime. Baza e 12 salarii minime între primul şi al doilea prag, şi 24 de salarii minime de la al doilea în sus. Cele două trepte vin cu OG 16/2022 şi se aplică veniturilor din 2023.",
                "cota": "25%",
                "valoare": 12150,
                "act_normativ": "OG 16/2022 (modifică art. 148 şi 151 din Legea 227/2015), aplicabil veniturilor din 2023",
                "de_verificat": false
            }
        ]
    },
    "meta": {
        "sursa": "Cotele vin din registrul comun `business_indicatori_fiscali`; facilităţile şi grila deducerii, din `Modules/Financiar/resources/fiscal`, cu act normativ pe fiecare valoare.",
        "retentie": "Zero. Intrarea nu se scrie nicăieri — nici în bază, nici în cache, nici în log.",
        "avertismente": [
            "Pragurile sunt multipli de salariu minim, deci se schimbă odată cu el chiar dacă legea nu se schimbă. Salariul minim folosit e cel în vigoare la 30 iunie al anului cerut."
        ],
        "nota_acoperire": "Ce e acoperit şi ce nu: /financiar/v1/fiscal/acoperire."
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatMissing or invalid token.
403feature_indisponibilfinanciar.fiscal_calcul is not in the current plan.
422validareIncome or year outside the expected shape.
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": "Income or year outside the expected shape."
    }
}