Organization
An Organization is the top-level tenant boundary in Cirrus. Every user, deal, account, contact, meeting, and Q&A belongs to exactly one org. Every Platform API token is scoped to exactly one org.
Returned by the endpoints under /api/v1alpha1/organizations and referenced by other resources' orgId field.
The Organization schema
{
"id": "org_...",
"name": "Acme Corporation",
"primaryEmailDomain": "acme.com",
"emailDomains": ["acme.com", "acme.co.uk"],
"administrator": {
"userId": "usr_...",
"displayName": "Sam Chen"
},
"industry": "SaaS",
"employeeCount": 1250,
"logoUrl": "https://cdn.example.com/orgs/org_....png",
"sourceRefs": {
"salesforce": {
"orgId": "00D1U000000abcXYZ"
}
},
"createdAt": "2024-03-15T00:00:00Z",
"updatedAt": "2026-07-14T09:30:00Z"
}Fields
id string
Organization id, prefixed org_. Same encoding surfaced across Cortex + scheduling + identity responses.
name string
Display name. Mutable via PATCH.
primaryEmailDomain string
The canonical email domain used for invitation flows and default-org resolution. Must be one of the entries in emailDomains[]. Mutable via PATCH — the new value must already be a verified domain.
emailDomains list
All verified domains that resolve to this org. Adding new domains requires DNS verification (an interactive dashboard flow with TXT-record challenges); not exposed via the Platform API.
administrator object
The org's contractual owner — billing contact, signatory, dashboard super-admin. Lightweight {userId, displayName} reference.
| Attribute | Type | Description |
|---|---|---|
userId | string | The administrator's user id, prefixed usr_. |
displayName | string | Denormalised for convenience. |
Not mutable via PATCH. Transferring org ownership is a two-step confirmation flow that lives in the dashboard.
Other users with the Administrator role (there may be many) are not this field — this is specifically the contractual owner. Query all Administrators via GET /users?role=Administrator.
industry string
Free-text, aligned with Cortex's account industry taxonomy. Mutable via PATCH.
employeeCount number
1–1,000,000. Mutable via PATCH.
logoUrl string
Public CDN URL for the org's logo. null when unset.
sourceRefs object
External-system references. Present only when the org has connected the corresponding integration.
| Attribute | Type | Description |
|---|---|---|
salesforce.orgId | string | Linked Salesforce Organization id. Raw Salesforce id, not wrapped in an org_ prefix. |
createdAt, updatedAt string
ISO 8601 UTC.
Entitlements
Feature entitlements and seat counts are exposed on a separate sub-resource because they have their own cache TTL (bill-driven, not profile-driven). See GET /organizations/me/entitlements.
features.{name} boolean
Stable, documented enum. Reading features.smartScheduling on a token issued today will still work in six months. New features get added with a documented available_since date; retired features stay as false for one major version before being removed.
Current keys: smartScheduling, teamCalendarScheduling, replyTracking, emailBlast, cortexApp, meetingAi.
seats object
| Attribute | Type | Description |
|---|---|---|
total | number | Org's current seat cap. |
used | number | Active users + pending invites. |
available | number | total - used. Preflight this before calling POST /users. |
licenseTier object
| Attribute | Type | Description |
|---|---|---|
slug | string | Coarse-grained tier: free, starter, professional, enterprise. Partners key on slug. |
name | string | Display name. |
For per-feature capability checks, read features.{name} — don't infer from tier.
asOf string
ISO 8601 UTC. Timestamp of the underlying license snapshot. Entitlements are cached with Cache-Control: private, max-age=60.
{
"orgId": "org_...",
"features": {
"smartScheduling": true,
"teamCalendarScheduling": true,
"replyTracking": true,
"emailBlast": false,
"cortexApp": true,
"meetingAi": true
},
"seats": {
"total": 25,
"used": 18,
"available": 7
},
"licenseTier": {
"slug": "professional",
"name": "Professional"
},
"asOf": "2026-08-20T15:00:00Z"
}