Plans & frozen workspaces
Plan requirements for API access and what happens when a workspace is frozen.
Plan requirement
API access requires the Studio plan or above. Requests from workspaces on lower plans return:
{
"error": "API access requires the Studio plan or above.",
"code": "plan_required",
"feature": "api",
"currentPlan": "free",
"requiredPlan": "studio",
"upgradeUrl": "https://usekwill.com/settings/billing/upgrade"
}API keys can only be created by users with the admin role. See Authentication.
Frozen workspaces
A workspace becomes frozen when a payment fails or a billing issue is not resolved within the grace period. Frozen workspaces have restricted write access:
| Operation | Frozen behaviour |
|---|---|
GET (any resource) | Works normally — reads are always allowed. |
POST, PATCH | Returns 403 with "account_frozen". |
DELETE (most) | Returns 403 with "account_frozen". |
DELETE /webhooks/{id} | Allowed — you can clean up webhook registrations even while frozen. |
Webhooks during a freeze
Webhook events are not emitted while a workspace is frozen. There is no backfill — events that would have fired during the freeze are lost. Once the workspace is unfrozen, new events fire as normal.
Detecting a freeze in code
const res = await fetch('https://usekwill.com/api/v1/projects', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.KWILL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ name: 'New Project' }),
});
if (res.status === 403) {
const body = await res.json();
if (body.code === 'account_frozen') {
// Alert your ops team — billing action required
console.error('Workspace is frozen. Resolve billing to resume writes.');
}
}Unfreezing
Resolve the billing issue in Settings → Billing. The workspace unfreezes immediately after payment succeeds, and writes are restored without any further action.