---
title: "The plan catalog (limits + features + price)"
method: GET
path: "/billing/plans"
tags: ["Billing"]
---

# The plan catalog (limits + features + price)

`GET /billing/plans`

## Request

- Base URL: `https://api.nippy.host`
- URL: `https://api.nippy.host/billing/plans`
- Auth: none declared

## Response `200`

- APIPlanListResponse
  - `plans` APIPlan[], required
    - `tier` 'free' | 'basic' | 'pro' | 'max', required
    - `name` string, required
    - `prices` APIPlanPrices, required
      - `gbp` APICurrencyPrice, required
        - `monthly` number, required: Per-seat monthly price, in minor units
        - `yearly` number, required: Per-seat annual price, in minor units (discounted vs 12× monthly; divides cleanly by 12)
      - `usd` APICurrencyPrice, required
        - `monthly` number, required: Per-seat monthly price, in minor units
        - `yearly` number, required: Per-seat annual price, in minor units (discounted vs 12× monthly; divides cleanly by 12)
      - `eur` APICurrencyPrice, required
        - `monthly` number, required: Per-seat monthly price, in minor units
        - `yearly` number, required: Per-seat annual price, in minor units (discounted vs 12× monthly; divides cleanly by 12)
      - `chf` APICurrencyPrice, required
        - `monthly` number, required: Per-seat monthly price, in minor units
        - `yearly` number, required: Per-seat annual price, in minor units (discounted vs 12× monthly; divides cleanly by 12)
    - `minSeats` number, required: Smallest billable seat count (Team is billed for ≥2 seats)
    - `bandwidthSoftBytes` number, required: Soft, display-only monthly bandwidth, in bytes
    - `limits` APIPlanLimits, required
      - `sites` number, nullable, required: Max sites on the account (a paused site still holds its slot); null means unlimited
      - `storageBytes` number, nullable, required: Max total stored bytes; null means unlimited
      - `uploadBytes` number, nullable, required: Per-upload byte ceiling; null means unlimited
      - `previews` number, nullable, required: Max simultaneously active previews (pending + live); null means unlimited
    - `features` APIPlanFeatures, required
      - `passwordProtect` boolean, required
      - `inBrowserEditing` boolean, required
      - `showBanner` boolean, required
      - `canInviteMembers` boolean, required
      - `customDomains` boolean, required: Attach custom domains to sites
      - `analytics` boolean, required: Access the visitor-analytics dashboard
      - `optOutOfSearch` boolean, required: Control search-engine indexing of the site
      - `overridePageMeta` boolean, required: Override the page title / meta description
      - `overrideDownloads` boolean, required: Control the directory-listing download buttons
      - `qrCodes` boolean, required: Generate downloadable QR codes for a site's public URL
      - `formReplies` boolean, required: Read the contents of captured form replies. Capture, storage and the reply counts are ungated — every plan collects and nothing is dropped — so this flag decides only whether a reply can be read.

---

[API](https://skmtc.dev/nippy/apis/nippy-backend-api.md) · [All operations](https://skmtc.dev/nippy/apis/nippy-backend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nippy/apis/nippy-backend-api/revisions/7ab23f040a55?raw)
