oneapi
Sign in
Business v1 / Nomenclatoare

Fiscal calendar

The tax deadlines and obligations (optionally ?an=, ?luna=).

GET
https://oneapi.ro/api/business/v1/calendar-fiscal

Query parameters

NameTypeDescriptionAccepted values
anoptional integer | null Calendar year; defaults to the current one. e.g. 2024
lunaoptional integer | null The month as an INTEGER, 1–12 (not YYYY-MM), to see only its deadlines. 1 – 12
de_laoptional string | null The start of the interval, YYYY-MM-DD — it applies to data, so condition-deadlines (without a day) stay out. e.g. 2024-01-01
pana_laoptional string | null The end of the interval, YYYY-MM-DD — to see only the deadlines up to a date. e.g. 2024-12-31

How it behaves

  • The fiscal calendar: the deadlines for filing declarations and paying obligations, as a reference for interpreting the tax vector.
  • ⚠️ Do not assume the covered years are complete, nor that they are consecutive. meta.acoperire states exactly what exists, and meta.goluri what is missing between the first and the last year — with the reason, where it can be read from the data. Build the list of years from those, not from an assumed range.
  • ⚠️ The year 2025 does NOT exist, and it is not a missed import: ANAF overwrote Calendar_obligatii_fiscale_2025.htm with the 2026 calendar, so the 2025 calendar is no longer published at its address. Verified on 29 Sep and reconfirmed on 14 Oct 2026. It appears in meta.goluri with motiv: suprascris_la_sursa.
  • ⚠️ The current year is published MONTH BY MONTH by ANAF, not whole at the start of the year, and our chain refreshes it monthly. A year with nine months in acoperire is the state of the source at the last fetch, not an incomplete import.
  • About 15% of the deadlines are CONDITIONS, not dates („within 30 days of incorporation"): they carry data_limita as text and data: null. The de_la/pana_la filters work on data, so those rows never fall inside a date window.

What it is for

  • Building a deadline calendar in an accounting app.
  • Sending reminders to clients before a due date.
  • Interpreting the tax vector: what is filed, and by when.

Response structure

FieldTypeDescription
data[].an integer The reference year.
data[].luna integer The reference month (an integer, 1–12).
data[].data string The deadline as a calendar date (YYYY-MM-DD), where one can be established. null for deadlines expressed as a CONDITION („within 30 days of incorporation"), which have no fixed day — about 15% of the rows. Ordering and the de_la/pana_la filters work on this field.
data[].data_limita string The deadline exactly as ANAF writes it, free text („Monday 26 January", „within 30 days of…").
data[].obligatie string The filing or payment obligation.
data[].categorii_contribuabili string Who the obligation applies to.
data[].baza_legala string The legal basis.
meta.acoperire[].an integer A year for which we have deadlines.
meta.acoperire[].luni array The months published for that year. ANAF publishes the current year MONTH BY MONTH, so a partial year is normal, not something missing on our side.
meta.goluri[].an A year MISSING between the first and the last covered year.
meta.goluri[].motiv suprascris_la_sursa if ANAF replaced that year's file with another one, or null if the reason cannot be read from the data.
meta.goluri[].fisier The source file named after the missing year.
meta.goluri[].livrat_anul The year that file actually contains.

Response examples

GEThttps://oneapi.ro/api/business/v1/calendar-fiscal
{
    "data": [
        {
            "an": 2022,
            "luna": 1,
            "data": "2022-01-07",
            "data_limita": "vineri 7 ianuarie",
            "obligatie": "Depunerea Declarației de mențiuni privind schimbarea perioadei fiscale pentru persoanele impozabile înregistrate în scopuri de TVA care utilizează trimestrul calendaristic ca perioadă fiscală și care efectuează o achiziție intracomunitară taxabilă în România - Formularul 092",
            "categorii_contribuabili": "Contribuabilii înregistrați în scop de TVA care utilizează ca perioadă fiscală trimestrul și care au efectuat o achiziție intracomunitară taxabilă în România, fiind astfel obligați să își modifice perioada fiscală, devenind plătitori de TVA lunar.",
            "baza_legala": "Legea 227/2015 art. 322OPANAF 169/2019"
        }
    ],
    "meta": {
        "acoperire": [
            {
                "an": 2022,
                "luni": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                ]
            }
        ]
    }
}

Error codes

CodeSlugWhen it occurs
401neautentificatToken missing, invalid, expired or revoked.
403feature_indisponibilThe current plan does not include the feature the route depends on.
422validareAn undeclared parameter or a value that fails validation (an, luna). The offending field is in detalii.
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": "An undeclared parameter or a value that fails validation (an, luna). The offending field is in detalii.",
        "detalii": {
            "an": [
                "The value sent does not satisfy the parameter rule."
            ]
        }
    }
}