A valid request URL is required to generate request examples{
"environment": "live",
"plans": [
{
"id": "…",
"key": "pro",
"name": "Pro",
"description": "When it gets real",
"display_order": 1,
"archived": false,
"prices": [
{
"id": "…",
"kind": "recurring",
"currency": "BRL",
"amount_minor": 14900,
"currency_exponent": 2,
"interval_unit": "month",
"interval_count": 1,
"tax_behavior": "inclusive",
"archived": false,
"providers": [
{
"provider": "stripe",
"provider_account_id": "acct_…",
"provider_price_id": "price_…",
"provider_product_id": "prod_…"
}
],
"created_at": "2026-07-01T12:00:00Z"
},
{
"id": "…",
"kind": "one_time",
"currency": "BRL",
"amount_minor": 99700,
"currency_exponent": 2,
"interval_unit": null,
"interval_count": null,
"tax_behavior": "inclusive",
"archived": false,
"providers": [],
"created_at": "2026-07-01T12:00:00Z"
}
],
"features": [
{
"feature_id": "…",
"feature_key": "seats",
"kind": "metered",
"limit": 10,
"unlimited": false,
"included_quantity": null,
"rollover": null,
"rollover_cap": null,
"overdraft_limit": null
},
{
"feature_id": "…",
"feature_key": "tokens",
"kind": "credit",
"limit": null,
"unlimited": false,
"included_quantity": 50000,
"rollover": "capped",
"rollover_cap": 100000,
"overdraft_limit": 0
}
],
"created_at": "2026-07-01T12:00:00Z"
}
],
"features": [
{
"id": "…",
"key": "seats",
"name": "Seats",
"description": "",
"kind": "metered",
"unit_name": "seats",
"reset_period": "billing_period",
"archived": false,
"created_at": "2026-07-01T12:00:00Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Read the catalogue
Requires billing:read. One environment’s whole catalogue: every plan with its prices and the features that plan carries, plus the environment’s full feature list — including features no plan carries yet, which is what a pricing matrix needs before it has any cells.
One call rather than a resource per row: a pricing matrix needs all of it at once, and an environment’s catalogue is tens of rows.
The catalogue is per environment. Build it in test and the live one is untouched. And it is your pricing, sold to your own customers — not the plan you are on with UserKit, which is GET /v1/organization/entitlements.
A valid request URL is required to generate request examples{
"environment": "live",
"plans": [
{
"id": "…",
"key": "pro",
"name": "Pro",
"description": "When it gets real",
"display_order": 1,
"archived": false,
"prices": [
{
"id": "…",
"kind": "recurring",
"currency": "BRL",
"amount_minor": 14900,
"currency_exponent": 2,
"interval_unit": "month",
"interval_count": 1,
"tax_behavior": "inclusive",
"archived": false,
"providers": [
{
"provider": "stripe",
"provider_account_id": "acct_…",
"provider_price_id": "price_…",
"provider_product_id": "prod_…"
}
],
"created_at": "2026-07-01T12:00:00Z"
},
{
"id": "…",
"kind": "one_time",
"currency": "BRL",
"amount_minor": 99700,
"currency_exponent": 2,
"interval_unit": null,
"interval_count": null,
"tax_behavior": "inclusive",
"archived": false,
"providers": [],
"created_at": "2026-07-01T12:00:00Z"
}
],
"features": [
{
"feature_id": "…",
"feature_key": "seats",
"kind": "metered",
"limit": 10,
"unlimited": false,
"included_quantity": null,
"rollover": null,
"rollover_cap": null,
"overdraft_limit": null
},
{
"feature_id": "…",
"feature_key": "tokens",
"kind": "credit",
"limit": null,
"unlimited": false,
"included_quantity": 50000,
"rollover": "capped",
"rollover_cap": 100000,
"overdraft_limit": 0
}
],
"created_at": "2026-07-01T12:00:00Z"
}
],
"features": [
{
"id": "…",
"key": "seats",
"name": "Seats",
"description": "",
"kind": "metered",
"unit_name": "seats",
"reset_period": "billing_period",
"archived": false,
"created_at": "2026-07-01T12:00:00Z"
}
]
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Autorizações
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Cabeçalhos
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Parâmetros de consulta
Which environment to act in. A view parameter, valid only on the staff surface — a machine credential never chooses its environment, it is resolved from the key.
live, test