---
title: "List plans"
method: GET
path: "/v1/plans"
tags: ["Plans"]
---

# List plans

`GET /v1/plans`

## Request

- Base URL: `https://api.chronary.ai`
- URL: `https://api.chronary.ai/v1/plans`
- Auth: none required

Returns the catalog of publicly-available plans with pricing, limits, and display metadata. No authentication required; IP-rate-limited. Responses are cacheable (`Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=86400`) with an `ETag` for 304 conditional requests.

## Response `200`

Plan catalog

- object
  - `plans` Plan[], required
    - `id` 'free' | 'pro' | 'custom', required
    - `name` string, required
    - `tagline` string, required
    - `price` integer, nullable, required: Recurring monthly amount in the smallest currency unit (e.g. USD cents). `null` for the custom-priced tier.
    - `currency` string, nullable, required: Lowercase ISO-4217 code. `null` for the custom-priced tier.
    - `limits` PlanLimits, nullable, required: Enforced caps. `null` for the custom-priced tier (negotiated separately).
      - `agents` integer, nullable, required
      - `calendars` integer, nullable, required
      - `events` integer, nullable, required
      - `api_calls` integer, nullable, required
      - `webhook_deliveries` integer, nullable, required
      - `availability_queries` integer, nullable, required
      - `ical_subscriptions` integer, nullable, required
      - `proposals` integer, nullable, required
      - `webhook_endpoints` integer, nullable, required: Max active webhook subscription endpoints per org.
      - `scoped_keys` integer, nullable, required: Max live agent-scoped API keys (`chr_ak_*`) per org.
      - `recurring_events` integer, nullable, required: Max active recurring event series per org. Free-plan series must also be bounded (COUNT or UNTIL) and end within 90 days of the series start.
      - `booking_pages` integer, nullable, required: Max active public booking pages per org.
    - `display_features` string[], required: Marketing copy for UI rendering. Not machine-readable — use `limits` for capability checks.
    - `recommended` boolean, required: Hint for UIs to highlight one tier (currently `pro`).
    - `custom_pricing` boolean: Present and `true` for the custom tier.
    - `contact_url` string: Sales contact URL for the custom-priced tier.

## Other responses

- `304`: ETag matched — no body

---

[API](https://skmtc.dev/chronary/apis/chronary-api.md) · [All operations](https://skmtc.dev/chronary/apis/chronary-api/llms.txt) · [OpenAPI document](https://skmtc.dev/chronary/apis/chronary-api/revisions/0d1a330294ae?raw)
