oneapi
Sign in
Financiar v1 / Inflatie

CPI and HICP, compared

Romania's two price indices over the same interval, with both figures and the difference between them.

The difference is real and changes sign. Measured December against December: 2022 gives 16.37% on the CPI against 14.14% on the HICP — plus 2.23 points; 2023 gives 6.61% against 7.01% — minus 0.40; 2024 minus 0.32; 2025 plus 1.11. It is not a constant deviation someone could correct for out of habit, and that is precisely why the two figures must be seen side by side.

Only the TOTAL is compared. The CPI has four national categories — total, food, non-food, services — while the HICP has the ECOICOP tree. The INS „food goods" is not Eurostat's CP01: the baskets and the definitions differ, and pairing them would be an equivalence neither institution supports. That is why the route has no category parameter.

The two series are published in different forms, and bringing them onto the same footing is exactly this route's work: INS publishes a monthly change, Eurostat publishes a level. hicp is derived from levels, ipc is the published figure minus 100, and hicp_indice stays alongside so that the level can be checked.

The window is the common one. The two are published on different dates, so their last month often differs — on 15 Sep 2026 the HICP reached July and the CPI June — and a tail in which only one publishes would look like the other collapsing. meta.acoperire also gives each one's coverage separately.

cumulat gives inflation over the whole window, by each method. The CPI is cumulated by multiplying the monthly changes, not by adding them.

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

Query parameters

NameTypeDescriptionAccepted values
de_larequired string Required, YYYY-MM. e.g. 2024-06e.g. 2024e.g. 2024-06-15
pana_laoptional string | null Optional, YYYY-MM. Defaults to the last shared month. At most 360 months. e.g. 2024-06-30

How it behaves

  • Romania's two price indices over the same interval, with both figures and the gap between them. Today this would take two routes, a product on one and a ratio on the other — and only then would you find out they do not compare directly.
  • The gap is real and CHANGES SIGN. Measured December on December: 2022 gives 16.37% on the CPI against 14.14% on the HICP (+2.23 points); 2023 gives 6.61% against 7.01% (−0.40); 2024 −0.32; 2025 +1.11. It is not a constant bias anyone could correct out of habit — which is why both figures have to be seen side by side, not one instead of the other.
  • Only the TOTAL is compared. The CPI has four national categories — total, food, non-food, services — while the HICP has the ECOICOP tree. The INS "food goods" is not Eurostat's CP01: the baskets and definitions differ, and pairing them would be an equivalence neither institute claims. That is why this route has no category parameter.
  • The two series are published in different forms, and putting them on the same footing is the work this route does: INS publishes a monthly rate of change (100.58 = +0.58%), Eurostat publishes a level on 2015 = 100. ipc is the published figure minus 100, hicp is derived from the levels, and hicp_indice stays alongside so the derivation can be checked.
  • The window is the shared one. The two are published on different dates, so their last month often differs — on 15 Sep 2026 the HICP reached July and the CPI June — and a tail where only one publishes would look like the other collapsing. meta.acoperire also gives each series' own range, so the lag is visible.
  • cumulat gives the inflation over the whole window under each method. The CPI compounds by MULTIPLYING the monthly changes, not by adding them — increases apply on top of one another. The HICP compounds through the ratio of the end levels: the same journey, measured in one step.
  • Both cumulative figures start from the close of the month before the window — cumulat.fereastra says so. When that month does not exist in the HICP series (the case for a window starting in January 1996 itself), cumulat.hicp is absent and cumulat.hicp_indisponibil explains why, so it does not read as missing data.

What it is for

  • What "Romanian inflation" is under each of the two official measures.
  • Checking a quoted figure when you do not know which index it came from.
  • Contracts or analyses that must state explicitly which index they use.

Response structure

