# Light and Pro plans
URL: https://docs.fluenta.io/en/docs/plans

Which routes each plan answers, how to read an organization's plan, and what to do with a 403 PLAN_LIMIT.



Here you will see what each plan reaches through the API, how to read an
organization's plan before you call, and what `PLAN_LIMIT` means.

## The rule [#the-rule]

The API gives each organization what its plan gives it in the dashboard. An
API token works on Plan Light and on Plan Pro. On Light, the report routes
answer 403 `PLAN_LIMIT`, just as those reports are locked in the dashboard.

The plan belongs to the organization, not to the token. If your token reaches
a Pro organization and a Light one, each answers according to its own plan.

## What each plan answers [#what-each-plan-answers]

Routes sit under `/v1/external/organizations/{organizationId}`, except the
account ones. The "Key" column is the field of `features` that decides the
group.

| Group                               | Routes                                                                                                                                                                                       | Key                | Light          | Pro |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -------------- | --- |
| Account                             | `/me`, `/me/usage`, `/organizations`                                                                                                                                                         | —                  | Yes            | Yes |
| Organization                        | the organization, `/access`, `/plan`, `/settings`, `/categories`                                                                                                                             | —                  | Yes            | Yes |
| Plant                               | `/floor`, `/modules`, `/modules/{moduleId}`, `…/rest-times`, `…/stations`, `/stations`, `/stations/{stationId}`, `/operators`, `/operators/presence`, `/operators/{operatorId}`              | —                  | Yes            | Yes |
| Live board                          | `/board`                                                                                                                                                                                     | —                  | Yes            | Yes |
| «Programa» and catalogue            | `/modules/{moduleId}/program`, `/references…`, `/catalogue…`, with their writes                                                                                                              | —                  | Yes            | Yes |
| Activity                            | `/activity`                                                                                                                                                                                  | —                  | Yes            | Yes |
| General reports                     | `/analytics/day-report`, `/analytics/leaderboard`, `/analytics/efficiency`, `/analytics/efficiency/modules`, `/analytics/month`, `/stations/{stationId}/days/{day}/report`                   | `reports`          | Version 1 only | Yes |
| Module reports                      | `/modules/{moduleId}/days/{day}/board`, `…/days/{day}/history`, `/modules/{moduleId}/analytics/efficiency`, `/analytics/production`, and writing the day's goals (`PUT` and `DELETE …/goal`) | `moduleReports`    | No             | Yes |
| Operator reports                    | `/analytics/operators/{operatorId}`, `/operators/{operatorId}/analytics/efficiency`                                                                                                          | `operatorReports`  | No             | Yes |
| Billing («Facturación»)             | `/analytics/billing`, `/analytics/billing/modules`                                                                                                                                           | `billingAnalytics` | No             | Yes |
| «Analítica» (the per-tap log views) | `/analytics/activity`, `/analytics/hourly`, `/analytics/operators`, `/analytics/consistency`, `/stations/{stationId}/analytics/events`                                                       | `analytics`        | No             | Yes |
| Pauses («Pausas»)                   | `/analytics/pauses`                                                                                                                                                                          | `pauses`           | No             | Yes |

On Light:

* **Plan version.** A version 1 Light keeps the general reports; a version 2
  Light has none. `planVersion` says which, and it never changes.
* **«Programa».** A module's «Programa» (its production queue) holds up to 3
  «referencias» (order lots):
  `features.maxReferencesPerModule`. On Pro it is `null`, no limit.
* **Rate limit.** A token makes 60 requests a minute in a Light organization
  and 120 in a Pro one: see [Rate limits](/en/docs/rate-limits).

## Read the plan before you call [#read-the-plan-before-you-call]

`GET …/plan` answers on every plan:

```bash
curl https://api.fluenta.io/v1/external/organizations/42/plan \
  -H 'Authorization: Bearer fluenta_live_xxxxxxxxxxxxxxxx'
```

```json
{
  "tier": "light",
  "planVersion": 2,
  "features": {
    "reports": false,
    "billingAnalytics": false,
    "moduleReports": false,
    "operatorReports": false,
    "analytics": false,
    "pace": false,
    "rework": false,
    "pauses": false,
    "operatorPicksReference": false,
    "referenceColor": false,
    "aiConnector": false,
    "maxReferencesPerModule": 3,
    "publicApi": true
  },
  "rateLimits": {
    "windowSeconds": 60,
    "organization": 60,
    "heavy": 20,
    "credential": 300,
    "account": 60
  }
}
```

When a group's key is `true`, its routes answer. When it is `false`, they
answer 403 `PLAN_LIMIT`.

## PLAN_LIMIT [#plan_limit]

```json
{
  "statusCode": 403,
  "code": "PLAN_LIMIT",
  "feature": "reports",
  "message": "Tu plan no incluye esta función"
}
```

`feature` names the missing key. It is not a problem with the token or with
your permissions: retrying does not change it. Leave that figure out, or read
a route the plan does include: `/board` carries the day's efficiency on every
plan.

## Trial and exempt [#trial-and-exempt]

* **Trial.** An organization in its trial month answers as the plan it is
  trying: `tier` is that plan. A trial of Pro reaches every route.
* **Exempt («exenta»).** An exempt organization is never billed. Through the
  API it answers as Pro.
* **Paused subscription.** A blocked organization answers 402 `ORG_BLOCKED` on
  all of its routes.

## «Conectar con IA» is separate [#conectar-con-ia-is-separate]

«Conectar con IA» (Connect with AI) is a Plan Pro feature: it lets an AI app,
such as Claude or ChatGPT, reach the organization through a connection. It has
nothing to do with API tokens. In a Light organization, a connection answers
403 `PLAN_LIMIT` with `feature: "aiConnector"` on every route; an API token
keeps working. See [AI](/en/docs/ai) and
[Authentication](/en/docs/authentication).
