Skip to main content
PUT
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

kind
enum<string>
required

Which save offer. The list is closed because each value names an act this API performs at a gateway.

Available options:
downgrade,
pause,
discount

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
enabled
boolean
default:true

Make the offer. Defaults to true.

headline
string

What the person reads. Empty leaves the portal's own wording.

target_price_id
string<uuid>

downgrade only. Must be a live recurring price in this environment.

pause_months
integer

pause only.

Required range: 1 <= x <= 3
coupon_id
string<uuid>

discount only. Must be a coupon in this environment that is not archived.

Response

The offer as it now stands.

A save offer as the tenant configured it, per environment. Exactly one of the three parameters is set, decided by kind; the other two are null.

kind
enum<string>
Available options:
downgrade,
pause,
discount
enabled
boolean
headline
string
target_price_id
string<uuid> | null
pause_months
integer | null
coupon_id
string<uuid> | null
updated_at
string<date-time>