# Changelog
URL: https://docs.fluenta.io/en/docs/changelog

How the Fluenta API changes under /v1, what counts as a breaking change, and the list of changes by date.



This page is where changes to the API are announced.

## How the API changes [#how-the-api-changes]

* **The version is in the path.** Every route lives under `/v1/external`.
* **Compatible changes ship without notice.** They are new routes, new
  optional parameters and new fields in answers. They are noted here. Your
  program must ignore the fields it does not know.
* **Published names are kept.** An error `code` keeps its name once published.
  The permissions `read` and `program` are never renamed. The list of actions
  of `listActivity` gains values; none is renamed.
* **A breaking change** is removing or renaming a route, a parameter, a field
  or a `code`; changing the type or the meaning of a field; or making an
  optional parameter required.
* **Breaking changes are announced on this page before they ship.**

Handle a `code` your program does not know by its HTTP status. See
[Errors](/en/docs/errors).

## 2026-11-12 [#2026-11-12]

### API tokens [#api-tokens]

* A user creates API tokens in «Configuración» (Settings) → «Tokens de API»
  (API tokens). The token is shown once.
* It is personal: it acts as its user, in all their organizations, with the
  role they have in each.
* It carries «Leer» (Read) always, and «Gestionar el Programa» (Manage the
  Programa) if ticked when it is created.
* Its «Vencimiento» (expiry) is «Nunca» (never), 30 days, 90 days or 1 year.
  Each user can hold up to 10 live tokens.
* `getMe` now answers `credential` (`kind`, `name`, `prefix`, `expiresAt`) and
  `rateLimit` (`limit`, `remaining`, `reset`).

See [Authentication](/en/docs/authentication).

### Access for Light [#access-for-light]

* An API token reaches organizations on Light and on Pro.
* The API gives each organization what its plan gives it in the dashboard.
  Report routes answer 403 `PLAN_LIMIT` when the plan does not include them.
* «Conectar con IA» (Connect with AI) stays on the Pro plan.

See [Plans](/en/docs/plans).

### 23 new read routes [#23-new-read-routes]

The API goes from 22 to 45 reads. With the 15 writes of the «Programa» (each
module's production queue) and the 2 delete previews, that is 62 operations.

| Group        | New operations                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account      | [`getMyUsage`](/en/docs/reference/account/get-my-usage)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Organization | [`getPlan`](/en/docs/reference/organization/get-plan), [`getSettings`](/en/docs/reference/organization/get-settings), [`listCategories`](/en/docs/reference/organization/list-categories)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Plant        | [`getFloor`](/en/docs/reference/plant/get-floor), [`getModule`](/en/docs/reference/plant/get-module), [`listModuleRestTimes`](/en/docs/reference/plant/list-module-rest-times), [`listOrganizationStations`](/en/docs/reference/plant/list-organization-stations), [`getStation`](/en/docs/reference/plant/get-station), [`getOperatorPresence`](/en/docs/reference/plant/get-operator-presence), [`getOperator`](/en/docs/reference/plant/get-operator)                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Analytics    | [`getModuleDayHistory`](/en/docs/reference/analytics/get-module-day-history), [`getModuleEfficiency`](/en/docs/reference/analytics/get-module-efficiency), [`getOperatorEfficiency`](/en/docs/reference/analytics/get-operator-efficiency), [`getStationDayReport`](/en/docs/reference/analytics/get-station-day-report), [`getStationEvents`](/en/docs/reference/analytics/get-station-events), [`getHourlyActivity`](/en/docs/reference/analytics/get-hourly-activity), [`getOperatorsActivity`](/en/docs/reference/analytics/get-operators-activity), [`getConsistency`](/en/docs/reference/analytics/get-consistency), [`getEfficiencyByModule`](/en/docs/reference/analytics/get-efficiency-by-module), [`getBillingByModule`](/en/docs/reference/analytics/get-billing-by-module), [`getMonth`](/en/docs/reference/analytics/get-month), [`getPauses`](/en/docs/reference/analytics/get-pauses) |

* The eleven of Account, Organization and Plant answer on Light and on Pro.
* The twelve of Analytics are report routes: they answer by the
  organization's plan.
* These routes have no tool in «Conectar con IA». An AI reaches them with an
  API token. See [Using the API from an AI](/en/docs/ai).

### Filters on the ranges [#filters-on-the-ranges]

`getEfficiency`, `getProduction` and `getBilling` take one optional filter:
`moduleId`, `operatorId` or `operationId`. Without a filter they answer what
they answered before. A filter the figure does not have answers 400
`FILTER_UNSUPPORTED`.

### Rate limit with headers [#rate-limit-with-headers]

* Each credential has a limit per minute: 60 requests per organization on
  Light and 120 on Pro.
* Every answer carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and
  `X-RateLimit-Reset`.
* Past the limit, the API answers 429 `RATE_LIMITED` with `Retry-After`.

See [Rate limits](/en/docs/rate-limits).

### `INVALID_REQUEST` [#invalid_request]

A query or a body that fails its validation answers 400 `INVALID_REQUEST`,
with `details`: one `{ field, message }` row per failure. Before, that 400
carried `message` as a list and no `code`.

See [Errors](/en/docs/errors).

### OpenAPI document [#openapi-document]

Operations are grouped by area: Account, Organization, Plant, Board, Program,
Catalogue, Analytics and Activity. The document is at
[`/openapi.json`](/openapi.json).
