Skip to main content
POST
Error

Authorizations

Authorization
string
header
required

A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange.

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. Absent, the session's default organization answers.

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
key
string
required

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
Example:

"pro"

name
string
required

What the pricing table draws.

description
string
default:""
display_order
integer
default:0

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

Response

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.

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.

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