---
title: "Read Deadlines"
method: GET
path: "/api/autopilot/deadlines"
tags: ["autopilot"]
---

# Read Deadlines

`GET /api/autopilot/deadlines`

## Request

- Base URL: `https://api.taxcompass.it` (the document declares no server; this is the origin it was published from)
- URL: `https://api.taxcompass.it/api/autopilot/deadlines`
- Auth: HTTP bearer

The imposta-sostitutiva payment calendar for one tax year (AP-061).

``year`` is the **tax year**, exactly as on ``/incassi`` and ``/estimate``, and
defaults to the server's year for the same reason: the browser clock may sit
in another timezone on 31 December. Its payments fall the year after, which
the response states as ``payment_year`` rather than leaving the client to add.

The refusals are :func:`_calendar_or_422`'s. Nothing returned here is a payment
instruction — the ``caveats`` list travels with the amounts and says what each
of them still assumes; the F24 rows themselves are ``/f24``'s to write.

## Query parameters

- `year` integer, nullable

## Response `200`

Successful Response

- DeadlineCalendar: ``GET /api/autopilot/deadlines?year=`` — when the year's tax falls due. ``year`` is the **tax year**, as everywhere else in this router; its payments fall in ``payment_year`` (``year + 1``), which is reported rather than left to the client to add. The amounts come from ``app.tax.it_annual`` over the ``incassi`` ledger, so this endpoint and ``/estimate`` cannot drift: both read the cash that was actually collected. ``caveats`` is not decoration. Every statement in it names an input the product does not have yet or a rule the sources do not settle, and each one is a reason a figure here is an **upper bound** rather than a bill — which is why the list travels with the numbers instead of living in a design doc. No F24 row is emitted on *this* response — the payment fields for these instalments are ``GET /api/autopilot/f24``'s, composed by ``app.services.f24_store`` from the codici tributo in ``app.tax.it_params`` — and neither endpoint pays anything: the F24 is a compilation guide the user files themselves. ``bollo_quarters`` and ``redditi_window`` (AP-061d) are the two dates on this calendar that are **not** the substitute tax: the quarterly stamp on the user's own e-invoices, and the window the return is filed in. They are separate fields rather than more ``instalments`` because neither is an instalment of the year's tax — one is a different tax and the other is not a payment at all — and a client that summed the list would otherwise report a bill nobody owes.
  - `year` integer, required
  - `payment_year` integer, required
  - `cash_received` string
  - `imposta_sostitutiva` string
  - `acconto_due_in_year` string
  - `saldo` string
  - `acconto_total` string
  - `instalments` DeadlineInstalment[]
    - `kind` 'saldo' | 'acconto_1' | 'acconto_2' | 'acconto_unico', required
    - `amount` string, required
    - `due_year` integer, required
    - `due_month` integer, required
    - `due_day` integer, nullable
    - `due_date` string, date, nullable
    - `deferrable` boolean
    - `deferred_due_date` string, date, nullable
    - `deferred_amount` string, nullable
  - `bollo_quarters` BolloQuarterDue[]
    - `quarter` integer, required
    - `invoices` integer, required
    - `amount` string, required
    - `due_date` string, date, required
    - `deferred_due_date` string, date, nullable
  - `redditi_window` RedditiWindow: When the year's Redditi PF return may be filed (DPR 322/1998 art. 2). A window, not a deadline: ``opens_on`` is the first day the return can be sent and ``telematic_deadline`` the last day it is on time. ``valid_until`` is comma 7's ninetieth day — a return filed by then is late and sanctioned but *valid*, and after it the return counts as omessa. It is reported so a client can say what a missed deadline actually costs, and must never be rendered as the date to aim for.
    - `tax_year` integer, required
    - `filing_year` integer, required
    - `opens_on` string, date, required
    - `telematic_deadline` string, date, required
    - `valid_until` string, date, required
  - `caveats` string[]
  - `contributions` DeadlineContributions: A professionista's Gestione Separata year, as the calendar states it. ``base`` is the reddito the contribution is charged on (the forfettario reddito, before the tax-side deduction of the same comma), capped at the year's massimale; ``amount`` is the year's contribution; ``instalments`` are its saldo and acconti, dated like the tax's. No F24 row is composed for these yet — they are paid in the INPS section, whose causali the parameter table does not carry — and the calendar says so rather than printing a code.
    - `scheme` 'gestione_separata'
    - `base` string, required
    - `amount` string, required
    - `saldo` string, required
    - `acconto_total` string, required
    - `instalments` DeadlineInstalment[]
      - `kind` 'saldo' | 'acconto_1' | 'acconto_2' | 'acconto_unico', required
      - `amount` string, required
      - `due_year` integer, required
      - `due_month` integer, required
      - `due_day` integer, nullable
      - `due_date` string, date, nullable
      - `deferrable` boolean
      - `deferred_due_date` string, date, nullable
      - `deferred_amount` string, nullable
  - `set_aside` SetAside: What to put aside for one tax year's income: the tax **and** the contributions. One figure, computed once (``services.deadline_calendar.set_aside_for``) and read by both screens that state it. The home screen and "The year" used to disagree by several thousand euro on the same income, for two reasons that are each fine alone and wrong together: the estimate deducted INPS from the tax base as if it had already been paid, and the calendar — correctly — refused to, but then left the contributions off entirely. A freelancer reading the calendar was told they owed the substitute tax and nothing else, and would have under-saved by the whole INPS bill. ``tax`` is the imposta sostitutiva with no contribution deducted, because the product records no contribution *payment* (L. 190/2014 art. 1 c. 64 deducts contributions *versati*): an upper bound, which is the right direction for a number whose purpose is to be put aside. ``contributions`` is the Gestione Separata contribution charged on the same reddito. ``total`` is their sum.
    - `tax` string, required
    - `contributions` string, required
    - `total` string, required
    - `contributions_scheme` 'gestione_separata'

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/taxcompass/apis/taxcompass-api.md) · [All operations](https://skmtc.dev/taxcompass/apis/taxcompass-api/llms.txt) · [OpenAPI document](https://skmtc.dev/taxcompass/apis/taxcompass-api/revisions/fef5fc6a9b91?raw)
