Skip to main content

plan_not_eligible

API access is an entitlement of the workspace’s plan. Advanced and Business are the plans sold with it; Enterprise, the grandfathered Agency tier and admin-assigned Trial workspaces carry the same entitlement. On every other tier — Free, Solo, and the grandfathered Starter and Pro tiers — every API call, including /v1/workspaces/me, returns this code. A workspace an agency pays for carries the agency’s plan. The gate resolves the plan the way the dashboard does: the customer that pays for the workspace first (an agency’s Business subscription, for a client workspace it manages), the workspace’s own customer record second. So a member of an agency-managed client workspace who connects from that workspace gets the same entitlement the dashboard shows them, and the agency owner’s own connection still inherits the agency plan when it switches into a client workspace. The refusal names the workspace it judged (details.workspaceId), which for an OAuth connection is the workspace chosen on the consent screen, so a member of several workspaces can tell which one was read. A single tool can also be plan-locked while the rest of the surface works. The error then names the missing feature rather than API access: update_global_tone_of_voice, for example, needs companyToneOfVoice (Business and above). MCP keeps such a tool listed and returns this error when it is called, because hosts cache the tool list for the whole session — see MCP tools §2. Upgrading is the only fix; the per-tool locks follow the same plan matrix as the dashboard. If your workspace recently downgraded, all live keys for the workspace were invalidated synchronously when the Stripe webhook fired. Upgrading re-enables the existing key rows; you don’t need to mint new keys. To recover:
  1. Open the dashboard and visit Settings → Billing.
  2. Upgrade to a plan that carries apiAccess — Advanced or Business are the ones you can buy directly.
  3. Retry the request — propagation is immediate after the upgrade webhook lands (within a few seconds in normal operation).
The gate reads the plan recorded on the workspace’s customer record, which Scripe’s billing webhooks keep up to date — it never consults the Stripe subscription’s live status. A subscription in Stripe’s dunning (past_due) keeps its plan and API access until Stripe cancels it. If the workspace is on a plan that carries API access and you still see this code, the record has not caught up with the upgrade yet; wait a few seconds and retry, and contact support if it persists.