oneapi
Sign in
Financiar v1 / Calendar

A year's calendar

The twelve-month table of a year, in a single request: calendar days, weekends, holidays, bridge days, working days — plus where the holidays and bridges fall, not just how many there are.

Why it is a route and not /zile-lucratoare called twelve times: there the question is „how many are there between two dates", and the answer is a number with a breakdown. Here the shape of the response is an annual table, and the reason anyone asks for it is to see the distribution. In 2026, January has 18 working days and July has 23 — the difference does not show in a total.

Bridge days make the public sector figure PROVISIONAL for future years. They come from Government Decisions, and for a year whose decision has not been issued yet the table shows zero bridges — which does not mean there will be none. The provizoriu field says so, and punti_stabilite gives the number of those already published. A response giving the same number for both sectors without declaring this would end up being used to plan holidays on a figure that moves.

Both totals come anyway, zile_lucratoare_privat and zile_lucratoare_public, so that the difference between sectors does not require a second request. sector only chooses which of them lands in the main field.

The breakdown is checked for every month, not just for the year: calendar days − weekends − holidays falling on working days − bridges = working days.

GET
https://oneapi.ro/api/financiar/v1/calendar

Query parameters

NameTypeDescriptionAccepted values
anoptional integer | null Optional: the year, YYYY (1990–2100). Without it, the current year. 1990 – 2100
sectoroptional string | null Optional: privat (default) or public. They differ by the government bridge days. privatpublic

How it behaves

  • A year's twelve-month table in a single request: calendar days, weekends, public holidays, government bridge days, working days — plus where the holidays and bridges fall, not merely how many there are.
  • Why this is a route and not /zile-lucratoare called twelve times: there the question is "how many between two dates", and the answer is a number with a breakdown. Here the shape of the answer is an annual table, and the reason anyone asks for it is the distribution. In 2026, January has 18 working days and July has 23 — a total does not show that.
  • Bridge days make the public-sector figure PROVISIONAL for future years. They come from government decisions, and for a year whose decision has not been issued yet the table shows zero bridges — which does not mean there will be none. provizoriu says so, and punti_stabilite gives the number published. A response giving the same number for both sectors without declaring this would be used to plan leave against a figure that moves.
  • For closed years the figure is final and the difference shows: 2024 has 252 working days in the private sector and 249 in the public one, from three bridges; 2025 has 248 and 247, from a single one.
  • Both totals come back anyway — zile_lucratoare_privat and zile_lucratoare_public — so the gap between sectors does not require a second request. sector only decides which of them lands in the headline field.
  • The breakdown checks out for every month, not only for the year: calendar days − weekends − holidays falling on working days − bridges = working days. A bridge landing on a weekend or on a holiday subtracts nothing, having already been counted.
  • A single day can carry two holidays — 1 June 2026 is both Children's Day and Whit Monday. That is why sarbatori is a list of DAYS, each with its holidays, rather than a list of holidays.
  • Holidays are computed, not read from a table, and the rules are versioned by the year they took effect — hence coverage of 1990–2100 with no import behind it. Bridge days, by contrast, are legal acts and exist only from the moment they were issued.
  • Working hours are not here: they are at /norma-lucru?luna=YYYY-MM, with a different unit and the 8-hour convention stated explicitly.

What it is for

  • Planning a year: where the holidays and bridges fall, month by month.
  • The working-day norm for a staffing budget.
  • Comparing the private and public sectors without two requests.

Response structure

FieldTypeDescription
data.an integer The year the data refers to.
data.sector string Institutional or economic sector.
data.zile_lucratoare integer The year's total, for the requested sector.
data.total object The yearly breakdown, plus both working-day totals.
data.total.zile_calendaristice number
data.total.zile_weekend number
data.total.sarbatori_in_zile_lucratoare number
data.total.punti_hg_scazute number
data.total.zile_lucratoare_privat integer
data.total.zile_lucratoare_public integer
data.punti_stabilite integer How many government bridge days are published for this year.
data.provizoriu string true when the year is current or future and no bridge has been published yet — the public-sector figure may still change.
data.luni[].luna integer The month the value refers to.
data.luni[].perioada string The period the value refers to.
data.luni[].de_la string Start of the covered interval.
data.luni[].pana_la string End of the covered interval, inclusive.
data.luni[].zile_lucratoare integer The month's, for the requested sector.
data.luni[].defalcare object Calendar days, weekends, holidays on working days, bridges subtracted. The identity checks out for every month.
data.luni[].zile_lucratoare_privat integer
data.luni[].zile_lucratoare_public integer
data.luni[].sarbatori string The month's holiday days, each with its holidays — overlaps stay visible.
data.luni[].punti string The month's bridge days, with the legal act that established them.
meta[] string[] The response envelope: the source, the freshness and the notes that go with the data.

Response examples

GEThttps://oneapi.ro/api/financiar/v1/calendar
{
    "data": {
        "an": 2026,
        "sector": "privat",
        "zile_lucratoare": 250,
        "total": {
            "zile_calendaristice": 365,
            "zile_weekend": 104,
            "sarbatori_in_zile_lucratoare": 11,
            "punti_hg_scazute": 0,
            "zile_lucratoare_privat": 250,
            "zile_lucratoare_public": 250
        },
        "punti_stabilite": 0,
        "provizoriu": true,
        "luni": [
            {
                "luna": 1,
                "perioada": "2026-01",
                "de_la": "2026-01-01",
                "pana_la": "2026-01-31",
                "zile_lucratoare": 18,
                "defalcare": {
                    "zile_calendaristice": 31,
                    "zile_weekend": 9,
                    "sarbatori_in_zile_lucratoare": 4,
                    "punti_hg_scazute": 0
                },
                "zile_lucratoare_privat": 18,
                "zile_lucratoare_public": 18,
                "sarbatori": [
                    {
                        "data": "2026-01-01",
                        "sarbatori": [
                            {
                                "cod": "anul_nou_1",
                                "denumire": "Anul Nou",
                                "mobila": false
                            }
                        ]
                    }
                ],
                "punti": []
            }
        ]
    },
    "meta": {
        "temei": "Sărbătorile legale: art. 139 din Codul Muncii. Punţile: hotărâri de Guvern, act cu act.",
        "nota_defalcare": "Pe fiecare lună: calendaristice − weekend − sărbători în zile lucrătoare − punţi = zile lucrătoare. Punţile care cad în weekend sau peste o sărbătoare nu scad nimic, fiind deja numărate.",
        "nota_sector": "Punţile de HG se aplică, de regulă, doar instituţiilor publice. `zile_lucratoare` urmează `sector`; ambele totaluri vin oricum în răspuns.",
        "nota_provizoriu": "Pentru 2026 nu există încă nicio punte publicată prin HG, deci cifra pe sectorul public coincide azi cu cea pe privat şi se poate schimba. Nu înseamnă că nu vor fi punţi.",
        "nota_suprapuneri": "O zi poate purta două sărbători (1 iunie 2026: Ziua Copilului şi a doua zi de Rusalii). De aceea `sarbatori` e o listă de ZILE, fiecare cu sărbătorile ei.",
        "sarbatorile_anului": "/financiar/v1/sarbatori?an=2026",
        "puntile_anului": "/financiar/v1/punti?an=2026"
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareA year outside 1990–2100, or a sector outside the list.
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": "A year outside 1990–2100, or a sector outside the list.",
        "detalii": {
            "an": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}