# Get floor
URL: https://docs.fluenta.io/docs/reference/plant/get-floor
Operation: `getFloor`
Required permission: `read`

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

The whole floor in one answer: every «módulo» in the floor’s order, each with its «puestos» (stations) as the live board reads them now. Counted against the heavy rate limit.

Answers the «Tablero en tiempo real» in one read: every «módulo» (production line) in the floor’s order, each with its «puestos» in the board’s order. It is `listModules` and `listStations` of every «módulo» together, so no id is needed beyond `organizationId`; the ids it answers feed `getModule`, `listModuleRestTimes`, `getStation` and `getOperator`.

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`).

`today` (`YYYY-MM-DD`) and `currentHour` (0 to 23) are the plant’s clock when it was read; both are null only when that clock could not be read, and the counts are then answered as stored. 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.

An organization with no «módulo» answers `modules: []`; a «módulo» with no «puesto» answers `stations: []`.

Not paged: the whole answer comes in one response.

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: a heavy read. Besides the ordinary budget, each request spends one of the heavy budget (`getPlan.rateLimits.heavy` per window, the same on Light and on Pro, shared with the range reads); once the heavy budget is spent the heavy reads answer 429 `RATE_LIMITED` with `Retry-After` in seconds, and every other route keeps answering. To follow one «módulo» or one «puesto», call `listStations`, `listOrganizationStations` or `getStation`, which are not heavy.

### 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 |
| --- | --- | --- | --- | --- |
| `organizationId` | path | integer | yes | The organization, from `getMe` or `listOrganizations`. |

### Responses

| Status | Description |
| --- | --- |
| `200` | `ExternalFloorDto` |
| `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. |
| `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}/floor' \
  -H 'Authorization: Bearer <your API token>'
```