Skip to content

`POST /v1/orgs/{org}/billing/plan` (DAWG-145): move a live subscription between Team, Business and Enterprise.

POST
/v1/orgs/{org}/billing/plan
curl --request POST \
--url https://api.updawg.net/v1/orgs/example/billing/plan \
--header 'Content-Type: application/json' \
--data '{ "plan": "example" }'

Asks Stripe to swap the price, with the days so far billed at the old plan’s rate; the organization’s plan changes when Stripe’s webhook says the subscription has, as it does for a new one. Starting a subscription is checkout’s, and ending one the customer portal’s.

org
required
string

Organization slug.

Media typeapplication/json
object
plan
required

team or business.

string
Examplegenerated
{
"plan": "example"
}

Asked of Stripe; the plan changes when its webhook arrives.

Not team, business or enterprise.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No session.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Only an owner, in person, manages billing.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No such organization, or not yours.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No live subscription to change (no-subscription), or already on that plan (same-plan).

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Over the organization’s request limit. Retry-After says when to try again; RateLimit-Limit is the burst.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

This deployment takes no payments (billing-unavailable).

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}