Users
Create, list, update, and delete users. Manage variables, memories, and authentication tokens.
Users are the individuals who converse with your agents. Each user is scoped to your organization and carries identity details, preferences, variables, and an evolving user model. This page covers the full lifecycle: creating, listing, searching, updating, and deleting users, plus user variables, memories, and email sign-in.
User Management Lifecycle
Create a User
Invite a user to the Amigo platform. The endpoint will create a new user in the organization, linked to the supplied email address. The created user will remain in the unverified status and will not have access to most of Amigo's services.
If login_link is not-None, an email containing it will be sent to the user's email with descriptions indicating that this would allow the user to login
and start their Amigo experience. Otherwise, no email will be sent.
Permissions
This endpoint requires the following permissions:
User:InviteUseron the user to invite.- The authenticated user must have greater privileges than the role assigned to the new user.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]The first name of the user.
The last name of the user.
The email of the user. This email uniquely identifies the user in the organization.
If specified, this link will be sent to the user's email as the link to start their Amigo experience. For Amigo's frontend, this would be the user's organization's login page with their email already filled in.
The role to assign to the user. Only roles that are returned from the Get roles endpoint are allowed.
Succeeded
The identifier of the new user.
The link sent to the user. Only present if login_link is True in the request.
Invalid authorization credentials.
Missing required permissions.
Specified organization or role is not found.
User with the same email already exists in this organization, or a related operation is in progress.
Invalid request path parameter or request body failed validation.
The user has exceeded the rate limit of 50 requests per minute for this endpoint.
The service is going through temporary maintenance.
POST /v1/{organization}/user/ HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 462
{
"first_name": "text",
"last_name": "text",
"email": "name@gmail.com",
"login_link": "https://example.com",
"role_name": "text",
"nonsensitive_user_variables": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sensitive_user_variables": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"user_preferences": {
"enable_response_recommendation": false,
"preferred_language": "aaa",
"conversations_visible_to_admins": true,
"user_model_visible_to_admins": true,
"timezone": "Africa/Abidjan",
"audio_keyterms": [
"text"
]
}
}{
"user_id": "text",
"verify_link": "text"
}List Users
Retrieve users with optional filters:
Retrieve all users in an organization.
Permissions
This endpoint is impacted by the following permissions:
- Only users that the authenticated user has the
User:GetUserInfopermission for are returned.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The ID of the user.
[]The email of the user.
[]The maximum number of users to retrieve.
100The token from the previous request to return the next page of users.
0The fields to sort the sets by. Supported fields are first_name, last_name, email, user_stats.num_conversations, user_stats.num_messages, and user_stats.last_message_time. Specify a + before the field name to indicate ascending sorting and - for descending sorting. Multiple fields can be specified to break ties.
[]The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
Whether there are more users to retrieve.
A token to supply to the next request to retrieve the next page of users. Only populated if has_more is True.
Invalid authorization credentials.
Missing required permissions.
Specified organization is not found.
Invalid request path parameter or request query parameter failed validation.
The user has exceeded the rate limit of 60 requests per minute for this endpoint.
The service is going through temporary maintenance.
GET /v1/{organization}/user/ HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Accept: */*
{
"users": [
{
"org_id": "text",
"user_id": "text",
"first_name": "text",
"last_name": "text",
"email": "text",
"user_stats": {
"num_conversations": 1,
"num_messages": 1,
"last_message_time": "2026-01-01T00:00:00.000Z"
},
"role": "text",
"preferences": {
"enable_response_recommendation": false,
"preferred_language": "text",
"conversations_visible_to_admins": true,
"user_model_visible_to_admins": true,
"timezone": "text",
"audio_keyterms": [
"text"
]
},
"nonsensitive_variables": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sensitive_variables": [
"text"
],
"enable_actions_access": true
}
],
"has_more": true,
"continuation_token": 1
}Search Users
Search for users in the organization by name or email.
Permission required: User:GetUserInfo (only users the caller has permission for are returned)
query
string
Yes
Search query to match against names or emails
user_id
array
No
Filter by specific user IDs (repeatable)
Search users in the organization using their names or emails.
Permissions
This endpoint may be impacted by the following permissions:
- Only users that the authenticated user has the
User:GetUserInfopermission for will be returned.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The search query. Any users whose name or email contains the query are returned.
The IDs of the users.
[]The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
Invalid authorization credentials.
Missing required permissions.
Specified organization is not found.
Invalid request path parameter or request query parameter failed validation.
The user has exceeded the rate limit of 50 requests per minute for this endpoint.
The service is going through temporary maintenance.
GET /v1/{organization}/user/search/?query=text HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Accept: */*
{
"users": [
{
"org_id": "text",
"user_id": "text",
"first_name": "text",
"last_name": "text",
"email": "text",
"user_stats": {
"num_conversations": 1,
"num_messages": 1,
"last_message_time": "2026-01-01T00:00:00.000Z"
},
"role": "text",
"preferences": {
"enable_response_recommendation": false,
"preferred_language": "text",
"conversations_visible_to_admins": true,
"user_model_visible_to_admins": true,
"timezone": "text",
"audio_keyterms": [
"text"
]
},
"nonsensitive_variables": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sensitive_variables": [
"text"
]
}
]
}Update User
Modify user details:
Update information about an user. Only fields that are specified in the request are updated.
Permissions
This endpoint requires the following permissions:
User:UpdateUserInfofor the user to update.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The identifier of the user to update information for.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]The first name of the user to update. If null, the first name is not modified.
The last name of the user to update. If null, the last name is not modified.
Whether to automatically recommend responses to the user if the user hasn't replied to the coach for a while. If null, the preference is not modified.
The preferred language for the user. The agent will attempt to converse to the user in this language if set. This field must be in the ISO 639-3 format.
If null, erase the user's preferred setting, and the specific language used will be the agent's default spoken language. In order to not update this field, leave it out of the request or
set it to an empty object (_NotSet).
{}A specific type to indicate that a field is not set in the request.
The user's timezone in the IANA tz database format. If not specified, the organization's timezone is used.
{}A specific type to indicate that a field is not set in the request.
Whether conversations are visible to the admins. If null, the preference is not modified.
Whether the user's user model is visible to the admins. If null, the preference is not modified.
A list of additional context to update. If null, the context is not modified.
A list of keyterms that are easy to get wrong during audio transcriptions that tend to occur commonly in audio sessions using this service. If null, the keyterms are not modified.
Succeeded.
No content
Invalid authorization credentials.
Missing required permissions.
Specified organization or user is not found.
A related operation is in progress.
Invalid request path parameter or request body failed validation.
The user has exceeded the rate limit of 50 requests per minute for this endpoint.
The service is going through temporary maintenance.
POST /v1/{organization}/user/{requested_user_id} HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 264
{
"first_name": "text",
"last_name": "text",
"enable_response_recommendation": true,
"preferred_language": "aaa",
"timezone": "Africa/Abidjan",
"conversations_visible_to_admins": true,
"user_model_visible_to_admins": true,
"additional_context": [
"text"
],
"audio_keyterms": [
"text"
]
}No content
The same endpoint also accepts an additional_context array for feeding facts from your systems into the user model. See the walkthrough on the User Models page:
Delete User
Remove a user from the organization:
Delete an user. This endpoint deletes the user from the Amigo system.
Permissions
This endpoint requires the following permissions:
User.DeleteUseron the user to delete.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The identifier of the user to delete.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
No content
The user is currently active in Actions development.
Invalid authorization credentials.
Missing required permissions.
Specified organization or user is not found.
A related operation is in progress.
Invalid request path parameter failed validation.
The user has exceeded the rate limit of 500 requests per minute for this endpoint.
The service is going through temporary maintenance.
DELETE /v1/{organization}/user/{requested_user_id} HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Accept: */*
No content
Modify User Variables
Upsert or delete user variables. Variables are key-value pairs that are passed to tool invocations. Changes only affect tool invocations that have not yet happened.
Permission required: User:UpdateUserInfo
Upsert or delete the user's variables. These changes are only reflected in tool invocations that are not yet made.
Permissions
This endpoint requires the following permissions:
User:UpdateUserInfofor the user to modify variables for.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The identifier of the user to update information for.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
No content
One or more variables to delete do not exist, or the user has exceeded the limit of 20 nonsensitive variables.
Invalid authorization credentials.
Missing required permissions.
Specified organization or user is not found.
Invalid request path parameter or request body failed validation.
The user has exceeded the rate limit of 50 requests per minute for this endpoint.
The service is going through temporary maintenance.
POST /v1/{organization}/user/{requested_user_id}/variable HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 89
{
"upserts": [
{
"name": "text",
"value": "text",
"is_secret": true
}
],
"deletes": [
{
"name": "text"
}
]
}No content
The request body supports two operations:
upserts
array
A list of objects, each containing name, value, and is_secret, to create or update
deletes
array
A list of objects, each containing a name, identifying variables to remove
Get User Memories
Retrieve memories extracted from conversations for a specific user. Memories are key observations the agent stores for future context recall.
Permission note: only memories with references that the caller has Conversation:GetMessage permission on are returned.
Query parameters:
id: filter by specific memory IDs (repeatable)conversation_id: filter by source conversation (repeatable)limit: results per page (integer)continuation_token: pagination token (integer)sort_by: sort order (repeatable)
Retrieve memories for the specified users.
Permissions
This endpoint may be impacted by the following permissions:
- Only memories with references that the authenticated user has the
Conversation:GetMessagepermission on will be returned.
The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.
Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.
An optional organization identifier that indicates from which organization the token is issued. This is used in rare cases where the user to authenticate is making a request for resources in another organization.
The ID of the user to retrieve memories for.
The IDs of the memories to retrieve.
[]The IDs of the conversations to retrieve memories from.
[]The maximum number of memories to retrieve.
50The token from the previous request to return the next page of memories.
0The fields to sort the sets by. Supported fields are conversation_id and created_at. Specify a + before the field name to indicate ascending sorting and - for descending sorting. Multiple fields can be specified to break ties.
[]The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]Succeeded.
Whether there are more memories to retrieve.
A token to supply to the next request to retrieve the next page of memories. Only populated if has_more is True.
Invalid authorization credentials.
Missing required permissions.
Specified organization or user is not found.
Invalid request path parameter or request query parameter failed validation.
The user has exceeded the rate limit of 40 requests per minute for this endpoint.
The service is going through temporary maintenance.
GET /v1/{organization}/user/{user_id}/memory HTTP/1.1
Host: api.amigo.ai
Authorization: Bearer YOUR_SECRET_TOKEN
X-ORG-ID: YOUR_API_KEY
Accept: */*
{
"memories": [
{
"id": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"conversation_id": "text",
"references": [
"text"
],
"content": "text",
"context": "text"
}
],
"has_more": true,
"continuation_token": 1
}Sign In with Email
Send a magic link to a user's email for authentication. If the email does not correspond to an existing user, the endpoint succeeds silently to prevent user enumeration.
Send a magic link to the user's email to sign in. If the specified email doesn't correspond to an user, the endpoint succeeds silently.
The Mongo cluster name to perform this request in. This is usually not needed unless the organization does not exist yet in the Amigo organization infra config database.
[]An Amigo platform link that the user gets redirected to after clicking the login link.
Email of the user. This must correspond to an existing, verified user in the Amigo platform.
Succeeded.
Specified organization is not found.
Invalid request path parameter or request body failed validation.
The service is going through temporary maintenance.
POST /v1/{organization}/user/signin HTTP/1.1
Host: api.amigo.ai
Content-Type: application/json
Accept: */*
Content-Length: 64
{
"redirect_link": "https://example.com",
"email": "name@gmail.com"
}No content
email
string
Yes
Email address to send the magic link to; unknown emails return success without sending, to prevent user enumeration
redirect_link
string
Yes
A Concurrence platform link the user is redirected to after clicking the login link
User Impersonation (CLI)
The --user flag on conversation commands lets you run conversations as an existing user. This is useful for testing user-specific agent behaviors (personalized context, memory, conversation history).
Configuration Notes & Best Practices
User Preferences
Recommended settings for integrations
Role Assignment
Use DefaultUserRole unless custom roles are required
Custom Roles
Contact the Concurrence team for custom role definitions
Actions Access
enable_actions_access is a read-only flag returned in the List Users (Get Users) response, indicating whether the user has access to actions features. It is not set via the create or update request body.
User ID Mapping
Save returned user_id and map to internal systems
Token Management
Generate and manage auth tokens per user
State Tracking
Maintain user state for smooth experiences
User Model Management
User ModelsLast updated
Was this helpful?

