Manage app users and team members
List, find, invite, edit and delete the users who sign in to your app, add them to groups, and see how they differ from your project's team members.
Last updated
Two kinds of people use an Anythink project, and they are managed in different places. App users are the people who sign in to the app you build. Team members are the people who build it in the Anythink dashboard. This page covers both, then shows how to run your app's users: list and find them, invite them, fix a stuck account, change a role, add them to groups, edit their profile and remove them.
Every task is shown in the Anythink dashboard, with the CLI and with an AI assistant. Signing in, registration and passwords are on Sign in users. What a user may do is set by roles and permissions.
App users and team members
| App users | Team members | |
|---|---|---|
| Who they are | The people who use your app | The people who build the project in the Anythink dashboard |
| How they join | They register, or you create or invite them under Settings › Users | You invite them from the project's Team Access in My Anythink |
| How they sign in | Email and password, or social sign-in, in your app | Their My Anythink account |
| Where you manage them | Settings › Users, the CLI and the /users endpoints |
My Anythink. In the project they are read-only |
| Their role | One of your project's roles | The role chosen when they were invited |
Both appear in the project's user list. The API marks a team member with "is_central_user": true. In the dashboard, team members are listed under MyAnythink Users and app users under Project Users.
Administrators are team members. The users API refuses to create an app user on an administrator role.
Add a team member
Team members are invited from the project's page in My Anythink, where you also choose their role and give them a dashboard seat. See Account, billing and projects for the steps.
In the Anythink dashboard
- In My Anythink, open the project and find Team Access.
- Select Invite User, enter their email address and choose a Role.
- Select Send Invitation. Once they accept, they appear under MyAnythink Users on Settings › Users.
With the CLI
Note: Team invitations are sent from My Anythink. Use the steps above. The CLI's user commands manage app users inside the project.
With an AI assistant (MCP)
Note: Team invitations are sent from My Anythink. Your assistant can walk you through the steps above.
List and find users
In the Anythink dashboard
- Open Settings › Users.
- Project Users lists your app users with their name, email, role, sign-in method, status, last login and dates. Select a name to open the user.
- Type in Search name or email to narrow the list.
- Use the quick filters Has subscriptions, Native sign-in, Password sign-in, Pending invites and New this week, and sort by Newest, Recently active or A–Z. Select Clear to reset them.
The status is Active once the user has set up their account, and Invite Sent until they have. You need anythink_users:read to see the page.
With the CLI
anythink users list
anythink users get 42
users list prints every user's id, name, email and role. Find one by email with your shell:
anythink users list | grep alice@example.com
For the full record, including status and sign-in details, call the API:
anythink fetch /users/42
{
"id": 42,
"gid": "368f7b33-940e-4aad-a3d8-5a28215935bd",
"is_central_user": false,
"first_name": "Alice",
"last_name": "Smith",
"email": "alice@example.com",
"is_active": true,
"confirmed_at": "2026-10-04T13:31:50.114391Z",
"invite_accepted_at": "2026-10-04T13:31:50.114391Z",
"role_id": 104,
"role_name": "Standard User",
"auth_provider": null,
"last_login_at": "2026-10-04T13:31:50.307407Z"
}
The response carries more fields than shown, including the role's permissions. is_active is false until an invited user accepts, or a user who must confirm their email does so.
With an AI assistant (MCP)
Find alice@example.com and tell me her role, whether she has signed in, and how she signs in.
The assistant runs users list to find her id, then fetch /users/42 for the details.
How a user signs in
The Auth column on Settings › Users, and Authentication on the user's page, show Password or the provider the user last signed in with: Apple, Google, GitHub or LinkedIn. The API returns the same value as auth_provider, which is null for email and password. See Social sign-in with Apple, Google, GitHub and LinkedIn.
Create or invite a user
Create a user without a password and Anythink emails them an invitation. The link lasts 7 days. They open it, enter their name and a password, and can then sign in. Until they do, they show Invite Sent. To let people register themselves instead, see Sign in users.
In the Anythink dashboard
- Open Settings › Users and select Create Project User.
- Enter the First Name, Last Name and Email, and choose a Role. The list holds your active roles, without administrator roles.
- Select Create User. Anythink sends the invitation.
With the CLI
Find the role's id, then create the user:
anythink roles list
anythink fetch /users --method POST --body '{
"first_name": "Alice",
"last_name": "Smith",
"email": "alice@example.com",
"role_id": 104
}'
{
"id": 42,
"gid": "368f7b33-940e-4aad-a3d8-5a28215935bd",
"first_name": "Alice",
"last_name": "Smith",
"email": "alice@example.com"
}
first_name and last_name are required and up to 50 characters. email is required, valid and up to 255 characters. role_id is the id of an existing role. The invitation goes out as part of the call.
With an AI assistant (MCP)
Invite alice@example.com, Alice Smith, as a Standard User.
The assistant runs roles list to find the role's id, then creates the user with fetch /users.
| Status | Message | Cause |
|---|---|---|
201 |
The new user's id, gid, names and email |
The user was created and the invitation sent. |
400 |
Admin users cannot be created |
The role is an administrator role. |
400 |
Role does not exist |
role_id isn't a role in this project. |
400 |
A message that the user already exists | A user with that email is already in the project. |
400 |
A message that the Monthly Active User quota is reached | Your plan's allowance is used up. See Limits and quotas. |
400 |
validation errors | A field broke a rule above. |
Creating a user fires the UserInvited event, so a workflow can send a welcome message or set up their records. See Triggers and scheduling.
Resend an invitation or confirm an email address
A user can be waiting on one of two emails. An invitation is sent when you create them without a password, and lasts 7 days. A confirmation is sent when your project requires new users to confirm their email address, and lasts 24 hours. The email comes from your project's templates: see Email templates.
In the Anythink dashboard
Open the user from Settings › Users. The buttons depend on where they are:
| The user | The page offers |
|---|---|
| Hasn't accepted an invitation | Resend Invitation Email, and an Invite Status card with the expiry and Copy Invite Link |
| Hasn't confirmed their email | Resend Confirmation Email and Mark as Confirmed |
| Is set up | Send Password Reset |
Mark as Confirmed makes the user active without waiting for the email. Copy Invite Link is also in a pending user's row menu on the list. Use it when the email doesn't arrive: send the link to the person yourself.
With the CLI
anythink fetch /users/42/send-invitation-email --method POST
anythink fetch /users/42/send-confirmation-email --method POST
anythink fetch /users/42/mark-as-confirmed --method POST
Each returns 204 No Content. Use the first for a user who hasn't accepted their invitation yet, and the second for one who hasn't confirmed. A user who has already accepted gets 400 User already accepted invite, and one who has already confirmed gets 400 User is already confirmed.
With an AI assistant (MCP)
Resend the invitation to user 42, or mark user 43 as confirmed.
The assistant calls POST /users/42/send-invitation-email or POST /users/43/mark-as-confirmed through fetch.
Edit a user and change their role
You can change a user's name and role. The email address stays as it was.
In the Anythink dashboard
- Open Settings › Users and select the user.
- Under Edit User, change the First Name, Last Name or Role.
- Select Update User.
The role list holds your active roles, without administrator roles. The change applies to the user's next request, so they don't need to sign in again. See Roles and permissions.
With the CLI
There's no users update command, so call the API. It saves all three values, so send the user's current names with the new role:
anythink roles list
anythink fetch /users/42 --method PUT --body '{
"first_name": "Alice",
"last_name": "Smith",
"role_id": 133
}'
It returns 200. first_name, last_name and role_id are all required, and a role_id that isn't a role in the project returns 400 Role does not exist.
With an AI assistant (MCP)
Move user 42 to the editor role.
The assistant looks up the role's id with roles list, reads the user's current name with users get 42, then sends the update through fetch.
Team members aren't edited here. Their name and role are managed in My Anythink.
Add a user to a group
A group is a set of users you grant records to once, for example a team or a class. The user's page shows their Group memberships, a list of the groups they are in. You add them from the group.
In the Anythink dashboard
- Open Settings › Groups and select the group.
- Under Members, select Add member.
- Choose the User and a Role, then select Add member.
With the CLI
anythink fetch /groups/5/members --method POST --body '{"user_id":42,"role_id":104}'
anythink fetch /groups/by-user/42
The second command lists the groups user 42 is in.
With an AI assistant (MCP)
Add user 42 to the group called Team North, with the Standard User role.
The assistant finds the group and the role with fetch /groups and roles list, then adds the member.
Group grants only count once Enable group-level row access is on under Settings › Organisation Settings. The groups API needs the anythink_groups permissions, which administrators have and no other role gets by default. Groups and row-level security covers all of it.
User profiles
Each app user has a profile that holds who they are in your app: a preferred name, an avatar, a timezone and a locale, and whether they agreed to marketing. Anythink creates it when the user is created, and fills in how they found you if the app sent signup_context at registration.
| Field | What it holds |
|---|---|
preferred_name |
The name to show, up to 512 characters. |
avatar_file_id |
The id of an image in your project's files, or null. |
timezone, locale |
Free text, such as Europe/London and en-GB. |
marketing_consent |
true, false or null for not asked. marketing_consent_at records when it last changed. |
utm_source, utm_medium, utm_campaign, utm_term, utm_content, referrer, signup_country, signup_ip |
Where the user came from. Set at registration and read-only. |
In the Anythink dashboard
- Open Settings › Users and select the user.
- Open the Profile panel and select Edit.
- Change the Preferred name, Timezone, Locale or Marketing consent (Not asked, Given or Declined). Use Pick image to choose an avatar.
- Select Save.
The panel also shows the attribution and signup details, which can't be edited.
With the CLI
anythink fetch /user-profiles/by-user/42
anythink fetch /user-profiles/by-user/42 --method PUT --body '{
"preferred_name": "Alice",
"avatar_file_id": null,
"timezone": "Europe/London",
"locale": "en-GB",
"marketing_consent": true
}'
The update replaces the profile, so send all five fields. Leave one out and the call returns 400 and changes nothing. Read the profile first and send back the values you aren't changing. To page through every profile, call GET /user-profiles?page=1&page_size=25.
With an AI assistant (MCP)
Set Alice's timezone to Europe/London and her locale to en-GB. Keep everything else on her profile as it is.
The assistant reads her profile with fetch /user-profiles/by-user/42, then sends the update with all five fields.
Profiles are visible to administrators. To let your app's users read and edit their own, give their role anythink_user_profiles:read and anythink_user_profiles:update. A user with those permissions can then reach only their own profile: another user's profile and the full list return 403.
Delete a user
Deleting removes the user from the project, along with their group memberships and record grants. There's no per-user deactivate switch. A user is inactive only until they accept an invitation or confirm their email, so deleting is how you end someone's access. You can invite the same address again later.
In the Anythink dashboard
- Open Settings › Users.
- Open the menu at the end of the user's row and choose Delete, then confirm.
To remove several, tick their rows and select Delete with the count shown in the bar above the list. You can't delete yourself, and team members have no delete action.
With the CLI
anythink users delete 42 --yes
✓ User 42 deleted.
Without --yes the CLI asks you to confirm.
With an AI assistant (MCP)
Delete user 42.
The assistant runs users delete 42 --yes, or calls DELETE /users/42 through fetch.
Permissions
| To | Permission |
|---|---|
| See users | anythink_users:read |
| Create and invite users | anythink_users:create |
| Edit users, resend emails and mark as confirmed | anythink_users:update |
| Delete users | anythink_users:delete |
| Read and edit profiles | anythink_user_profiles:read and :update |
| Manage groups and their members | anythink_groups |
Project administrators have all of these. The user permissions aren't on Standard User, so a role for your app's own users shouldn't hold them. See Permissions reference.
Limits
| Limit | Detail |
|---|---|
| Administrators | They are team members. An app user can't be created on an administrator role. |
| Names and email | 50 characters for each name, 255 for the email. One user per email address in a project. |
| Invitation | Valid for 7 days. Resending sends a fresh link. |
| Confirmation | Valid for 24 hours. |
| Monthly active users | Set by your plan. Creating a user over the allowance returns 400. |
| Deactivating | Not available. Delete the user instead. |
| User list | Returns every user in one response, so the dashboard searches and sorts what it loaded. |
| Editing | Name and role only. The email address can't be changed. |
| Team members | Read-only in the project. Manage them in My Anythink. |
| Profiles | One per user. An update replaces all five editable fields. |
Next steps
- Sign in users: registration, confirmation, sessions and passwords
- Roles and permissions: create roles and decide what each can do
- Groups and row-level security: share records with groups of users
- Social sign-in with Apple, Google, GitHub and LinkedIn
- Account, billing and projects: invite and manage your team
- Triggers and scheduling: react when a user is invited or registers