List sub-accounts
List the agency's sub-accounts, newest first. Deleted sub-accounts are never returned.
GET
https://api.centerfy.ai/webhooks/inbound/agency/sub-accounts 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. |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
limit | integer | No | 50 | Page size; minimum 1, maximum 100 (larger values are rejected with 400). |
offset | integer | No | 0 | Number of records to skip for paging; minimum 0. |
archived | boolean | No | — | true = only archived, false = only not archived. Omit for both. |
paused | boolean | No | — | true = only paused (any reason), false = only not paused. Omit for both. |
search | string | No | — | Case-insensitive substring match on the name (max 200 characters; % _ and \ are ignored). |
Example
curl -X GET "https://api.centerfy.ai/webhooks/inbound/agency/sub-accounts?limit=50&offset=0" \
-H "x-api-key: $CENTERFY_AGENCY_API_KEY" import { CenterfyAgencyClient } from "@centerfy/sdk";
const agency = new CenterfyAgencyClient({ apiKey: process.env.CENTERFY_AGENCY_API_KEY! });
const result = await agency.subAccounts.list({
"limit": 50,
"offset": 0
});
console.log(result); centerfy --agency subAccounts list '{"limit":50,"offset":0}' MCP tool: centerfy_agency_sub_accounts_list (see MCP server)
Response
{
"status": "success",
"total": 2,
"limit": 50,
"offset": 0,
"has_more": false,
"sub_accounts": [
{
"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-01T09:00:00.000Z"
},
{
"id": "7c3b5e40-ad6f-4081-9c2d-3e4f5a6b7c03",
"name": "Bayview Dental",
"slug": "bayview-dental",
"parent_sub_account_id": null,
"is_active": true,
"archived_at": null,
"paused_reason": "manual_agency",
"paused_at": "2026-10-03T08:00:00.000Z",
"paused_note": "Invoice overdue",
"subscription_plan": null,
"subscription_status": null,
"max_users": 10,
"max_contacts": 1000,
"created_at": "2026-08-20T10:00:00.000Z",
"updated_at": "2026-10-03T08:00:00.000Z"
}
]
}Errors
400— if a query value fails validation.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
List rows omit features and settings — use Get a sub-account for those.