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

# List plans

`GET /api/v1/plans`

## Query parameters

- `product_family_id` string, MeteroidId
- `search` string
- `status` string[]
- `plan_type` string[]
- `order_by` string
- `page` integer
- `per_page` integer

## Response `200`

List of plans

- PlanListResponse
  - `data` Plan[], required
    - `available_parameters` AvailableParameters, required
      - `billing_periods` object — Map of component_id -> available billing periods (e.g., "MONTHLY", "ANNUAL")
      - `capacity_thresholds` object — Map of component_id -> available capacity values
      - `slot_components` string[] — List of component_ids that support slot parametrization (initial slot count)
    - `billing_cycles` integer, nullable
    - `created_at` string, date-time, required
    - `currency` string, required
    - `description` string, nullable
    - `entitlements` Entitlement[]
      - `created_at` string, date-time, required
      - `feature_id` string, MeteroidId, required
      - `id` string, MeteroidId, required
      - `updated_at` string, date-time, required
      - `value` union, required
        - object
          - `enabled` boolean, required
          - `type` 'BOOLEAN', required
        - object
          - `enabled` boolean — Per-entitlement kill switch. `false` means disabled.
          - `limit` string, nullable — Cap on usage. Null means unlimited.
          - `overage_behavior` union, required — What happens past the limit.
            - object — Deny access once usage reaches the limit. Meteroid does not enforce this — your integration must check and act.
              - …
            - object — Keep serving usage past the limit; overage is billed or handled out-of-band.
              - …
          - `reset_period` union
            - object — Resets at the start of each subscription billing period.
              - …
            - object — Buckets aligned to the calendar (e.g. every 1st of the month), shared across customers.
              - …
            - object — Fixed-length buckets anchored on the subscription activation date. Resets at every boundary.
              - …
            - object — Continuous rolling window — usage older than the window edge drops out, no fixed reset.
              - …
            - object — Usage accumulates for the life of the subscription — no reset.
              - …
          - `type` 'METERED', required
          - `warning_threshold_pct` integer, nullable — Percentage of the Cap at which a warning triggers (0–100).
    - `id` string, MeteroidId, required
    - `name` string, required
    - `net_terms` integer, required
    - `period_start_day` integer, nullable
    - `plan_type` 'STANDARD' | 'FREE' | 'CUSTOM', required
    - `price_components` PriceComponent[], required
      - `fee` union
        - RatePlanFee — Recurring rate fee (e.g., monthly subscription)
          - `rates` TermRate[], required
            - `price` string, required
            - `term` 'MONTHLY' | 'QUARTERLY' | 'SEMIANNUAL' | 'ANNUAL', required
        - SlotPlanFee — Slot-based fee (e.g., per-seat pricing)
          - `minimum_count` integer, nullable
          - `quota` integer, nullable
          - `rates` TermRate[], required
            - `price` string, required
            - `term` 'MONTHLY' | 'QUARTERLY' | 'SEMIANNUAL' | 'ANNUAL', required
          - `slot_unit_name` string, required
        - CapacityPlanFee — Capacity-based fee with included committed usage and overage
          - `cadence` 'MONTHLY' | 'QUARTERLY' | 'SEMIANNUAL' | 'ANNUAL', required
          - `metric_id` string, MeteroidId, required
          - `thresholds` CapacityThreshold[], required
            - `included_amount` integer, required
            - `per_unit_overage` string, required
            - `price` string, required
        - UsagePlanFee — Usage-based fee
          - `cadence` 'MONTHLY' | 'QUARTERLY' | 'SEMIANNUAL' | 'ANNUAL', required
          - `metric_id` string, MeteroidId, required
          - `pricing` union, required
            - PerUnitPlanPricing
              - …
            - TieredPlanPricing
              - …
            - VolumePlanPricing
              - …
            - PackagePlanPricing
              - …
            - MatrixPlanPricing
              - …
        - ExtraRecurringPlanFee — Extra recurring fee
          - `billing_type` 'ADVANCE' | 'ARREARS', required
          - `cadence` 'MONTHLY' | 'QUARTERLY' | 'SEMIANNUAL' | 'ANNUAL', required
          - `quantity` integer, required
          - `unit_price` string, required
        - OneTimePlanFee — One-time fee
          - `quantity` integer, required
          - `unit_price` string, required
      - `id` string, MeteroidId, required
      - `name` string, required
      - `product_id` string, MeteroidId
    - `product_family` ProductFamily, required
      - `id` string, MeteroidId, required
      - `name` string, required
    - `self_service_rank` integer, nullable
    - `status` 'DRAFT' | 'ACTIVE' | 'INACTIVE' | 'ARCHIVED', required
    - `trial` TrialConfig
      - `duration_days` integer, required
      - `is_free` boolean, required
      - `trialing_plan_id` string, MeteroidId
    - `version` integer, required
    - `version_id` string, MeteroidId, required
  - `pagination_meta` PaginationResponse, required
    - `page` integer, required
    - `per_page` integer, required
    - `total_items` integer, required
    - `total_pages` integer, required

## Other responses

- `401` — Unauthorized
- `429` — Too many requests

## Changes

- **2026-05-18** (v1) `0cdc37620ffb` — 1 info
  - added the optional property `data/items/entitlements` to the response with the `200` status
- **2026-03-31** (v1) `ee465c53a423` — 2 info
  - response discriminator property name changed for `data/items/price_components/items/fee/oneOf[#/components/schemas/Fee]/` response property from `fee_type` to `type` for the response status `200`
  - response discriminator property name changed for `data/items/price_components/items/fee/oneOf[#/components/schemas/Fee]/oneOf[#/components/schemas/UsagePlanFee]/pricing` response property from `discriminator` to `type` for the response status `200`
- **2026-03-30** (v1) `5cb340234766` — 1 info
  - added the new optional `query` request parameter `order_by`
- **2026-03-27** (v1) `de35c02bb0d2` — 2 warning, 2 info
  - deleted the `query` request parameter `type`
  - added the new `TOO_MANY_REQUESTS` enum value to the `code` response property for the response status `401`
  - added the new optional `query` request parameter `plan_type`
  - added the non-success response with the status `429`
- **2026-03-20** (v1) `51c7018cc5ef` — 10 info
  - added the new optional `query` request parameter `search`
  - added the new optional `query` request parameter `status`
  - added the new optional `query` request parameter `type`
  - added the media type `application/json` for the response with the status `401`
  - …6 more

[Full history](https://skmtc.dev/meteroid-oss/apis/meteroid/changes/api/v1/plans/get.md)

---

[API](https://skmtc.dev/meteroid-oss/apis/meteroid.md) · [All operations](https://skmtc.dev/meteroid-oss/apis/meteroid/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/meteroid-oss/meteroid/revisions/0cdc37620ffb/schema)
