---
title: "One data widget of the Situazione report (deprecated)"
method: GET
path: "/v1/report/{widget}"
tags: ["Reports"]
deprecated: true
---

# One data widget of the Situazione report (deprecated)

`GET /v1/report/{widget}`

## Request

- Base URL: `https://api.officina.it`
- URL: `https://api.officina.it/v1/report/{widget}`
- Auth: HTTP bearer

> **Deprecated.**

**Deprecated since revision 2026-10-19** — use
`GET /v1/reports/{widget}` (Report v2: the same cards and data as the
web Report page). Responses carry `Deprecation` and a
`Link: </v1/reports/{widget}>; rel="successor-version"` header; a
client declaring `X-API-Version: 2026-10-19` or later gets
`410 endpoint_retired`. The endpoint is removed when the minimum
supported revision passes 2026-10-19.

Returns the data behind one widget of the mobile Situazione
screen, wrapped in a `report_widget` envelope that echoes the
applied period. Backed by the same report services as the web
report page; requires the `reports.read` permission (403
otherwise).

The period uses the same date filter as the list endpoints: no
date params means the last 12 months, and an explicit
`preset`/`from`/`to` applies to that request only.
`preset: all` spans from the company's creation to today.

Chart widgets bucket by **day** for periods up to 31 days and by
**month** otherwise — `x_axis` entries are always `YYYY-MM-DD`,
so clients re-bucket freely (the mobile app aggregates daily
axes into weeks).

## Query parameters

- `preset` 'rel30' | 'rel90' | 'rel365' | 'year' | 'Q1' | 'Q2' | 'Q3' | 'Q4' | 'month' | 'custom' | 'all'
- `from` string, date
- `to` string, date
- `limit` integer
- `metric` 'eur' | 'pct'
- `direction` 'best' | 'worst'

## Response `200`

Widget data.

- ReportWidgetEnvelope: Shell of every report-widget response. `preset`/`from`/`to` echo the date filter the server applied; `from`/`to` are always concrete dates — `all` resolves to company-creation → today. `data` carries the widget-specific shape (one of the Report* schemas below, keyed by the widget path parameter). New widgets add a key and a Data schema; the envelope never changes.
  - `object` 'report_widget', required
  - `widget` string, required
  - `preset` string, required
  - `from` string, date, required
  - `to` string, date, required
  - `data` union, required
    - ReportKPIs: Data of widget `kpis`.
      - `kpis` object[], required
        - `key` 'sales' | 'outstanding' | 'worksheets' | 'customers', required
        - `value` number, required
        - `is_currency` boolean, required
        - `previous_value` number, required
        - `delta` number, required
        - `delta_percentage` number, required
    - ReportChart: Data of the stacked-chart widgets (`sales-chart`, `expenses-chart`, `worksheet-margin-chart`). `x_axis` entries are YYYY-MM-DD bucket starts (daily ≤31-day periods, else monthly); each series' `values` align with `x_axis`.
      - `x_axis` string[], required
      - `series` object[], required
        - `key` string, required
        - `values` number[], required
    - ReportQuoteConversion: Data of widget `quote-conversion`.
      - `sent` integer, required
      - `rejected` integer, required
      - `converted` integer, required
      - `conversion_rate` number, required
    - ReportWorksheetStatus: Data of widget `worksheet-status`.
      - `draft` integer, required
      - `waiting` integer, required
      - `started` integer, required
      - `completed` integer, required
      - `delivered` integer, required
      - `completion_rate` number, required
    - ReportOutstandingWorksheets: Data of widget `outstanding-worksheets`.
      - `worksheets` object[], required
        - `worksheet_id` string, required
        - `title` string, required
        - `customer_name` string, required
        - `outstanding` number, required
        - `total` number, required
        - `bar_width` number, required: Server-normalized bar length, 0-100.
    - ReportAppointments: Data of widget `upcoming-appointments`.
      - `appointments` object[], required
        - `id` string, required
        - `title` string, required
        - `customer_name` string, required
        - `start_time` string, date-time, required
    - ReportRankedList: Data of the ranked-list widgets (`top-customers`, `top-services`, `worksheet-margins`). `amount` carries the sort metric; `bar_width` is server-normalized 0-100. The margins widget also fills `sublabel` (document number) and `percent`.
      - `rows` object[], required
        - `id` string, required
        - `label` string, required
        - `sublabel` string
        - `amount` number, required
        - `percent` number
        - `bar_width` number, required

## Other responses

- `401`: Missing, malformed, expired, or wrong-audience bearer token.
- `402`: The company has no active subscription, or its plan does not include API access. API access is included in the Business and Illimitato plans.
- `403`: The authenticated user lacks the required permission.
- `404`: Resource does not exist OR belongs to a different company. The two cases are intentionally indistinguishable.
- `422`: A request field is missing or invalid (fast-fail).
- `500`: Unhandled server error. Detail is logged, not exposed.

---

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