# Get operator presence
URL: https://docs.fluenta.io/docs/reference/plant/get-operator-presence
Operation: `getOperatorPresence`
Required permission: `read`

`GET /v1/external/organizations/{organizationId}/operators/presence`

Which «operarios» have a tablet connected right now, and whether the app is open on it. An «operario» missing from the answer is offline.

Answers the connection dot each «puesto» card of the «Tablero en tiempo real» wears: one row per «operario» whose tablet is connected to Fluenta right now, with `state` `active` («En la app»: the app is open on the screen) or `background` («Fuera de la app o pantalla bloqueada»: connected, the app out of sight).

An «operario» missing from `operators` is offline («Sin conexión»): there is no `offline` row, and an organization with no tablet connected answers `operators: []`. Rows are ordered by `operatorId`, an `id` of `listOperators`; to name them or find their «puesto», join with `listOperators` or call `getOperator`.

`at` is the instant the tablets were read, ISO 8601 in UTC (the one field here that is not on the plant’s clock). It is a snapshot, never stored: ask again to see a change. Presence says a tablet is connected, not that units are being made: for that read `unitsThisHour` on the «puesto».

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

### Responses

| Status | Description |
| --- | --- |
| `200` | `ExternalPresenceDto` |
| `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}/operators/presence' \
  -H 'Authorization: Bearer <your API token>'
```