FieldTypeDescription
data.de_la string Start of the interval the response covers.
data.pana_la string End of the interval the response covers, inclusive.
data.categorie string Always total — the only honest pairing between the two nomenclatures.
data.unitate string Always procent.
data.cumulat.ipc string Compounded inflation over the window, from the product of the monthly changes.
data.cumulat.hicp string The same, from the ratio of the end levels.
data.cumulat.diferenta string
data.cumulat.luni_ipc integer
data.cumulat.fereastra object The journey both of them measure: from the close of the month before the window to its last month.
data.cumulat.fereastra.de_la string Start of the covered interval.
data.cumulat.fereastra.pana_la string End of the covered interval, inclusive.
data.cumulat.reper_hicp object The starting level of the HICP compounding.
data.cumulat.reper_hicp.luna string The month the value refers to.
data.cumulat.reper_hicp.indice string
data.valori[].luna string The month the value refers to.
data.valori[].ipc string The monthly change published by INS, as a percentage.
data.valori[].hicp string The monthly change derived from the Eurostat levels.
data.valori[].hicp_indice string The published level, on 2015 = 100.
data.valori[].diferenta string ipc − hicp, in percentage points.
meta.surse.ipc string
meta.surse.hicp string
meta.acoperire object The shared window, plus each series' own range.
meta.acoperire.de_la string The first period we have data for.
meta.acoperire.pana_la string The last period we have data for.
meta.acoperire.ipc.de_la string Start of the covered interval.
meta.acoperire.ipc.pana_la string End of the covered interval, inclusive.
meta.acoperire.hicp.de_la string Start of the covered interval.
meta.acoperire.hicp.pana_la string End of the covered interval, inclusive.
meta.puncte integer Number of data points.
meta.luni_interval integer
meta.nota_diferenta string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_categorie string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_derivare string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_fereastra string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.nota_cumulat string A note on how to read the response: a caveat, a convention or a limit of the source.
meta.serie_ipc string
meta.serie_hicp string
data.cumulat.hicp_indisponibil Present only when the anchor month is missing from the series; it explains the absence of cumulat.hicp.
meta.fara_date data is null and this says why. One of the two series is missing from the database. The interval falls outside the shared window; the response gives it.
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/inflatie/comparat?de_la=2024-06
{
    "data": {
        "de_la": "2024-06",
        "pana_la": "2026-07",
        "categorie": "total",
        "unitate": "procent",
        "cumulat": {
            "ipc": "17.64",
            "hicp": "16.09",
            "diferenta": "1.55",
            "luni_ipc": 26,
            "fereastra": {
                "de_la": "2024-05",
                "pana_la": "2026-07"
            },
            "reper_hicp": {
                "luna": "2024-05",
                "indice": "149.02"
            }
        },
        "valori": [
            {
                "luna": "2024-06",
                "ipc": "0.24",
                "hicp": "0.06",
                "hicp_indice": "149.11",
                "diferenta": "0.18"
            }
        ]
    },
    "meta": {
        "surse": {
            "ipc": "INS — indicele preţurilor de consum, publicat ca variaţie lunară.",
            "hicp": "Eurostat — HICP, publicat ca nivel cu baza 2015 = 100."
        },
        "acoperire": {
            "de_la": "1996-01",
            "pana_la": "2026-07",
            "ipc": {
                "de_la": "1991-01",
                "pana_la": "2026-07"
            },
            "hicp": {
                "de_la": "1996-01",
                "pana_la": "2026-08"
            }
        },
        "puncte": 26,
        "luni_interval": 26,
        "nota_diferenta": "Diferenţa dintre cei doi indici e reală şi ÎŞI SCHIMBĂ SEMNUL. Dec/dec: 2022 +2,23 puncte (16,37% vs 14,14%), 2023 −0,40 (6,61% vs 7,01%), 2024 −0,32, 2025 +1,11. Nu e o abatere constantă, deci nu poate fi corectată din obişnuinţă.",
        "nota_categorie": "Se compară doar TOTALUL. „Mărfuri alimentare\" al INS nu e `CP01` al Eurostat — coşurile şi definiţiile diferă — iar perechea ar fi o echivalenţă pe care n-o susţine niciuna dintre instituţii.",
        "nota_derivare": "`ipc` e cifra publicată de INS minus 100. `hicp` e derivat din niveluri, ca raport faţă de luna precedentă; `hicp_indice` e nivelul publicat, ca derivarea să fie verificabilă.",
        "nota_fereastra": "Fereastra e intersecţia celor două acoperiri. IPC-ul merge de obicei mai departe decât HICP-ul; o coadă în care doar una publică ar arăta ca o cădere a celeilalte.",
        "nota_cumulat": "IPC-ul se cumulează prin ÎNMULŢIREA variaţiilor lunare, nu prin adunare. HICP-ul se cumulează prin raportul nivelurilor de la capete, pornind de la luna dinaintea ferestrei — acelaşi drum, măsurat într-un pas.",
        "serie_ipc": "/financiar/v1/ipc",
        "serie_hicp": "/financiar/v1/hicp/variatie"
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareinterval_prea_lung beyond 360 months, or a malformed month.
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": "interval_prea_lung beyond 360 months, or a malformed month.",
        "detalii": {
            "de_la": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}