Skip to content

Get Billing Config

GET
/api/billing/config
curl --request GET \
--url https://example.com/api/billing/config

The public price list — no auth required (§13.6, S42).

Mirrors app/api/health.py’s fully-public posture: this is read-only, pre-signup pricing data with no per-org state, the same information a marketing pricing page needs to render for an anonymous visitor.

tiers (plan_kind=‘tier’, features.hidden not true, tier_rank ascending) is the new single source for the console tier picker and the marketing pricing page. plans is now DEPRECATED but still served unchanged in shape for the S42 release: its selection rule widens from “is_active” to “plan_kind=‘alacarte’ AND (plan_code IN ADDON_PLAN_CODES OR is_active)” so soft-retiring the four grandfathered à la carte rows does not empty this array out from under existing consumers, and the live addon_mcu_ota row (sold out of band, no checkout path) keeps appearing exactly as it does today. No row this endpoint returns today disappears — with ONE launch exception (TODO-088): the addon_mcu_ota row is omitted from plans unless MCU_OTA_PUBLIC_CATALOG is on (MCU OTA is not sold at launch); the row itself and existing entitlements are untouched.

Also the console’s only source for Stripe’s publishable key (§8.1), which is public by design — it can only tokenize a card, never read or charge. The key is withheld unless stripe is an enabled gateway, so the console never mounts Elements against a deployment whose checkout would 503.

Successful Response

Media type application/json
BillingConfigResponse

GET /api/billing/config — the public plan catalog.

Also carries the gateway’s PUBLISHABLE identifier (§8.1): this endpoint is the console’s only source for it, and it is designed by Stripe to be public (it can mint payment methods, never read or charge). Secret keys and the webhook secret must never appear here.

object
annual_discount_pct
Any of:
integer
catalog_version
Any of:
integer
currency
Any of:
string
enabled_gateways
Enabled Gateways
Array<string>
overage
Any of:
BillingOverageDefaults

The deployment-wide default overage rates from pricing_tiers.yaml’s top-level overage: block (§13.6) — informational only; per-tier overage_device_cents/overage_datapoints_per_million_cents are authoritative for any actual price quote.

object
datapoints_per_million_cents
required
Datapoints Per Million Cents
integer
device_month_cents
required
Device Month Cents
integer
plans
required
Plans
Array<object>
PlanConfigItem

One row of the (deprecated, §13.6) public à la carte plan catalog.

object
annual_discount_pct
required
Annual Discount Pct
integer
currency
required
Currency
string
is_active
Is Active
boolean
default: true
meters_json
Any of:
object
key
additional properties
any
plan_code
required
Plan Code
string
price_per_device_month_cents
required
Price Per Device Month Cents
integer
product
required
Product
string
purchasable
Purchasable
boolean
stripe_publishable_key
Any of:
string
stripe_tax_enabled
Stripe Tax Enabled
boolean
tiers
Tiers
Array<object>
TierConfigItem

One row of the public tier catalog (§13.6) — plan_kind=‘tier’, features.hidden not true, ordered by tier_rank ascending.

object
annual_discount_pct
required
Annual Discount Pct
integer
currency
required
Currency
string
features
required
TierFeatures

plans.features_json verbatim (§13.4/§13.5) for a plan_kind='tier' row.

object
contact_sales
Contact Sales
boolean
hidden
Hidden
boolean
included_coredump_bytes_month
required
Included Coredump Bytes Month
integer
overage_allowed
required
Overage Allowed
boolean
popular
required
Popular
boolean
rssh_concurrent_sessions
required
Rssh Concurrent Sessions
integer
support
required
Support
string
Allowed values: community helpdesk priority_helpdesk
key
additional properties
any
included_assets
required
Included Assets
integer
included_datapoints_month
required
Included Datapoints Month
integer
included_devices
required
Included Devices
integer
name
required
Name
string
overage_datapoints_per_million_cents
required
Overage Datapoints Per Million Cents
integer
overage_device_cents
required
Overage Device Cents
integer
plan_code
required
Plan Code
string
price_month_cents
required
Price Month Cents
integer
tier_rank
required
Tier Rank
integer
Example
{
"plans": [
{
"is_active": true,
"purchasable": false
}
],
"stripe_tax_enabled": false,
"tiers": [
{
"features": {
"contact_sales": false,
"hidden": false,
"support": "community"
}
}
]
}