Users
Model
Fields
Field | Type | Description |
|---|---|---|
object | "user" | |
name | string | |
email | string | |
id | string | |
default_team_id | string | null | The team the user lands in at sign-in; null falls back to the first team they belong to. |
created_at | | |
updated_at | | |
last_active_at | | null | When the user last made an authenticated request. Updated at most once every few minutes. |
profile_url | string | null | URL of the user's avatar image; null when none is set. |
role | | null | The user's role on the team the request is scoped to; null when they have none. |
status | | blocked and locked accounts cannot act; waitlisted accounts signed up but have not been
granted access yet. |
default_auth_method | | The sign-in method preselected for the user. |
available_auth_methods | [] | The sign-in methods enabled on the account. |
is_totp_enabled | boolean | Whether an authenticator app is set up for two-factor sign-in. |
totp_backup_codes_count | number | How many unused two-factor backup codes remain. |
totp_default_count | number | How many backup codes a full set contains, for showing "N of M remaining". |
password_updated_at | | null | When the password was last changed; null when password sign-in is not enabled. |
monitor_auto_subscribe | boolean | Whether the user is automatically subscribed to alert emails for monitors newly created in their team. |
monitor_cooloff_minutes | number | Minimum minutes between alert emails about the same monitor. |
product_update_notifications | boolean | Whether the user receives product update emails. |
appearance_palette | string | Color palette the dashboard renders in for this user. |
appearance_type_set | string | Font pairing the dashboard uses. |
appearance_accent | string | Accent color the dashboard uses. |
appearance_scale | string | Interface density preference. Applied to dashboard content at tablet and desktop widths; phones always render at full size. |
default_ai_model | | null | Selection a new chat opens on. Null when no preference is set. An unavailable saved selection requires an explicit replacement; it never silently changes the payer. |
default_ai_effort | | How hard the assistant is asked to work on each turn by default. |
List Users
Endpoint
Retrieve a list of users in the current team.
/v1/users Query Parameters
Field | Type | Description |
|---|---|---|
order_by | string | Field used to order the users. Defaults to "name". Accepted values: "created_at","name". |
name | TextFilter | Filter by display name. Accepts a filter operator, for example contains:ada or starts_with:ada. |
status | | Filter by status. Accepts a filter operator, for example in:active,blocked. |
limit | number | Maximum number of items to return. Defaults to 25. Minimum: 1. Maximum: 200. |
after | string | Cursor from pagination.next_cursor of a previous response. Returns the resources after that page. |
before | string | Cursor from pagination.prev_cursor of a previous response. Returns the resources before that page. |
sort | string | Sort direction for the result set. Defaults to "desc". Accepted values: "asc","desc". |
Comments
afterandbeforeare mutually exclusive.
Response
{
message: string;
data: User[];
status: 200;
error: null;
pagination: Pagination;
endpoint: string;
} Retrieve User
Endpoint
Retrieve a single user.
/v1/users/:user_id Path Parameters
Field | Type | Description |
|---|---|---|
user_id | string | Unique identifier of the user. |
Comments
- You can retrieve your own user, or a user who is a member of your team.
Response
{
message: string;
data: User;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Update User
Endpoint
Update a user's profile and preferences.
/v1/users/:user_id Path Parameters
Field | Type | Description |
|---|---|---|
user_id | string | Unique identifier of the user. |
Request Body
Field | Type | Requirement | Description |
|---|---|---|---|
name | string | Optional | Display name for the user. Minimum length: 2. Maximum length: 60. |
default_team_id | string | Optional | ID of the team the user lands in after signing in. |
profile_url | string | Optional | Profile image as a JPEG or PNG base64 data URI. |
email | string (email) | Optional | Email address of the user. |
monitor_auto_subscribe | boolean | Optional | Whether the user is subscribed to new monitors automatically. |
monitor_cooloff_minutes | integer | Optional | Minutes to wait before sending another notification for the same monitor. Between 30 and 1440. Minimum: 30. Maximum: 1440. |
product_update_notifications | boolean | Optional | Whether the user receives product update emails. |
appearance_palette | string | Optional | Color palette used by the dashboard. Accepted values: "light","dark","dim","midnight","paper". |
appearance_type_set | string | Optional | Font pairing used by the dashboard. Accepted values: "system","grotesk","editorial","geometric". |
appearance_accent | string | Optional | Accent color used by the dashboard. Accepted values: "orange","azure","burgundy","ink","emerald","violet". |
appearance_scale | string | Optional | Interface density used by the dashboard. Accepted values: "comfortable","cozy","compact". |
default_ai_model | | Optional | Model a new chat opens on. Null clears the preference. An unavailable selection asks the member to choose again; it never changes who pays automatically. |
default_ai_effort | | Optional | How hard the assistant is asked to work on each turn by default. |
role_id | string | Optional | ID of the role that grants the user their permissions. |
default_auth_method | | Optional | Method the user signs in with by default. |
status | | Optional | Status of the user. |
Comments
- You can only update your own profile.
emailcannot be changed here. Sending a different address returns an error.role_idandstatusare ignored here. Manage a user's role through the team endpoints.default_team_idmust be a team the user is already a member of.- Setting
default_auth_methodtopasswordrequires password authentication and MFA to be enabled first. profile_urlimages must be at least 256x256 pixels. They are resized and stored as PNG, and the response returns the hosted image URL.profile_urlimages must not exceed 5 MB.
Response
{
message: string;
data: User;
status: 200;
error: null;
pagination: null;
endpoint: string;
} Enable Password Authentication
Endpoint
Enable password authentication for a user.
/v1/users/:user_id/enable_password Path Parameters
Field | Type | Description |
|---|---|---|
user_id | string | Unique identifier of the user. |
Comments
- You can only enable password authentication for your own user.
- MFA must be enabled before password authentication can be turned on.
Response
{
message: string;
data: null;
status: 200;
error: null;
pagination: null;
endpoint: string;
} List User Teams
Endpoint
Retrieve a list of teams a user belongs to.
/v1/users/:user_id/teams Path Parameters
Field | Type | Description |
|---|---|---|
user_id | string | Unique identifier of the user. |
Query Parameters
Field | Type | Description |
|---|---|---|
order_by | string | Field used to order the teams. Defaults to "name". Accepted values: "created_at","name". |
name | TextFilter | Filter by team name, written as operator:value. For example contains:acme or equals:Acme Inc. |
status | | Filter by team status, written as operator:value. For example equals:active or in:active,delinquent. |
billing_plan | | Filter by billing plan, written as operator:value. For example in:pro_v1,enterprise_v1. |
created_at | DateFilter | Filter by creation date, written as operator:value. For example gt:2026-01-01 or between:2026-01-01,2026-02-01. |
deleted_at | NullableDateFilter | Filter by scheduled deletion date. Use null for teams that are not scheduled for deletion, not:null for teams that are. |
limit | number | Maximum number of items to return. Defaults to 25. Minimum: 1. Maximum: 200. |
after | string | Cursor from pagination.next_cursor of a previous response. Returns the resources after that page. |
before | string | Cursor from pagination.prev_cursor of a previous response. Returns the resources before that page. |
sort | string | Sort direction for the result set. Defaults to "desc". Accepted values: "asc","desc". |
Comments
- You can only list your own teams.
afterandbeforeare mutually exclusive.
Response
{
message: string;
data: Team[];
status: 200;
error: null;
pagination: Pagination;
endpoint: string;
} Referenced Types
TextFilter
Text filters use operator:value, for example ?name=contains:acme. Supported operators are equals, not_equals, contains, not_contains, starts_with, not_starts_with, ends_with, not_ends_with, in, not_in, exists and not_exists. Comma-separate the values of in and not_in, as in in:acme,globex.
DateFilter
Date filters use operator:value with an ISO 8601 date, for example ?created_at=gt:2026-01-01. Supported operators are gt, lt and between, and between takes two comma-separated dates. The named ranges today, yesterday, this_month and last_month are also accepted in place of an operator.
NullableDateFilter
Nullable date filters accept everything a date filter accepts, plus null to match records where the field is unset and not:null to match records where it is set.
ISODateString
An ISO 8601 date-time string returned at the JSON API boundary.
Scope
ScopeValue
UserStatus
AuthMethod
AiChatSelection
An explicit choice of Tailglow-managed access or a model using the member's own key.
AiEffortLevel
How hard a model works on a turn. A model that accepts a narrower range declares it in
AI_MODEL_CONFIGS[model].efforts.