Tax rates in force
The contribution and tax rates in force at a date — pension, health, income tax, corporate tax, the work insurance contribution and VAT — each with its article of the Tax Code and its period.
⚠️ de_verificat is not decoration. It marks values that have not been confirmed against the text of the legislation; today those are the ones from the 2025 and 2026 tax packages. A response containing them says so explicitly, so that nobody takes as legally confirmed something that is not.
⚠️ No extrapolation. A date outside the covered period gets an error with the coverage in the message, not the last known value — which would be plausible and wrong.
Query parameters
YYYY-MM-DD; defaults to today.
e.g. 2024-06-15e.g. 2024-06-14
cota_cas, cota_cass, cota_impozit_venit, cota_impozit_profit, cota_cam, cota_tva_standard.
cota_cascota_casscota_impozit_venitcota_impozit_profitcota_camcota_tva_standard
How it behaves
- Contribution and tax rates valid at a given date — pension (CAS), health (CASS), income tax, profit tax, the work insurance contribution (CAM) and VAT — each with the Tax Code article that sets it and its period of application.
- ⚠️
de_verificatis not decoration. It marks values that have not been confirmed against the text of the legal act. Today there are four in the whole registry, all from the 2025 and 2026 tax packages. A response containing any of them says so explicitly inmeta, so nobody takes as legally confirmed something that is not. - ⚠️ No extrapolation. A date outside the covered period returns an error, with the coverage in the message — never the "last known value". Here a plausible wrong value means a wrongly calculated salary.
- The rates come from the shared registry
business_indicatori_fiscali, read cross-module. There is no second copy in Financiar: two tables holding the pension rate would drift apart silently, and the answer would depend on which route you happened to hit.
What it is for
- The exact rate applicable at a document date, with its legal basis, for a payroll calculation.
- Checking which rate was in force at a past date, in a dispute or a reconciliation.
- Feeding your own calculator without tracking legislative changes yourself.
Response structure
null means in force, with no end date.
true when the value has not been confirmed against the text of the act. Do not treat it as legally confirmed.
meta.total_e_limita_de_jos is the word to switch on in code.
data is null and this says why. The rate exists at the source, but our import is behind; the response says how far our data goes. The date is outside the covered period; the response gives the coverage.
fara_date is prose and may be rephrased, this is not.
Response examples
{
"data": {
"la_data": "2026-10-07",
"valori": [
{
"indicator": "cota_cam",
"valoare": "2.25",
"unitate": "%",
"de_la": "2018-01-01",
"pana_la": null,
"act_normativ": "Codul Fiscal art.220^3",
"de_verificat": false
}
]
},
"meta": {
"sursa": "Legislaţia fiscală, curatată manual, cu act normativ pe fiecare valoare. Cotele, pragurile şi salariul minim se citesc din registrul comun `business_indicatori_fiscali`.",
"de_verificat": [],
"nota_acoperire": "Ce perioade acoperă fiecare set şi ce e neconfirmat: /financiar/v1/fiscal/acoperire."
}
}
{
"data": {
"la_data": "2024-06-15",
"valori": [
{
"indicator": "cota_cam",
"valoare": "2.25",
"unitate": "%",
"de_la": "2018-01-01",
"pana_la": null,
"act_normativ": "Codul Fiscal art.220^3",
"de_verificat": false
}
]
},
"meta": {
"sursa": "Legislaţia fiscală, curatată manual, cu act normativ pe fiecare valoare. Cotele, pragurile şi salariul minim se citesc din registrul comun `business_indicatori_fiscali`.",
"de_verificat": [],
"nota_acoperire": "Ce perioade acoperă fiecare set şi ce e neconfirmat: /financiar/v1/fiscal/acoperire."
}
}
{
"data": {
"la_data": "2026-10-07",
"valori": [
{
"indicator": "cota_cass",
"valoare": "10",
"unitate": "%",
"de_la": "2018-01-01",
"pana_la": null,
"act_normativ": "Codul Fiscal art.156",
"de_verificat": false
}
]
},
"meta": {
"sursa": "Legislaţia fiscală, curatată manual, cu act normativ pe fiecare valoare. Cotele, pragurile şi salariul minim se citesc din registrul comun `business_indicatori_fiscali`.",
"de_verificat": [],
"nota_acoperire": "Ce perioade acoperă fiecare set şi ce e neconfirmat: /financiar/v1/fiscal/acoperire."
}
}
{
"data": {
"la_data": "2024-06-14",
"valori": [
{
"indicator": "cota_impozit_profit",
"valoare": "16",
"unitate": "%",
"de_la": "2018-01-01",
"pana_la": null,
"act_normativ": "Codul Fiscal art.17",
"de_verificat": false
}
]
},
"meta": {
"sursa": "Legislaţia fiscală, curatată manual, cu act normativ pe fiecare valoare. Cotele, pragurile şi salariul minim se citesc din registrul comun `business_indicatori_fiscali`.",
"de_verificat": [],
"nota_acoperire": "Ce perioade acoperă fiecare set şi ce e neconfirmat: /financiar/v1/fiscal/acoperire."
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Missing or invalid token. |
| 403 | feature_indisponibil | financiar.fiscal_referinta is not in the current plan. |
| 422 | validare | tip is not a rate (thresholds are at /fiscal/praguri) or la_data is not in the YYYY-MM-DD shape; detalii says which. |
| 429 | cota_depasita | The 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": "tip is not a rate (thresholds are at /fiscal/praguri) or la_data is not in the YYYY-MM-DD shape; detalii says which.",
"detalii": {
"la_data": [
"The value sent does not satisfy the parameter rule."
]
}
}
}