oneapi
Sign in
Financiar v1 / Inflatie

HICP compared across countries

The same category, several entities, the same interval, rebased to a base of your choosing.

Rebasing is the point of this route, not a convenience. The published indices have 2015 = 100 as their base, so they answer „how much have prices risen since 2015" — rarely the question of someone making a comparison. Rebased to January 2020, the same data says something else, and more clearly: in December 2025 Romania is at 150.88 against 124.14 in the euro area, that is +50.9% against +24.1%. Every point comes with both values — nothing hidden, but the useful figure in plain sight.

HICP coverage sits at two levels. Fourteen entities have the whole COICOP tree (440–550 ECOICOP ver. 2 categories each, 371 present in all of them); the other fifteen have only the total index TOTAL, which is also the default category. A category requested for an entity that does not have it returns 404 with the list of those that do — not a silently missing series you might overlook.

The base month must exist for every entity requested. Bulgaria starts in December 1996, Croatia in December 1997, EU27 in December 1999. Rebasing on a month one entity does not have would mean different starting points — exactly the false comparison this route exists to prevent.

The series come ordered by total growth, descending: the order is the answer, not the order in which you typed the countries. variatie_totala is a level against the base, not an inflation rate.

GET
https://oneapi.ro/api/financiar/v1/hicp/comparat

Query parameters

NameTypeDescriptionAccepted values
categorieoptional string | null Optional, defaults to TOTAL (the total index; CP00 is accepted as a synonym). Other categories exist for only fourteen entities. max 32 car.
de_larequired string Required, YYYY-MM. e.g. 2020-01e.g. 2023-01e.g. 2022-01
pana_laoptional string | null Optional, YYYY-MM. Defaults to the last month all of them publish. At most 360 months. e.g. 2024-12e.g. 2022-12
bazaoptional string | null Optional, YYYY-MM. The month that becomes 100. Defaults to de_la. e.g. 2020-01e.g. 2023-01e.g. 2022-01
tarilistoptional text Required, between 2 and 10, comma-separated (?tari=RO,PL,EA). Codes as the source writes them: RO, EL, EA, EU27_2020. e.g. RO,PL,EAe.g. RO,DEe.g. RO,BG,HU

How it behaves

  • The same category, several entities, the same interval, rebased to a month you choose.
  • Rebasing is the point of this route, not a convenience. The published indices use 2015 = 100, so they answer "how much have prices risen since 2015" — rarely the question of someone making a comparison. Rebased to January 2020, the same data says something else, and says it plainly: in December 2025 Romania sits at 150.88 against 124.14 for the euro area — +50.9% versus +24.1%. Every point carries both values: nothing hidden, but the useful figure in plain sight.
  • HICP coverage comes in two tiers. Fourteen entities have the full COICOP tree — between 440 and 550 ECOICOP ver. 2 categories each, 371 present across all of them — while the other fifteen have only the total index TOTAL, which is also the default category. A category requested for an entity that lacks it returns 404 with the list of those that have it: not a silently missing series you might overlook.
  • The base month must exist for every entity requested. Bulgaria starts in December 1996, Croatia in December 1997, EU27 in December 1999. Rebasing on a month one entity lacks would mean different starting points — exactly the false comparison this route exists to prevent. The refusal names the window they all share.
  • The window may still begin before one entity does: each series then declares its own de_la, and meta.nota_inceputuri flags that they do not all start together. The only end that clamps silently is the right one, to the last month all of them publish.
  • Series come back sorted by total growth, descending — the order is the answer, not the order you listed the countries in.
  • variatie_totala is the rise in level against the base, in percent. It is not an inflation rate: for monthly and annual changes derived correctly from levels, see /hicp/variatie.

What it is for

  • How much prices have risen in Romania against its neighbours or the euro area, from a chosen moment.
  • Comparing one specific category — energy, food — across the countries that publish it.
  • The raw material for a multi-country chart, already on a common base.

Response structure

