oneapi
Sign in
Financiar v1 / Fiscal

Total employer cost

What a gross salary costs the employer: the gross plus the work insurance contribution, with that contribution shown separately and with its legal basis.

⚠️ It is the only contribution owed by the employer under the post-2018 regime — the rest are withheld from the employee's gross. That is why the total cost is gross + work insurance contribution, not gross + all contributions.

POST
https://oneapi.ro/api/financiar/v1/calcul/salariu/cost-angajator

Request body

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

NameTypeDescriptionAccepted values
brutrequired integer | null Required, in whole lei. 1 – 100000000
la_dataoptional string | null Optional, YYYY-MM-DD; defaults to today.
5,000 lei gross Request body
{
    "brut": 5000
}
10,000 lei gross Request body
{
    "brut": 10000
}
At the minimum wage Request body
{
    "brut": 4050
}
The 2023 rates Request body
{
    "brut": 5000,
    "la_data": "2023-06-15"
}

Query parameters

This route accepts no query parameters.

How it behaves

  • What a gross salary costs the employer: the gross plus the work insurance contribution, with CAM shown separately and with its legal basis.
  • ⚠️ CAM is the only contribution owed by the employer under the post-2018 regime — the rest are withheld from the employee gross. That is why the total cost is gross + CAM, not gross + all contributions. It is the classic mistake when budgeting a hire.
  • ⚠️ POST and zero retention, as with the other calculators.

What it is for

  • Budgeting a hire from the negotiated gross.
  • The real cost of a team, for a month.

Response structure

FieldTypeDescription
data.brut integer The smallest whole gross that yields exactly the requested net.
data.cam integer The work insurance contribution, rounded to the leu.
data.cost_total integer Gross + CAM.
data.la_data string The date the returned values are valid on.
data.facilitate null
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[].baza_de_calcul integer The amount the rate was applied to — for income tax it is the taxable base, not the gross.
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.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. The rates do not cover the requested date.
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: {"brut": 5000}

POSThttps://oneapi.ro/api/financiar/v1/calcul/salariu/cost-angajator
{
    "data": {
        "brut": 5000,
        "cam": 113,
        "cost_total": 5113,
        "la_data": "2026-10-07",
        "facilitate": null,
        "componente": [
            {
                "cod": "cam",
                "denumire": "Contribuţia asiguratorie pentru muncă",
                "baza_de_calcul": 5000,
                "cota": "2.25%",
                "valoare": 113,
                "act_normativ": "Codul Fiscal art.220^3",
                "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.",
        "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.
422validarebrut_lipsa.
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": "brut_lipsa."
    }
}