Update sub-account settings
Merge keys into the sub-account's settings object. Keys you send overwrite existing ones; keys you don't send are kept.
PATCH
https://api.centerfy.ai/webhooks/inbound/agency/sub-accounts/:id Headers
| Header | Required | Value | Description |
|---|---|---|---|
x-api-key | Yes | your agency API key (cfy_…) | Agency (organization-wide) API key, created in the agency workspace under Settings → API Keys (“Agency API Keys”; the tab only appears on White Label or SaaS Mode plans). Or send Authorization: Bearer <key>; x-api-key wins if both are present. Keys must start with cfy_. A sub-account key is rejected with 401. |
Content-Type | Yes | application/json | The request body is JSON. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes | The sub-account id. Must belong to the key’s agency and not be deleted. |
Body parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
settings | object | Yes | — | Free-form keys to merge into settings. wallet_balance is always dropped, so this endpoint can never move money. |
Request body
{
"settings": {
"timezone": "America/Chicago",
"monthly_credit_amount": 25
}
}Example
curl -X PATCH "https://api.centerfy.ai/webhooks/inbound/agency/sub-accounts/{id}" \
-H "x-api-key: $CENTERFY_AGENCY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"settings": {
"timezone": "America/Chicago",
"monthly_credit_amount": 25
}
}' import { CenterfyAgencyClient } from "@centerfy/sdk";
const agency = new CenterfyAgencyClient({ apiKey: process.env.CENTERFY_AGENCY_API_KEY! });
const result = await agency.subAccounts.update("<subAccountId>", {
"settings": {
"timezone": "America/Chicago",
"monthly_credit_amount": 25
}
});
console.log(result); centerfy --agency subAccounts update <subAccountId> '{"settings":{"timezone":"America/Chicago","monthly_credit_amount":25}}' MCP tool: centerfy_agency_sub_accounts_update (see MCP server)
Response
{
"status": "success",
"sub_account": {
"id": "5a1f3c2e-8b4d-4e6f-9a7b-1c2d3e4f5a01",
"name": "Acme Roofing",
"slug": "acme-roofing",
"parent_sub_account_id": null,
"is_active": true,
"archived_at": null,
"paused_reason": null,
"paused_at": null,
"paused_note": null,
"subscription_plan": "starter",
"subscription_status": "active",
"max_users": 10,
"max_contacts": 1000,
"created_at": "2026-09-14T15:20:00.000Z",
"updated_at": "2026-10-06T12:00:00.000Z",
"features": {
"crm_integration_enabled": true,
"ai_agents_enabled": true,
"workflows_enabled": true,
"invoicing_enabled": false,
"email_integration_enabled": true,
"phone_integration_enabled": true,
"llm_integration_enabled": false
},
"settings": {
"rebilling_enabled": true,
"monthly_credit_amount": 25,
"timezone": "America/Chicago"
}
}
}Errors
400— if settings is missing or contains nothing but wallet_balance.404— when the sub-account id is not a uuid, does not exist, is deleted, or belongs to another agency.401— when the key is missing, not cfy_-prefixed or unknown (including sub-account keys); 403 when the agency is not on a White Label or SaaS Mode plan; 429 above 50 requests per minute per agency (Retry-After header set); 500 ‘database error’ on an internal failure.
Notes
Only settings can be changed; name, limits and features are not writable here.