Puts the organization on a self-serve tier in pay-as-you-go mode, or changes its tier or cadence (monthly by default, annual for an annual-only tier); a change settles the current base fee at once and returns the net amount in prorationCents (0 on a first selection), and a first selection also moves the organization off any legacy subscription. When no card is on file, paymentRequired is true and setupSessionUrl links to a card setup page, so successUrl and cancelUrl are then required (400 otherwise). Requires an org admin, owner or billing role; returns 403 while self-serve plan selection is not available and 400 for a monthly cadence on an annual-only tier.
POST
/billing/plan
curl \
--request POST 'http://api.example.com/billing/plan' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Content-Type: application/json" \
--header "organization: string" \
--data '{
"tier": "public",
"cadence": "monthly",
"successUrl": "string",
"cancelUrl": "string"
}'
Request examples
# Headers
organization: string
# Payload
{
"tier": "public",
"cadence": "monthly",
"successUrl": "string",
"cancelUrl": "string"
}
Response examples (200)
{
"data": {
"plan": {
"tier": "firm",
"cadence": "monthly",
"billingMode": "payg"
},
"paymentRequired": true,
"setupSessionUrl": "https://checkout.stripe.com/c/pay/cs_test_a1Example",
"prorationCents": 15000
},
"statusCode": 200,
"timestamp": "2026-01-15T10:15:00.000Z"
}