# List organization stations
URL: https://docs.fluenta.io/docs/reference/plant/list-organization-stations
Operation: `listOrganizationStations`
Required permission: `read`

`GET /v1/external/organizations/{organizationId}/stations`

The organization’s «puestos» (stations) across its «módulos», optionally of one «módulo», as the live board reads them now. 50 per page, by «módulo» in the floor’s order, then in the board’s.

Answers the «puestos» of the «Tablero en tiempo real» as one flat list, across every «módulo» or narrowed to one with `moduleId` (an `id` of `listModules` or `getFloor`). The dashboard has no such screen: it lists them one «módulo» at a time, which is `listStations`.

Paged: 50 «puestos» per page, ordered by «módulo» in the floor’s order and then in the board’s. `page` is 1-based (default 1); `total` counts every «puesto» that matches, so the last page is `ceil(total / 50)`, and a page past it answers `items: []` with the same `total`. A deleted «puesto», or one of a deleted «módulo», is never listed.

Each «puesto» is read as the «Tablero en tiempo real» reads it now: `unitsThisHour` and `hourGoal` are units of the hour `currentHour` names, `unitsToday` units of the plant day `today` names, `color` the «semáforo» (`GRAY`, `RED`, `YELLOW`, `GREEN`), `pausedAt` an ISO 8601 UTC instant, and `currentReference.price` money per unit in the organization’s currency (`getOrganization.currency`).

The answer carries no `today` or `currentHour`: read them from `getSettings`. Every day and hour is on the plant’s own clock, its «zona horaria» (`getSettings.timezone`, an IANA name), never UTC and never the caller’s.

A «puesto» is `station` in this API’s paths and answers, and `OPERATION` in its error code.

Plan: on every plan, Light included. A «token de API» reads it in any organization the user who created it belongs to; a connected AI app (a «conexión») reads it only where the organization has «Conectar con IA» (`getPlan.features.aiConnector`, a Pro feature), and answers 403 `PLAN_LIMIT` elsewhere.

Rate limit: one request of the credential’s ordinary budget in this organization (`getPlan` answers the numbers); past it, 429 `RATE_LIMITED` with `Retry-After` in seconds.

### 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 |
| --- | --- | --- | --- | --- |
| `moduleId` | query | integer | no | Only the «puestos» of this «módulo»: an `id` of `listModules` or `getFloor`. One of another organization answers 404 `MODULE_NOT_FOUND`. |
| `page` | query | integer | no | 1-based page; 50 «puestos» per page, by «módulo» in the floor’s order, then in the board’s order. A page past the last answers no item. |
| `organizationId` | path | integer | yes | The organization, from `getMe` or `listOrganizations`. |

### Responses

| Status | Description |
| --- | --- |
| `200` | `ExternalStationPageDto` |
| `400` | `INVALID_REQUEST`: `page` or `moduleId` is not a positive integer (`page=0`, `page=abc`, `moduleId=abc`), or is past its maximum. `details` holds one `{field, message}` per failure, `field` naming the parameter. |
| `401` | `INVALID_API_TOKEN`: the credential is missing, malformed, unknown, expired or revoked. One body for all of them. |
| `402` | The organization is blocked: `ORG_BLOCKED`. |
| `403` | `PLAN_LIMIT` with `feature: "aiConnector"`: the credential is a «conexión» and the organization’s plan has no «Conectar con IA» (Light). A «token de API» is not refused here on any plan on sale: the plant reads are on every plan. `INSUFFICIENT_SCOPE` only for a credential without the «Permiso» `read` («Leer»), which every credential is issued with. |
| `404` | `ORGANIZATION_NOT_FOUND`: the organization does not exist or is out of the credential’s reach. One body for both. `MODULE_NOT_FOUND`: no «módulo» with that `moduleId` in this organization. One body whether it does not exist, was deleted, belongs to another organization or is not a positive integer: never a 400 or a 403. Answered for the `moduleId` filter: a «módulo» of another organization is a 404, never an empty page. |
| `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' \
  -H 'Authorization: Bearer <your API token>'
```