# Organizations and resources
URL: https://docs.fluenta.io/en/docs/organizations

How calls chain together, from your user to your organizations and from an organization to its modules, stations and operators.



Here you will see which resources the API has, which call each id comes from,
and how to work with an account that belongs to several organizations.

## The path [#the-path]

```text
user (your token)
└── organizations
    ├── modules (módulos)
    │   └── stations (puestos)
    └── operators (operarios)
```

A token is personal: it acts as your user and reaches every organization you
belong to. There is no default organization: every route names its own in the
path, as `organizationId`.

## Where each id comes from [#where-each-id-comes-from]

| Resource            | What it is                                             | Its id comes from                                                                                                         | It is used as                                      |
| ------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| Organization        | A plant, a workshop (taller) or a brand's account      | `GET /me` → `organizations[].id`, `GET /organizations` → `items[].id`                                                     | `organizationId` in the path                       |
| Module (módulo)     | A production line                                      | `GET …/modules` → `[].id`, `GET …/floor` → `modules[].id`                                                                 | `moduleId` in the path or as a filter              |
| Station (puesto)    | A numbered station of a module                         | `GET …/modules/{moduleId}/stations` → `[].id`, `GET …/stations` → `items[].id`, `GET …/floor` → `modules[].stations[].id` | `stationId` in the path, `operationId` as a filter |
| Operator (operario) | The person who registers their own output at a station | `GET …/operators` → `[].id`, a station's `operator.id` field                                                              | `operatorId` in the path or as a filter            |

A station's id has two names. In the path it is `stationId`. In the report
filters it is `operationId`, and in their rows it comes as `operation.id`. It
is the same number.

Each operator carries in `station` the station they are seated at, or `null`
when they are at none. Each station carries in `operator` the seated operator,
or `null` when it is empty.

## A chained example [#a-chained-example]

```bash
# 1. Your organizations → organizationId
curl https://api.fluenta.io/v1/external/organizations \
  -H "Authorization: Bearer $FLUENTA_TOKEN"

# 2. The modules of organization 42 → moduleId
curl https://api.fluenta.io/v1/external/organizations/42/modules \
  -H "Authorization: Bearer $FLUENTA_TOKEN"

# 3. The stations of module 7 → stationId
curl https://api.fluenta.io/v1/external/organizations/42/modules/7/stations \
  -H "Authorization: Bearer $FLUENTA_TOKEN"

# 4. Station 311, as the board reads it now
curl https://api.fluenta.io/v1/external/organizations/42/stations/311 \
  -H "Authorization: Bearer $FLUENTA_TOKEN"

# 5. That station's efficiency over a range: the same id, as operationId
curl "https://api.fluenta.io/v1/external/organizations/42/analytics/efficiency?from=2026-11-03&to=2026-11-07&operationId=311" \
  -H "Authorization: Bearer $FLUENTA_TOKEN"
```

Steps 1 to 4 answer on every plan. Step 5 follows the plan: see
[Plans](/en/docs/plans).

`GET …/floor` answers the modules with their stations in one call. Use it when
you need the whole plant, not to read one station: it counts against a lower
rate limit.

## Accounts with several organizations [#accounts-with-several-organizations]

A person can belong to several organizations: a brand and its workshops
(talleres), or someone who works for two plants. The same token reaches all of
them.

* `GET /me` carries the first 50, by name, and the total in
  `organizationsTotal`.
* `GET /organizations` pages them 50 at a time with `page` and searches them
  by name with `search`.
* Each organization answers according to its own plan. `connectorEnabled` says
  whether that organization answers your credential.
* Each organization has its own rate limit, and there is one more for the
  token across all of them: see [Rate limits](/en/docs/rate-limits).
* Each organization has its own clock. The days and hours in its answers are
  in its time zone: `timezone` and `today` in
  `GET /organizations/{organizationId}`.
* Your role and your permissions in one organization are in
  `GET /organizations/{organizationId}/access`.

To walk a brand and its workshops, list the organizations and repeat the same
calls with each `organizationId`.

## What is not yours answers 404 [#what-is-not-yours-answers-404]

An organization you do not belong to answers the same as one that does not
exist:

```json
{
  "statusCode": 404,
  "code": "ORGANIZATION_NOT_FOUND",
  "message": "Organización no encontrada"
}
```

It never answers 403. The same holds inside an organization: a module, a
station or an operator of another organization answers 404 with
`MODULE_NOT_FOUND`, `OPERATION_NOT_FOUND` or `OPERATOR_NOT_FOUND`, the same as
an id that does not exist.

Always use ids that came from an API answer. Do not build them or guess them.
[Errors](/en/docs/errors) has the rest of the codes.
