Skip to content

Ask for a paid tier

POST
/v1/tier-requests
curl --request POST \
--url https://beta-api.plune.ai/v1/tier-requests \
--header 'Content-Type: application/json' \
--cookie plune_session=<plune_session> \
--data '{ "tier": "team", "companyId": "6f1c2b3a-0000-4000-8000-0000000000a5" }'

Until payment is there (#1055), choosing a plan is a request the operator switches on by hand (#2121): it waits in the operator’s queue (GET /v1/admin/tier-requests) and the owners of this Plune are told by mail — who asks, for which tier, for whom. Personal is for the account of the session; Team and Enterprise are for a company, named by companyId (ADR 0049 TR1, as a grant of them is). Only the owner of a company asks for its tier: a member is told 403 owner_only, and a company the caller is not in, or one in the Bin, is the 404 of an id nobody has. A grant of the tier (POST /v1/admin/tier-grants) closes the request as done by itself. One open request a subject and tier: asking again answers the open one with 200, writes nothing and sends no second letter. With no mail set up, or a letter that does not go, the request is kept all the same. The session alone: an API token gets 403 session_required. Ten calls a minute.

Media type application/json

Personal is the account’s own and takes no company; Team and Enterprise are a company’s and name it, as their grants do. Only the owner of a company asks for its tier.

object
tier
required
string
Allowed values: personal team enterprise
companyId

The company the tier is for. Left out, the tier is for the account of the session.

string
<= 100 characters
Examples

Team for a company one owns

{
"tier": "team",
"companyId": "6f1c2b3a-0000-4000-8000-0000000000a5"
}

The open request of the same subject and tier, already there; nothing written, nobody told again

Media type application/json
object
request
required

A request for a paid tier (#2121), until payment is there. open waits for the operator; done once the tier was switched on by hand, declined otherwise.

object
id
required
string format: uuid
tier
required
string
Allowed values: personal team enterprise
subject
required
object
kind
required
string
Allowed values: user company
id
required
string
status
required
string
Allowed values: open done declined
createdAt
required
string format: date-time
Example
{
"request": {
"id": "6f1c2b3a-0000-4000-8000-0000000000f6",
"tier": "team",
"subject": {
"kind": "company",
"id": "6f1c2b3a-0000-4000-8000-0000000000a5"
},
"status": "open",
"createdAt": "2026-09-16T09:12:04.151Z"
}
}

A new request, in the queue; the operator is told

Media type application/json
object
request
required

A request for a paid tier (#2121), until payment is there. open waits for the operator; done once the tier was switched on by hand, declined otherwise.

object
id
required
string format: uuid
tier
required
string
Allowed values: personal team enterprise
subject
required
object
kind
required
string
Allowed values: user company
id
required
string
status
required
string
Allowed values: open done declined
createdAt
required
string format: date-time
Example
{
"request": {
"id": "6f1c2b3a-0000-4000-8000-0000000000f6",
"tier": "team",
"subject": {
"kind": "company",
"id": "6f1c2b3a-0000-4000-8000-0000000000a5"
},
"status": "open",
"createdAt": "2026-09-16T09:12:04.151Z"
}
}

Not JSON, a tier that is not paid, Team or Enterprise without a company, or Personal with one

Media type application/json
object
error
required
string
Example
{
"error": "validation failed — companyId: team belongs to a company: name it"
}

No / invalid session

An API token, or a member of the company who is not its owner

Media type application/json
object
error
required
string
Examples
{
"error": "a plan is asked for from the signed-in session — an API token cannot",
"code": "session_required"
}

A company the caller is not in, or one in the Bin

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

Rate-limited: the per-route throttle, or the per-minute request limit of the plan an API token counts by (#1442; the body names the plan, #2092). Retry-After carries the seconds until the window rolls over.

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}
Retry-After
integer

Seconds until the window rolls over