---
title: "Get billing"
method: GET
path: "/billing"
tags: ["Billing"]
---

# Get billing

`GET /billing`

## Request

- Base URL: `https://api.spectate.net/v1`
- URL: `https://api.spectate.net/v1/billing`
- Auth: HTTP bearer

Returns the plan, the subscription and the SMS and voice notification credits.

## Response `200`

The billing state.

- Billing: The team's billing state. Subscriptions are changed in the dashboard.
  - `plan` 'none' | 'starter' | 'team' | 'business', required: Billing plans (docs/billing.md). The plan sets the features; the number of monitors + hosts is the subscription's quantity, priced per monitor (`config/billing.php`). `None` is a team without a paid plan: on the trial (which uses the trial plan's limits) or unpaid (paused). | | |---| | `none` <br/> No paid plan and no trial: monitoring is paused until the team subscribes. | | `starter` <br/> Starter: up to 3 members and 1 status page, the team default escalation path only. | | `team` <br/> Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages. | | `business` <br/> Business: everything in Team, with unlimited status pages and more subscribers and notification credits. |
  - `subscribed` boolean, required: Whether the team has a paid subscription
  - `on_trial` boolean, required: Whether the team is on its trial
  - `trial_ends_at` string, date-time, nullable, required: When the trial ends; `null` without one
  - `plan_ends_at` string, date-time, nullable, required: End of a plan Spectate granted without a subscription; `null` without one
  - `subscription` Subscription, required: The team's paid subscription.
    - `plan` 'none' | 'starter' | 'team' | 'business', required: Billing plans (docs/billing.md). The plan sets the features; the number of monitors + hosts is the subscription's quantity, priced per monitor (`config/billing.php`). `None` is a team without a paid plan: on the trial (which uses the trial plan's limits) or unpaid (paused). | | |---| | `none` <br/> No paid plan and no trial: monitoring is paused until the team subscribes. | | `starter` <br/> Starter: up to 3 members and 1 status page, the team default escalation path only. | | `team` <br/> Team: unlimited members, 5 status pages, on-call, more escalation paths and private status pages. | | `business` <br/> Business: everything in Team, with unlimited status pages and more subscribers and notification credits. |
    - `interval` 'month' | 'year', required: Billing interval of a subscription; the values are Vatly's `interval` values. | | |---| | `month` <br/> Billed every month. | | `year` <br/> Billed every year, for the price of 10 months. |
    - `quantity` integer, required: Monitors and hosts paid for: the team's limit of both together
    - `status` 'created' | 'trial' | 'active' | 'on_grace_period' | 'paused' | 'canceled', required: Where a subscription stands at the payment provider. | | |---| | `created` <br/> Created; the first payment hasn't gone through yet. | | `trial` <br/> In a trial period. | | `active` <br/> Paid and running. | | `on_grace_period` <br/> Cancelled, running until the end of the paid period. | | `paused` <br/> Paused. | | `canceled` <br/> Ended. |
    - `cancelled` boolean, required: Whether it's cancelled and runs until `current_period_ends_at`; it can be resumed in the dashboard until then
    - `renews_at` string, date-time, nullable, required: When it renews; `null` when it won't
    - `current_period_ends_at` string, date-time, nullable, required: End of the period paid for
    - `payment_method` string, nullable, required: How it's paid; `null` when unknown
  - `notification_credits` NotificationCredits, required: Credits for SMS and voice notifications. The monthly allowance is spent first; bought credits never expire.
    - `balance` integer, required: Credits that can be spent now: what's left of this month's allowance plus bought credits
    - `allowance` integer, required: What's left of this month's allowance
    - `purchased` integer, required: Bought credits left
    - `monthly` integer, required: The plan's monthly allowance; 0 during the trial
    - `reset_at` string, date-time, nullable, required: When the allowance was last reset; `null` before the first reset

## Other responses

- `401`: `UNAUTHENTICATED`: no token was sent. `INVALID_TOKEN`: the token is unknown or revoked. `TOKEN_EXPIRED`: the token has expired.
- `403`: `FORBIDDEN`: the token lacks an ability this endpoint requires (listed in `details.required_abilities`). `TEAM_PENDING_DELETION`: the team is scheduled for deletion. `TEAM_SUSPENDED`: Spectate suspended the team.
- `429`: `RATE_LIMITED`: too many requests for this token. Wait for the number of seconds in `Retry-After`.

---

[API](https://skmtc.dev/spectate/apis/spectate-api.md) - [All operations](https://skmtc.dev/spectate/apis/spectate-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spectate/apis/spectate-api/revisions/9b1a233997de?raw)
