Grant a user a plan
Puts the account on a rung of the infra ladder. Needs the admin role. PUT because an account is on exactly one rung at a time, but the change is recorded rather than overwritten: the plan history is append-only and the newest line is the account's plan. Setting the rung it already holds still writes a line — a re-confirmation is an act worth a record, and the reason given with it would otherwise have nowhere to go. Read the history back with GET on this path. An upgrade takes effect at once. A downgrade is the same call with a lower rung and takes effect when the month turns: until then plan stays the rung held and next_plan names the new one. At the turn, active channels past the new rung's allowance are disabled, oldest first; an upgrade re-enables them. A rung whose content-retention window a contract sets — enterprise — requires retention_days, since nothing else can answer what that window is and an unanswered one bounds nothing. Every other rung sets its own and refuses the field.
Request
- Base URL: https://api.naturali.ai
- URL: https://api.naturali.ai/v1/admin/users/{user_id}/plan
- Auth: one of:
- HTTP bearer
- OAuth 2 (authorization code, authorization URL https://api.naturali.ai/authorize, token URL https://api.naturali.ai/token, scopes: mcp:access)
Path parameters
Request body
Example request
{
"plan": "business",
"retention_days": 365,
"reason": "annual contract"
}Response
The account, on its new plan.
Example response
{
"id": "user_V1StGXR8Z5jdHi6B",
"email": "ana@acme.com",
"name": "Ana Silva",
"email_verified": true,
"roles": [],
"usage_alerts": true,
"created_at": "2026-07-17T00:00:00.000Z",
"plan": "business",
"next_plan": "pro",
"retention_days": 90,
"credit_balance_usd": 25,
"spend_reconciled_at": "2026-07-17T00:15:00.000Z",
"storage": {
"used": 12.4137,
"limit": 30,
"sampled_at": "2026-07-17T00:15:00.000Z"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.