FieldTypeDescription
data.categorie string The category being compared.
data.baza string The month everything was rebased to.
data.de_la string Start of the interval the response covers.
data.pana_la string End of the interval the response covers, inclusive.
data.serii[].entitate string The entity code, as the source writes it.
data.serii[].de_la string This entity's first month with a value inside the window — it can differ between entities.
data.serii[].pana_la string End of the covered interval, inclusive.
data.serii[].puncte integer Number of data points.
data.serii[].indice_baza string The published index in the base month, which the rebasing comes from.
data.serii[].indice_final_renormalizat string The level at the end of the window, with the base = 100.
data.serii[].variatie_totala string Growth against the base, in percent. A level, not an annual rate.
data.serii[].valori[].luna string The month the value refers to.
data.serii[].valori[].indice string The published figure, on 2015 = 100.
data.serii[].valori[].indice_renormalizat string The same figure expressed against the month in baza.
meta.sursa string The official source the data comes from, with its licence where one is required.
meta.entitati integer
meta.luni_interval integer
meta.acoperire object Each entity's range for the requested category — not for the entity in general.
meta.acoperire.EA.de_la string Start of the covered interval.
meta.acoperire.EA.pana_la string End of the covered interval, inclusive.
meta.acoperire.PL.de_la string Start of the covered interval.
meta.acoperire.PL.pana_la string End of the covered interval, inclusive.
meta.acoperire.RO.de_la string Start of the covered interval.
meta.acoperire.RO.pana_la string End of the covered interval, inclusive.
meta.nota_renormalizare string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_ordine string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_variatie string A note on how to read the response: a caveat, a convention or a limit of the source.
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.categorii string Available categories.
meta.fara_date data is null and this says why. The window holds no values.
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/hicp/comparat?de_la=2020-01&tari=RO,PL,EA
{
    "data": {
        "categorie": "TOTAL",
        "baza": "2020-01",
        "de_la": "2020-01",
        "pana_la": "2026-08",
        "serii": [
            {
                "entitate": "RO",
                "de_la": "2020-01",
                "pana_la": "2026-08",
                "puncte": 80,
                "indice_baza": "110.09",
                "indice_final_renormalizat": "157.55",
                "variatie_totala": "57.55",
                "valori": [
                    {
                        "luna": "2020-01",
                        "indice": "110.09",
                        "indice_renormalizat": "100.00"
                    }
                ]
            }
        ]
    },
    "meta": {
        "sursa": "Eurostat — HICP lunar (prc_hicp_minr, ECOICOP ver. 2), indici cu baza 2015 = 100.",
        "entitati": 3,
        "luni_interval": 80,
        "acoperire": {
            "EA": {
                "de_la": "1996-01",
                "pana_la": "2026-08"
            },
            "PL": {
                "de_la": "1996-01",
                "pana_la": "2026-08"
            },
            "RO": {
                "de_la": "1996-01",
                "pana_la": "2026-08"
            }
        },
        "nota_renormalizare": "`indice` e cifra publicată, cu baza 2015 = 100. `indice_renormalizat` o raportează la luna din `baza`, care e întrebarea obişnuită a unei comparaţii: cât a crescut fiecare de la un moment ales.",
        "nota_ordine": "Seriile vin ordonate descrescător după `variatie_totala` — ordinea e răspunsul, nu cea în care ai scris ţările.",
        "nota_variatie": "`variatie_totala` e creşterea nivelului faţă de bază, în procente. NU e o rată de inflaţie anuală; pentru variaţii derivate corect din niveluri, vezi `/financiar/v1/hicp/variatie`.",
        "nota_acoperire": "Paisprezece entităţi au arborele COICOP întreg; celelalte cincisprezece au doar `TOTAL`. `acoperire` dă intervalul fiecărei entităţi PENTRU CATEGORIA CERUTĂ.",
        "categorii": "/financiar/v1/hicp/categorii"
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422baza_indisponibilaThe base month is missing for someone; the response gives the shared window. interval_prea_lung beyond 360 months. Fewer than two entities, or a malformed month. categorie_indisponibila — the category is missing for one of the entities; the response lists those that have it.
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": "baza_indisponibila",
        "mesaj": "The base month is missing for someone; the response gives the shared window. interval_prea_lung beyond 360 months. Fewer than two entities, or a malformed month. categorie_indisponibila — the category is missing for one of the entities; the response lists those that have it.",
        "detalii": {
            "categorie": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}