API reference, Console billing
The subscription plans
GET/v1/console/plansoperation id listPlans
The monthly plans (Base, Hot, Fierce) with their price excluding VAT, weekly token allowance, effective rate
and reset price, plus the standard pay-as-you-go rate. Values come from gateway/config/pricing.json
(docs/pricing-v2.md); the console and the app render this list, never their own copy of the prices. Each plan
also carries its founding-round seats (seats_total, seats_taken, seats_left, available); the same list
without a session is listPublicPlans.
Authentication. Console session cookie (__Host-dex_session), or an app session token (Authorization: Bearer dex_ses_...). With the cookie, state-changing routes also need the x-dex-csrf header.
Responses
200The plans, cheapest first.
Headers: x-request-id
objectstringrequiredalways "list"
standard_unit_price_micro_centsintegerrequireddataarray of Planrequireddata[].idPlanIdrequiredone of "base", "hot", "fierce"
data[].objectstringrequiredalways "plan"
data[].namestringrequireddata[].price_centsintegerrequireddata[].currencystringrequiredalways "EUR"
data[].intervalstringrequiredalways "month"
data[].included_multipleintegerrequireddata[].week_allowance_tokensintegerrequiredformat int64
data[].effective_unit_price_micro_centsintegerrequireddata[].reset_price_centsintegerrequireddata[].seats_totalinteger | nullrequiredat least 0
data[].seats_takenintegerrequiredat least 0
data[].seats_leftinteger | nullrequiredseats_total minus seats_taken, never below 0; null when the plan has no seat limit.at least 0
data[].availablebooleanrequiredcreateSubscriptionCheckout answers 409 plan_sold_out; join the waiting list with joinWaitingList.data[].pricesobjectrequiredprice_cents and reset_price_cents. Stripe charges one of these, chosen from the buyer's location or
fixed by the account's billing_currency; the plan, the weekly allowance and resets are the same in every
currency. New currencies may appear within v1.data[].prices.EURPlanPricerequireddata[].prices.EUR.price_centsintegerrequiredat least 1
data[].prices.EUR.reset_price_centsintegerrequiredat least 1
data[].prices.USDPlanPricerequireddata[].prices.USD.price_centsintegerrequiredat least 1
data[].prices.USD.reset_price_centsintegerrequiredat least 1
data[].prices.GBPPlanPricerequireddata[].prices.GBP.price_centsintegerrequiredat least 1
data[].prices.GBP.reset_price_centsintegerrequiredat least 1
data[].prices.INRPlanPricerequireddata[].prices.INR.price_centsintegerrequiredat least 1
data[].prices.INR.reset_price_centsintegerrequiredat least 1
data[].prices.<key>PlanPricedata[].prices.<key>.price_centsintegerrequiredat least 1
data[].prices.<key>.reset_price_centsintegerrequiredat least 1
currenciesarray of stringrequiredeach item: one of "EUR", "USD", "GBP", "INR"
top_up_packsarray of TopUpPackrequiredcreateCheckoutSession and amount_cents = credit_cents. Accounts billed in EUR (or not
yet fixed) can also top up any EUR amount from EUR 10.top_up_packs[].credit_centsintegerrequiredtop_up_packs[].pricesobjectrequiredvalues: integer
top_up_packs[].prices.EURintegerrequiredtop_up_packs[].prices.USDintegerrequiredtop_up_packs[].prices.GBPintegerrequiredtop_up_packs[].prices.INRintegerrequiredtop_up_packs[].prices.<key>integer401Missing, unknown, revoked or expired credentials.
Headers: x-request-id, x-client-request-id
Error envelope. See Errors for every type and code.
403The credentials are valid but not allowed to do this (missing scope, suspended account or failed CSRF check).
Headers: x-request-id, x-client-request-id
Error envelope. See Errors for every type and code.
500An unexpected error. Any charge was refunded. Retry with the same idempotency key.
Headers: x-request-id, x-client-request-id
Error envelope. See Errors for every type and code.
503maintenance: the console's database, sign-in or payments are unavailable for a moment (for
createGoogleSession also: Google sign-in is not configured, or Google's signing keys cannot be fetched).
Retry after retry-after. Nothing was changed.
Headers: x-request-id, retry-after
Error envelope. See Errors for every type and code.
Examples
Illustrative values. Examples show the shape of requests and responses; the numbers in them are not measured results.
Response: The three plans with their regional prices, the founding-round seats, the standard rate and the top-up packs (docs/pricing-v3.md)
{
"object": "list",
"standard_unit_price_micro_cents": 100,
"data": [
{
"id": "base",
"object": "plan",
"name": "Base",
"price_cents": 999,
"currency": "EUR",
"interval": "month",
"included_multiple": 2,
"week_allowance_tokens": 4611000,
"effective_unit_price_micro_cents": 50,
"reset_price_cents": 250,
"seats_total": 200,
"seats_taken": 37,
"seats_left": 163,
"available": true,
"prices": {
"EUR": {
"price_cents": 999,
"reset_price_cents": 250
},
"USD": {
"price_cents": 1199,
"reset_price_cents": 299
},
"GBP": {
"price_cents": 899,
"reset_price_cents": 229
},
"INR": {
"price_cents": 99000,
"reset_price_cents": 24900
}
}
},
{
"id": "hot",
"object": "plan",
"name": "Hot",
"price_cents": 2400,
"currency": "EUR",
"interval": "month",
"included_multiple": 5,
"week_allowance_tokens": 27692000,
"effective_unit_price_micro_cents": 20,
"reset_price_cents": 600,
"seats_total": 100,
"seats_taken": 100,
"seats_left": 0,
"available": false,
"prices": {
"EUR": {
"price_cents": 2400,
"reset_price_cents": 600
},
"USD": {
"price_cents": 2799,
"reset_price_cents": 699
},
"GBP": {
"price_cents": 2099,
"reset_price_cents": 529
},
"INR": {
"price_cents": 239000,
"reset_price_cents": 59900
}
}
},
{
"id": "fierce",
"object": "plan",
"name": "Fierce",
"price_cents": 3900,
"currency": "EUR",
"interval": "month",
"included_multiple": 11,
"week_allowance_tokens": 99000000,
"effective_unit_price_micro_cents": 9,
"reset_price_cents": 975,
"seats_total": 20,
"seats_taken": 1,
"seats_left": 19,
"available": true,
"prices": {
"EUR": {
"price_cents": 3900,
"reset_price_cents": 975
},
"USD": {
"price_cents": 4599,
"reset_price_cents": 1149
},
"GBP": {
"price_cents": 3399,
"reset_price_cents": 849
},
"INR": {
"price_cents": 389000,
"reset_price_cents": 97900
}
}
}
],
"currencies": [
"EUR",
"USD",
"GBP",
"INR"
],
"top_up_packs": [
{
"credit_cents": 1000,
"prices": {
"EUR": 1000,
"USD": 1199,
"GBP": 899,
"INR": 99000
}
},
{
"credit_cents": 2500,
"prices": {
"EUR": 2500,
"USD": 2899,
"GBP": 2199,
"INR": 249000
}
},
{
"credit_cents": 5000,
"prices": {
"EUR": 5000,
"USD": 5799,
"GBP": 4399,
"INR": 495000
}
},
{
"credit_cents": 10000,
"prices": {
"EUR": 10000,
"USD": 11499,
"GBP": 8699,
"INR": 990000
}
}
]
}