Skip to main content
POST
Error

Autorizações

Authorization
string
header
obrigatório

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

X-Organization-Id
string

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

environment
enum<string>
padrão:live

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.

Opções disponíveis:
live,
test

Corpo

application/json
key
string
obrigatório

Lowercase letters, digits, _, - and .. Unique within the environment. Narrow on purpose: it ends up in your source, in a URL and in a payment provider's metadata, and a key that gets escaped differently in three places stops matching in one of them.

Maximum string length: 64
Exemplo:

"pro"

name
string
obrigatório

What the pricing table draws.

description
string
padrão:""
display_order
integer
padrão:0

Where the plan sits on a pricing table. Yours to decide rather than inferred from the price.

seat_feature_id
string

Which of this environment's metered features counts this plan's seats. The seat limit then resolves like every other allowance — the plan's cell for that feature, then any per-customer override — and invitations onto teams subscribed to this plan are checked against it. Omit for no seat limit.

Resposta

The plan. prices and features are absent — it has none yet.

A plan you sell. Its prices and the features it carries come with it, because a pricing table needs all of them at once.

id
string<uuid>
key
string

Your own stable handle for the plan — lowercase letters, digits, _, - and .. Unique within an environment, and what promoting a catalogue to live matches on.

Exemplo:

"pro"

name
string
description
string
display_order
integer

Where the plan sits on a pricing table.

archived
boolean

No longer sold. Archived rather than deleted, because subscriptions point at it.

seat_feature_id
string<uuid> | null

Which of this environment's metered features counts this plan's seats. The seat limit is that feature's allowance — the plan's cell, then any per-customer override — and invitations onto teams subscribed to this plan are checked against it. null is no seat limit.

prices
object[]
features
object[]
created_at
string<date-time>