> ## Documentation Index
> Fetch the complete documentation index at: https://docs.prysm1.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plans

> Pricing plans and per-plan limits — model access, daily request caps, and RPM.

<Note>
  `GET /v1/plans` is public — no API key required.
</Note>

Use this endpoint to build pricing pages, show users their current plan limits in a dashboard,
or let an agent check what models are available before calling `/v1/chat/completions`.

***

## GET /v1/plans

List all PRYSM plans with their limits and model access.

<Note>
  **GET** `https://api.prysm1.com/v1/plans` · Public
</Note>

### Response

<ResponseField name="object" type="string">`list`</ResponseField>

<ResponseField name="data" type="object[]">
  Array of plan objects, one per tier.
</ResponseField>

Each plan object:

<ResponseField name="id" type="string">`free` | `personal` | `pro` | `corporate`</ResponseField>
<ResponseField name="display_name" type="string">Human-readable plan name.</ResponseField>
<ResponseField name="price_usd_month" type="number">Monthly price in USD. `0` for Free and Personal (sandbox) tiers.</ResponseField>
<ResponseField name="daily_requests" type="integer | null">Max requests per 24h window. `null` means unlimited (Corporate).</ResponseField>
<ResponseField name="rpm" type="integer">Max requests per minute.</ResponseField>

<ResponseField name="model_access" type="object">
  `{type, count, models}`.

  * `type`: `"all"` (every live model) or `"allowlist"` (explicit list).
  * `count`: number of accessible models.
  * `models`: array of model IDs for allowlist plans, `null` for "all" plans.
</ResponseField>

<ResponseField name="agentguard" type="boolean">Whether AgentGuard cost-safety is enforced for this plan.</ResponseField>
<ResponseField name="description" type="string">One-line plan description.</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.prysm1.com/v1/plans
  ```

  ```python Python theme={null}
  import httpx

  plans = httpx.get("https://api.prysm1.com/v1/plans").json()
  for plan in plans["data"]:
      daily = plan["daily_requests"] or "unlimited"
      print(f"{plan['display_name']:12} ${plan['price_usd_month']:4}/mo  {daily} req/day")
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "object": "list",
    "data": [
      {
        "id": "free",
        "object": "plan",
        "display_name": "Free",
        "price_usd_month": 0,
        "daily_requests": 1000,
        "rpm": 10,
        "model_access": {
          "type": "allowlist",
          "count": 3,
          "models": ["gemini-2.5-flash-lite", "gpt-5-nano", "mistral-nemo"]
        },
        "agentguard": true,
        "description": "Great for exploration. Budget models only."
      },
      {
        "id": "pro",
        "object": "plan",
        "display_name": "Pro",
        "price_usd_month": 49,
        "daily_requests": 50000,
        "rpm": 300,
        "model_access": {
          "type": "all",
          "count": 27,
          "models": null
        },
        "agentguard": true,
        "description": "Production workloads. All 27 models."
      },
      {
        "id": "corporate",
        "object": "plan",
        "display_name": "Corporate",
        "price_usd_month": 499,
        "daily_requests": null,
        "rpm": 1000,
        "model_access": {
          "type": "all",
          "count": 27,
          "models": null
        },
        "agentguard": true,
        "description": "Unlimited requests, priority routing, SLA."
      }
    ]
  }
  ```
</ResponseExample>

***

## Plan limits

| Plan      | Price    | Daily Requests | RPM   | Models    |
| --------- | -------- | -------------- | ----- | --------- |
| Free      | \$0/mo   | 1,000          | 10    | 3 budget  |
| Personal  | \$0/mo   | 1,000          | 100   | All       |
| Pro       | \$49/mo  | 50,000         | 300   | All       |
| Corporate | \$499/mo | Unlimited      | 1,000 | All + SLA |

### Daily limit errors

When a key exceeds its daily limit, the API returns HTTP 429 with:

```json theme={null}
{
  "error": "daily_limit_exceeded",
  "message": "Daily limit of 1,000 requests reached for your 'free' plan. Resets in ~14h. Upgrade to pro at prysm1.com/pricing",
  "plan": "free",
  "daily_limit": 1000,
  "used_today": 1000
}
```

### Free plan model access

Free plan keys can only call the three cheapest budget models:

* `mistral-nemo` (\$0.02/MTok in+out)
* `gpt-5-nano` ($0.05 in / $0.40 out per MTok)
* `gemini-2.5-flash-lite` ($0.10 in / $0.40 out per MTok)

Requests to other models on a Free key will be routed to the cheapest available budget model automatically.
