Ask for a paid tier
const url = 'https://beta-api.plune.ai/v1/tier-requests';const options = { method: 'POST', headers: { cookie: 'plune_session=<plune_session>', 'Content-Type': 'application/json' }, body: '{"tier":"team","companyId":"6f1c2b3a-0000-4000-8000-0000000000a5"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations ”Request Body required
Section titled “Request Body required ”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
The company the tier is for. Left out, the tier is for the account of the session.
Examples
Team for a company one owns
{ "tier": "team", "companyId": "6f1c2b3a-0000-4000-8000-0000000000a5"}Personal for one’s own account
{ "tier": "personal"}Enterprise for a company one owns
{ "tier": "enterprise", "companyId": "6f1c2b3a-0000-4000-8000-0000000000a5"}Responses
Section titled “ Responses ”The open request of the same subject and tier, already there; nothing written, nobody told again
object
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
object
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
object
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
object
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
object
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
object
Examples
{ "error": "a plan is asked for from the signed-in session — an API token cannot", "code": "session_required"}{ "error": "only the owner of the company asks for its plan", "code": "owner_only"}A company the caller is not in, or one in the Bin
object
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.
object
Example generated
{ "error": "example"}Headers
Section titled “Headers ”Seconds until the window rolls over