---
title: "Plans, prices in every catalog currency, included usage and limits (the same data as the pricing page)"
method: GET
path: "/billing/plans"
tags: ["Billing"]
---

# Plans, prices in every catalog currency, included usage and limits (the same data as the pricing page)

`GET /billing/plans`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/billing/plans`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Query parameters

- `lang` 'en' | 'sv'
- `currency` 'usd' | 'eur' | 'sek' | 'gbp' | 'nok' | 'dkk' | 'chf' | 'pln' | 'USD' | 'EUR' | 'SEK' | 'GBP' | 'NOK' | 'DKK' | 'CHF' | 'PLN': currency of `amount`, rates and limit lines (default usd); `amounts` always lists every currency

## Response `200`

Plans

- object
  - `items` object[], required
    - `id` 'free' | 'pro' | 'business', required
    - `name` string, required
    - `purchasable` boolean, required
    - `featured` boolean, required
    - `badge` string, nullable, required
    - `tagline` string, required
    - `prices` object, required
      - `month` object, nullable, required
        - `amount` integer, required: in `currency`
        - `currency` string, required
        - `amounts` object, required: the fixed price in every catalog currency (lowercase code → minor units)
      - `year` object, nullable, required
        - `amount` integer, required: in `currency`
        - `currency` string, required
        - `amounts` object, required: the fixed price in every catalog currency (lowercase code → minor units)
    - `trialDays` integer, required
    - `limits` object, required: null = unlimited
      - `projects` integer, nullable, required
      - `databases` integer, nullable, required
      - `seats` integer, nullable, required
      - `buildMinutes` integer, nullable, required: included per billing period
      - `bandwidthGb` number, nullable, required
      - `storageGb` number, nullable, required
      - `aiCredits` number, required: Build Credits allowance (see aiCreditsRenewal)
      - `cpus` number, required
      - `memoryMb` integer, required
      - `emailsPerDay` integer, nullable, required: transactional email recipients per UTC day (POST /v1/emails)
      - `emailsPerMonth` integer, nullable, required: transactional email recipients per billing period (the calendar month without a subscription)
    - `aiCreditsRenewal` 'monthly' | 'once', required
    - `overage` 'billed' | 'blocked', required: periodic usage beyond the included amount: billed per unit, or stopped (Free)
    - `overageRates` object[], required
      - `metric` 'projects' | 'databases' | 'seats' | 'buildMinutes' | 'bandwidthGb' | 'storageGb' | 'aiCredits' | 'emailsPerDay' | 'emailsPerMonth', required
      - `unitAmountDecimal` string, required: minor units per unit, in `currency`
      - `currency` string, required
      - `unitAmountDecimals` object, required: the rate in every catalog currency
    - `features` string[], required
    - `limitLines` string[], required: the limits as shown on the pricing page (overage rates in `currency`)
  - `currency` string, required: the currency of `amount`, rates and limit lines in this response (the ?currency query, default usd)
  - `defaultCurrency` string, required: what Checkout charges when no currency is chosen; every existing subscription before local prices
  - `currencies` string[], required: every currency plans can be bought in (lowercase ISO codes, the default first)
  - `buildCreditPack` object, required
    - `credits` integer, required
    - `amount` integer, required: minor units (cents)
    - `currency` string, required
    - `maxPacksPerPurchase` integer, required
    - `amounts` object, required: the fixed price in every catalog currency (lowercase code → minor units)

## Other responses

- `400`: Invalid request (code invalid_request)
- `401`: Missing or invalid session/token (code unauthorized)
- `403`: Authenticated but not permitted (code forbidden); details.requiresSession for plan/payment changes over a token
- `404`: Not found or not visible to the caller (code not_found)
- `409`: Conflicting state, e.g. a subscription already exists (code conflict)
- `429`: Too many requests (code rate_limited); see Retry-After
- `501`: Billing is not set up on this server (code not_configured)
- `503`: The payment provider is unavailable (code provider_unavailable)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
