Skip to main content
PATCH
Error

Authorizations

Authorization
string
header
required

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.

Headers

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.

Path Parameters

id
string<uuid>
required

The plan.

Query Parameters

environment
enum<string>
default: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.

Available options:
live,
test

Body

application/json
name
string
description
string
display_order
integer
archived
boolean

true withdraws the plan from sale, false puts it back.

seat_feature_id
string

Which of this environment's metered features counts this plan's seats. Absent leaves it alone; an empty string clears it — no seat limit is a real offer, not a missing field.

Response

The plan as it now stands. prices and features are not included — re-read the catalogue for those.

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.

Example:

"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>