# Get station day report
URL: https://docs.fluenta.io/en/docs/reference/analytics/get-station-day-report
Operation: `getStationDayReport`
Required permission: `read`

`GET /v1/external/organizations/{organizationId}/stations/{stationId}/days/{day}/report`

One puesto’s «reporte por operación» for a day: hour by hour, each referencia’s units, meta, efficiency and price, the hour’s «Facturación» and its pausas; by «Subproceso» with «El operario escoge la referencia» on.

What it is: one «puesto»’s «reporte por operación» for one plant day, the report the dashboard opens from a «puesto»’s «Ver reporte». `hours` holds one entry per clock hour the «puesto» had a «marca» or a «pausa», in order; each totals the hour and lists, in `rows`, one row per «referencia» worked in it (who marked it last, its units, its «meta», its price per unit) and, in `pauseSpans`, the «pausas» that started in it.

How it is computed: the hour’s `goal` is the «puesto»’s «meta» for that hour as it stood then, its `efficiency` is `units` × 100 ÷ `goal`, and its `billedAmount` is the sum of each row’s `units` × `unitPrice`, each rounded to 2 decimals. With the plant’s switch «El operario escoge la referencia» on, every row also says its «Subproceso» (`step`, `stepName`) and every hour carries `steps`: the hour by «referencia» and «Subproceso», its `units` then being complete units only and its `goal` the sum of each step’s expected units. With the switch off those keys are absent.

`efficiency` is «Eficiencia»: units made × 100 ÷ the «meta» of the same span, a percentage with 2 decimals (100 = exactly the goal, it can pass 100; never a 0–1 ratio), null where the goal is 0. Every «puesto» counts towards it, a «puesto de salida» or not.

Money is «Facturación»: the units of the «puestos de salida» × the price per unit each was billed at, in the plant’s currency (`currency`, ISO 4217: `EUR` for a plant in España, `COP` for every other), in whole currency units with up to 2 decimals, never cents. Whether a money figure reads null or 0 where nothing was priced is stated on each field. `unitPrice` is null on a «puesto» that is not «de salida», and its hours bill 0.

Days and hours are the plant’s own: a plant day is a calendar day `YYYY-MM-DD` in the organization’s timezone (`getOrganization` `timezone`), never UTC, and an `hour` is the clock hour 0–23 that starts at it in that zone. The day is the path’s `day`, required.

Naming: a «puesto» (a numbered station of a «módulo») is a `station` in paths and an `operation` in ids, filters and codes. A path’s `stationId` is the same number as the `operationId` of answers and of filters and as the `id` `listStations` returns, and one that is not this organization’s answers 404 `OPERATION_NOT_FOUND`.

Plan: needs the plan feature `reports` («Reportes»), the one its dashboard screen is gated by. Pro, a trial of Pro, an «exenta» organization and a Light of plan version 1 (`getPlan` `planVersion`) answer it; a Light of plan version 2 does not: 403 `PLAN_LIMIT` with `feature: "reports"`. `getPlan` `features` lists what the organization’s plan has.

See also: `getStationEvents` for the same «puesto» and day read from the «marcas» log (pace, connectivity); `getEfficiency` or `getBilling` with `operationId` for this «puesto» over a range.

### Authorization

- `apiToken` — Bearer token. An API token created in Configuración › Tokens de API, or a connected app’s access token

Send it as `Authorization: Bearer <your API token>`.

### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `stationId` | path | integer | yes | The «puesto»: the `id` of a station from `listStations`. The same number is called `operationId` in answers and in filters; unknown or of another organization: 404 `OPERATION_NOT_FOUND`. |
| `day` | path | string (date) | yes | The plant day to read, `YYYY-MM-DD` on the organization’s own clock (its timezone, never UTC). Required here: it is part of the path. Not a real calendar day: 400 `INVALID_DAY`. |
| `organizationId` | path | integer | yes | The organization, from `getMe` or `listOrganizations`. |

### Responses

| Status | Description |
| --- | --- |
| `200` | The «puesto»’s day, hour by hour. |
| `400` | `INVALID_DAY`: `day` is not a real calendar day written `YYYY-MM-DD`. Body: `{statusCode, code, message}`, the message in Spanish, for the usuario. |
| `401` | Missing, malformed, unknown, expired or revoked credential: `INVALID_API_TOKEN`. |
| `402` | The organization is blocked: `ORG_BLOCKED`. |
| `403` | `PLAN_LIMIT` with `feature: "reports"`: the organization’s plan lacks «Reportes» (Pro, a trial of Pro, an «exenta» organization and a Light of plan version 1 (`getPlan` `planVersion`) answer it; a Light of plan version 2 does not). `PLAN_LIMIT` with `feature: "aiConnector"`: a connected app reads an organization without «Conectar con IA». `INSUFFICIENT_SCOPE`: the credential lacks the «Permiso» `read`. Retrying does not help: the plan or the credential has to change. |
| `404` | `ORGANIZATION_NOT_FOUND`: the organization does not exist or is out of the credential’s reach. `OPERATION_NOT_FOUND`: the «puesto» (`stationId`) does not exist or is another organization’s. One body for a row that is missing and for one of another organization. |
| `429` | The credential is over its rate limit: `RATE_LIMITED`. Per credential, in fixed windows of 60 seconds: 60 requests in one organization on Light and 120 on Pro; 20 on the heavy reads (the range figures, the whole floor, the month and the pauses); 300 across every organization; 60 on the routes that name no organization. Wait `Retry-After` seconds; a refused request counts against nothing. |

### Example

```bash
curl -X GET 'https://api.fluenta.io/v1/external/organizations/{organizationId}/stations/{stationId}/days/{day}/report' \
  -H 'Authorization: Bearer <your API token>'
```