User
A User represents a human member of a Cirrus organization. Every user belongs to exactly one org.
Returned by the endpoints under /api/v1alpha1/users and referenced by other resources' owner.userId, host.userId, hostId, and invitedBy.userId fields.
The User schema
{
"id": "usr_...",
"orgId": "org_...",
"email": "alex@example.com",
"firstName": "Alex",
"lastName": "Rivera",
"displayName": "Alex Rivera",
"title": "Director of Sales Ops",
"department": "Revenue Operations",
"phoneNumber": "+1-415-555-0199",
"profileImageUrl": "https://cdn.example.com/avatars/usr_....png",
"role": "Admin",
"active": true,
"invitationStatus": "accepted",
"invitedBy": {
"userId": "usr_...",
"displayName": "Sam Chen"
},
"invitedAt": "2026-05-01T12:00:00Z",
"lastLoginAt": "2026-08-19T14:22:00Z",
"twoFactorEnabled": true,
"sourceRefs": {
"salesforce": {
"userId": "0051U00000abcXYZ"
}
},
"createdAt": "2026-05-01T12:00:00Z",
"updatedAt": "2026-07-14T09:30:00Z"
}Fields
id string
User id, prefixed usr_.
orgId string
The organization this user belongs to, prefixed org_. Always matches the caller's token org context — cross-org users are never returned.
email string
Canonical email. Lower-cased server-side. Not mutable via PATCH — email changes are a security-sensitive dashboard flow.
firstName, lastName string
May be null on freshly invited users who haven't completed signup.
displayName string
Derived — "{firstName} {lastName}" when both are set, else email. Convenient for tables and cards.
title, department, phoneNumber string
Optional profile fields. Any may be null. Mutable via PATCH.
profileImageUrl string
Public CDN URL. Hotlinkable. null when the user hasn't uploaded an avatar.
role string
The user's role. One of:
| Value | Meaning |
|---|---|
User | Standard org member. |
Admin | Organization administrator. Can manage users, settings, and integrations. |
Partner Admin | Additional role available only on partner-admin organizations. Grants delegation over child orgs — see Partner Delegation. |
Mutable via PATCH. Setting role to Partner Admin on a non-partner-admin org returns 400 invalid-role.
active boolean
true — user can log in and tokens issued to them are valid. false — soft-deactivated; row preserved, tokens invalidated, existing bookings still resolve. Reactivation restores the user's role as it was at deactivation.
invitationStatus string
accepted— user has set a password and logged in at least once.pending— invitation has been sent; user hasn't completed signup yet. Still counts against the org's seat cap.expired— invitation link is older than 14 days. Deactivate and re-invite to recover.
invitedBy object
Who issued the invitation. null on users who existed before invitation-tracking was added (grandfathered).
| Attribute | Type | Description |
|---|---|---|
userId | string | The inviting user's id. |
displayName | string | Denormalised display name at invite time. |
invitedAt string
ISO 8601 UTC. When the invitation was issued. null for grandfathered users.
lastLoginAt string
ISO 8601 UTC. null for users who've never logged in (pending invites, freshly-created accounts).
twoFactorEnabled boolean
Read-only externally. Enrolment is a dashboard flow.
sourceRefs object
External-system references. Present only when the user has connected the corresponding integration.
| Attribute | Type | Description |
|---|---|---|
salesforce.userId | string | Linked Salesforce User id. Raw Salesforce id, not wrapped in a usr_ prefix. |
createdAt, updatedAt string
ISO 8601 UTC.
Related models
- Organization — parent object. Every user has exactly one
orgId. - Deal —
owner.userIdreferences aUser. - Meeting —
host.userIdreferences aUser. - Transcript —
hostIdand speaker matches reference aUser.