Learn how to read, add, and delete monday users via the platform API
Every monday.com user belongs to an account or organization and is assigned a role, such as admin, member, viewer, guest, subscriber, board owner, or a custom role. Each user also has a unique profile containing their user details and permissions.
Queries
You can use the users query to retrieve user data via the API.
- Required scope: users:read
- Returns an array containing metadata about one or multiple users
- Can be queried directly at the root or nested within a teamsquery (returns users from a specific team)
query {
  users(limit: 50) {
    created_at
    email
    account {
      name
      id
    }
  }
}const GET_USERS = "query { users (limit: 50) { created_at email account { name id }}}";
const seamlessApiClient = new SeamlessApiClient("2025-04");
const response = await seamlessApiClient.request(GET_USERS)Arguments
You can use the following arguments to reduce the number of results returned in your users query.
| Argument | Description | Enum Values | 
|---|---|---|
| emails  | The specific user emails to return. | |
| ids  | The unique identifier of the specific users to return. | |
| kind  | The kind of users you want to search by. | 
 | 
| limit  | The number of users to get. | |
| name  | A fuzzy search of users by name. | |
| newest_first  | Lists the most recently created users at the top. | |
| non_active  | Returns the account's non-active users. | |
| page  | The page number to return. Starts at 1. | 
Fields
You can use the following fields to specify what information your users query will return. Some fields support their own subfields.
| Field | Field description | Supported Subfields | 
|---|---|---|
| account  | The user's account. | |
| birthday  | The user's date of birth. Returned as YYYY-MM-DD. | |
| country_code  | The user's country code. | |
| created_at  | The user's creation date. Returned as YYYY-MM-DD. | |
| current_language  | The user's language. | |
| custom_field_metas  | The user profile custom fields metadata. | description  | 
| custom_field_values  | The user profile custom field values. | custom_field_meta_id  | 
| email  | The user's email. | |
| enabled  | Whether the user is enabled. | |
| greeting  | The user's greeting. | |
| id  | The user's unique identifier. | |
| is_admin  | Whether the user is an admin. | |
| is_guest  | Whether the user is a guest. | |
| is_pending  | Whether the user hasn't confirmed their email yet. | |
| is_view_only  | Whether the user is a viewer. | |
| is_verified  | Whether the user verified their email. | |
| join_date  | The date the user joined the account. Returned as YYYY-MM-DD. | |
| last_activity  | The last date and time the user was active. Returned as YYYY-MM-DDT00:00:00. | |
| location  | The user's location. | |
| mobile_phone  | The user's mobile phone number. | |
| name  | The user's name. | |
| out_of_office  | The user's out-of-office status. | active  | 
| phone  | The user's phone number. | |
| photo_original  | Returns the URL of the user's uploaded photo in its original size. | |
| photo_small  | Returns the URL of the user's uploaded photo in a small size (150x150 px). | |
| photo_thumb  | Returns the URL of the user's uploaded photo in thumbnail size (100x100 px). | |
| photo_thumb_small  | Returns the URL of the user's uploaded photo in a small thumbnail size (50x50 px). | |
| photo_tiny  | Returns the URL of the user's uploaded photo in tiny size (30x30 px). | |
| sign_up_product_kind  | The product the user first signed up to. | |
| teams  | The user's teams. | |
| time_zone_identifier  | The user's timezone identifier. | |
| title  | The user's title. | |
| url  | The user's profile URL. | |
| utc_hours_diff  | The user’s UTC hours difference. | 
Mutations
The API allows you to update users using the following mutations.
Add users to board
Required scope: boards:write
The add_users_to_board mutation adds users to a board via the API. You can specify which fields to return in the mutation response.
mutation {
  add_users_to_board(
    board_id: 1234567890
    user_ids: [
      123456
      234567
      345678
    ] 
    kind: owner
  ) {
    id
  }
}Arguments
You can use the following arguments to define which users to add to the board and their roles.
| Argument | Description | Enum Values | 
|---|---|---|
| board_id  | The board's unique identifier. | |
| kind  | The user's role. | 
 | 
