---
title: "Mark F24 Paid"
method: POST
path: "/api/autopilot/f24/{record_id}/mark-paid"
tags: ["autopilot"]
---

# Mark F24 Paid

`POST /api/autopilot/f24/{record_id}/mark-paid`

## 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/f24/{record_id}/mark-paid`
- Auth: HTTP bearer

Confirm one F24 as paid, and answer with the record as it now stands.

One 404 for "no such id" and "somebody else's id" alike — the store already
refuses to tell them apart, and a distinct 403 would turn this route into an
oracle for which record ids exist.

Idempotent: the store's update carries ``WHERE status = 'proposed'``, so a
double tap on a flaky mobile connection keeps the first ``paid_at`` and still
answers 200 with the paid record. The client is reporting what the user did,
not asking us to transition a state machine.

## Path parameters

- `record_id` string, uuid, required

## Response `200`

Successful Response

- F24Record: One proposed (or paid) F24 for a tax year (AP-061a). ``kind`` is a plain string rather than an enum on purpose: the column carries no CHECK constraint because the vocabulary grows with each social scheme and each quarter of bollo, and a read schema that refused an unknown kind would turn a future writer's row into a 500 on this list. The due fields mirror :class:`DeadlineInstalment` exactly, ``due_date: None`` for the November instalment included (DPR 435/2001 art. 17 c. 3 lett. b) names only the month) — the same figure must not be a date here and a month there. ``total`` is summed from ``rows`` so a client never adds up money itself.
  - `id` string, uuid, required
  - `tax_year` integer, required
  - `kind` string, required
  - `status` 'proposed' | 'confirmed_paid'
  - `rows` F24Line[]
    - `sezione` string, required
    - `codice_tributo` string, required
    - `anno_riferimento` integer, required
    - `importo` string, required
  - `total` string
  - `due_year` integer, nullable
  - `due_month` integer, nullable
  - `due_day` integer, nullable
  - `due_date` string, date, nullable
  - `paid_at` string, date-time, nullable
  - `created_at` string, date-time, nullable
  - `updated_at` string, date-time, nullable

## 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)
