`GET /api/admin/plans` — list every billing plan (admin), including inactive and non-public plans, for the admin Plans tab.
GET
/api/admin/plans
const url = 'https://example.com/api/admin/plans';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/admin/plansResponses
Section titled “Responses”Media typeapplication/json
Array<object>
object
amount_cents
required
integer format: int32
created_at
required
string format: date-time
currency
required
string
display_name
required
string
features
required
id
required
string
interval
required
string
is_active
required
boolean
is_public
required
boolean
sort_order
required
integer format: int32
stripe_price_id
string | null
stripe_product_id
Parent Stripe Product for the plan. Required for Price rotation
(migration 088): when an admin edits amount_cents, the new
recurring Price is created under this product so existing
checkout links / marketing copy keep their Stripe parent intact.
string | null
updated_at
required
string format: date-time
Examplegenerated
[ { "amount_cents": 1, "created_at": "2026-04-15T12:00:00Z", "currency": "example", "display_name": "example", "features": "example", "id": "example", "interval": "example", "is_active": true, "is_public": true, "sort_order": 1, "stripe_price_id": "example", "stripe_product_id": "example", "updated_at": "2026-04-15T12:00:00Z" }]