| user_ids  | The users' unique identifiers. | 
Add users to team
The add_users_to_team mutation adds users to a team via the API. It returns the ChangeTeamMembershipResult type which allows you to specify which fields to return in the mutation response.
mutation {
  add_users_to_team(
    team_id: 7654321
    user_ids: [
      123456
      654321
      12345
    ]
  ) {
    successful_users {
      name
      email
    }
    failed_users {
      name
      email
    }
  }
}Arguments
You can use the following arguments to specify which users to add to the team.
| Argument | Description | 
|---|---|
| team_id ID! | The team's unique identifier. | 
| user_ids [ID!]! | The users' unique identifiers. | 
Add users to workspace
Required scope: workspaces:write
The add_users_to_workspace mutation adds users to a workspace via the API. You can specify which fields to return in the mutation response.
mutation {
  add_users_to_workspace(
    workspace_id: 1234567
    user_ids: [
      123456
      654321
      987654
    ] 
    kind: subscriber
	) {
    id
  }
}let query = "mutation { add_users_to_workspace (workspace_id: 1234567, user_ids: [123456, 654321, 012345], kind: subscriber) { id } }";
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following arguments to define which users to add to the workspace and their roles.
| Arguments | Description | Enum Values | 
|---|---|---|
| kind WorkspaceSubscriberKind | The user's role. | ownersubscriber | 
| user_ids [ID!]! | The users' unique identifiers. | |
| workspace_id ID! | The workspace's unique identifier. | 
Activate users
The activate_users mutation activates or reactivates users in a monday.com account via the API. It returns the ActivateUsersResult type which allows you to specify which fields to return in the mutation response.
mutation {
  activate_users(
    user_ids: [
      54321
      12345
    ]
	) {
    activated_users {
     id
     name
     email
    }
    errors {
      user_id
      code
      message
    }
  }
}let query = 'mutation { activate_users (user_ids: [54321, 12345]) { activated_users { id name email } errors { user_id code message }}}';
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     'query' : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following argument to specify which users to activate.
| Argument | Description | 
|---|---|
| user_ids [ID!]! | The users' unique identifiers. The maximum is 200. | 
Invite users
The invite_users mutation invites users to join a monday.com account via the API. They will remain in a pending status until the invitation is accepted.
It returns the InviteUsersResult type which allows you to specify which fields to return in the mutation response.
mutation {
  invite_users(
    emails: [
      "[email protected]"
      "[email protected]"
    ]
    product: crm
    user_role: VIEW_ONLY
  ) {
    errors {
      message
      code
      email
    }
    invited_users {
      name
      id
    }
  }
}let query = 'mutation { invite_users (input: ) { deactivated_users { id name }}';
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     'query' : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following arguments to specify which users to invite to the account.
| Argument | Description | Enum Values | 
|---|---|---|
| emails  | The users' emails. | |
| product  | The product to invite the user to. | 
 | 
| user_role  | The invited user's new role. | 
 | 
Update multiple users
The update_multiple_users mutation updates one or multiple users' attributes via the API. It returns the UpdateUserAttributesResult type which allows you to specify which fields to return in the mutation response.
mutation {
  update_multiple_users(
    user_updates: [
      {
        user_id: 12345678
        user_attribute_updates: {
          birthday: "1985-06-01"
          email: "[email protected]"
        }
      }
      {
        user_id: 87654321
        user_attribute_updates: {
          birthday: "1975-01-20"
          email: "[email protected]"
        }
      }
    ]
  ) {
    updated_users {
      name
      birthday
      email
      id
    }
    errors {
      message
      code
      user_id
    }
  }
}Arguments
You can use the following argument to specify which users to update.
| Argument | Description | Supported Fields | 
|---|---|---|
| user_updates  | The unique identifiers and attributes to update. | user_attribute_updates  | 
Update email domain
The update_email_domain mutation updates a user's email domain via the API. It returns the UpdateEmailDomainResult type which allows you to specify which fields to return in the mutation response.
mutation {
  update_email_domain(
    input: {
      new_domain: "[email protected]"
      user_ids: [
        123456
        654321
      ]
    }
	) {
    updated_users {
      name
      is_admin
    }
    errors {
      user_id
      code
      message
    }
  }
} Arguments
You can use the following argument to specify the users' emails to update.
| Argument | Description | Supported Fields | 
|---|---|---|
| The attributes to update. | new_domain  | 
Update user's role
The update_users_role mutation updates a user's role (accepts both custom or default roles) via the API. It returns the UpdateUsersRoleResult type which allows you to specify which fields to return in the mutation response.
Please keep the following in mind:
- You can't update yourself
- Maximum of 200 user IDs per mutation
- Only admins can use this mutation
mutation {
  update_users_role(
    user_ids: [
      12345
      54321
    ]
    new_role: ADMIN
	) {
    updated_users {
      name
      is_admin
    }
    errors {
      user_id
      code
      message
    }
  }
} mutation {
  update_users_role(
    user_ids: [
      12345
      54321
    ]
    role_id: "5"
	) {
    updated_users {
      name
    }
    errors {
      user_id
      code
      message
    }
  }
} Arguments
You can use the following argument to specify the users' roles to update.
| Argument | Description | Enum Values | 
|---|---|---|
| new_role  | The user's updated role. Only used to update default roles, not custom ones (read more here). | 
 | 
