https://app.evoriqa.com/api/v1/reseller/clients/{workspaceId}/planChange a client's plan
Moves a resold client to another catalog plan — `free`, `starter` or `pro` (Business isn't offered to resold clients). The new plan's limits and features apply at once; the platform doesn't bill for it. Moving up from Free turns credit metering on and brings back bots the old plan auto-suspended; moving to Free leaves credit metering as it was. A same-plan call is a no-op. A real change is audited on the client with `from` and `to`. Rejected 422 when: the client is billed on a live BYO Stripe client plan (change that plan instead); a chatbot or team-seat override is above the new plan (lower it first); the client's usage is over the new plan's limits (the message names each count); or the new plan's knowledge-source allotment (or the client's own source override) doesn't fit the org's pool — a change that doesn't grow the allotment is never refused. A workspace that isn't a live client of the organization returns 403. Requires an active reseller plan. Reseller endpoints additionally require the key to live on the organization owner's own (primary) workspace — any other workspace returns 403.
Requires scope reseller:write
Access is gated — enable it before your first call
The API is off by default. A request succeeds only when all three switches are on: the platform master switch (off by default), your organisation’s API toggle, and your plan or client entitlement. Any one off returns 403 API access is not enabled for this workspace.
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
| workspaceId | path | string uuid | Required | — | The client workspace's id. |
Request body
Content type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
| plan | string one of free · starter · pro | Required | The plan to move the client to. |
Request
curl -X POST "https://app.evoriqa.com/api/v1/reseller/clients/{workspaceId}/plan" \
-H "x-api-key: $EVORIQA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "plan": "starter" }'const res = await fetch("https://app.evoriqa.com/api/v1/reseller/clients/{workspaceId}/plan", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.EVORIQA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"plan": "starter"
}),
});
const responseBody = await res.json();import os
import requests
res = requests.post(
"https://app.evoriqa.com/api/v1/reseller/clients/{workspaceId}/plan",
headers={"Authorization": f"Bearer {os.environ['EVORIQA_API_KEY']}"},
json={
"plan": "starter"
},
)
body = res.json()Response
{
"success": true,
"data": {
"workspaceId": "d4c3b2a1-0f9e-4d8c-8b7a-6f5e4d3c2b1a",
"plan": "starter"
}
}