Skip to content

Billing

Endpoint What it does
GET /plans Available plans and their limits. No token needed.
GET /subscription The current subscription and balance, and pause after a missed payment.
POST /subscription/plan Move to a plan priced the same or lower. Refused with downgrade_blocked if the account holds more addresses than the plan allows, or more than one device when moving to Free. Upgrades return 402 payment_required and go through checkout. Session only.
GET /billing/providers Payment methods this deployment takes. No token needed.
POST /billing/checkout Open a hosted checkout for a planId with a provider: polar for card or nowpayments for crypto. Returns the checkout url and the pending payment. A provider that is unavailable returns provider_unavailable. Session only.
GET /billing/payments/:id One payment and its status. The plan changes when it is paid.

After a missed payment, GET /subscription includes:

{
"pause": {
"planId": "plan_scale",
"since": "2026-10-19T10:00:00.000Z",
"deletesAt": "2026-11-09T10:00:00.000Z",
"addresses": 2,
"devices": 1,
"apiKeys": 1,
"domains": 0
}
}

planId is the plan to pay for. It is null once paid, if something the new plan does not cover is still paused. pause is null when nothing is paused. See Missed payments.