| role_id  | The custom role's unique identifier (found by querying  | |
| user_ids  | The users' unique identifiers. The maximum is 200. | 
Delete subscribers from a board
The delete_subscribers_from_board mutation deletes subscribers from a board via the API. You can specify which fields to return in the mutation response.
mutation {
  delete_subscribers_from_board(
    board_id: 1234567890
    user_ids: [
      12345678
      87654321
      56789012
    ]
	) {
    id
  }
}let query = 'mutation { delete_subscribers_from_board (board_id: 1234567890, user_ids: [12345678, 87654321, 01234567]) { id }}';
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     'query' : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following arguments to specify which subscribers to delete from the board.
| Argument | Description | 
|---|---|
| board_id ID! | The board's unique identifier. | 
| user_ids [ID!]! | The users' unique identifiers. | 
Remove users from team
The remove_users_from_team mutation removes users from a team via the API. It returns the ChangeTeamMembershipResult type which allows you to specify which fields to return in the mutation response.
mutation {
  remove_users_from_team(
    team_id: 7654321
    user_ids: [
      123456
      654321
      987654
    ]
	) {
    successful_users {
      name
      email 
    }
    failed_users {
      name
      email
    }
  }
}   let query = "mutation { remove_users_from_team (team_id:7654321, user_ids: [123456, 654321, 012345]) { successful_users { name email } failed_users { name email }}}";
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following arguments to specify which users to remove from the team.
| Argument | Description | 
|---|---|
| team_id ID! | The team's unique identifier. | 
| user_ids [ID!]! | The users' unique identifiers. | 
Delete users from workspace
Required scope: workspaces:write
The delete_users_from_workspace mutation deletes users from a workspace via the API. You can specify which fields to return in the mutation response.
mutation {
  delete_users_from_workspace(
    workspace_id: 1234567
    user_ids: [
      123456
      654321
      987654
    ]
	) {
    id
  }
}let query = "mutation { delete_users_from_workspace (workspace_id: 1234567, user_ids: [123456, 654321, 012345]) { id } }";
fetch ("https://api.monday.com/v2", {
  method: 'post',
  headers: {
    'Content-Type': 'application/json',
    'Authorization' : 'YOUR_API_KEY_HERE'
   },
   body: JSON.stringify({
     query : query
   })
  })
   .then(res => res.json())
   .then(res => console.log(JSON.stringify(res, null, 2)));Arguments
You can use the following arguments to specify which users to delete from the workspace.
| Arguments | Description | 
|---|---|
| user_ids [ID!]! | The users' unique identifiers. | 
| workspace_id ID!! | The workspace's unique identifier. | 
Deactivate users
The deactivate_users mutation deactivates users from a monday.com account via the API. It returns the DeactivateUsersResult type which allows you to specify which fields to return in the mutation response.
Please keep the following in mind:
- You can't deactivate yourself
- There's a maximum of 200 users per mutation
- Only admins can use this mutation
- Deactivating a user also deactivates the integrations and automations they've created. Read more about deactivating users here!
mutation {
  deactivate_users(
    user_ids: [
      54321
      12345
    ]
	) {
    deactivated_users {
     id
     name
    }
    errors {
      message
      code
      user_id
    }
  }
}Arguments
You can use the following argument to specify which users to deactivate.
| Arguments | Description | 
|---|---|
| user_ids [ID!]! | The unique identifiers of the users to deactivate. The maximum is 200. | 
