For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Classic API only: the Platform API does not have user management endpoints. Patient context flows through the World Model instead.

User Management Lifecycle

Create a User

Async Support Async version available with async with AsyncAmigoClient()

Create a new user

post
/v1/{organization}/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:InviteUser on the user to invite.
  • The authenticated user must have greater privileges than the role assigned to the new user.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
organizationstringRequired
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Body
first_namestring · min: 1Required

The first name of the user.

last_namestring · min: 1Required

The last name of the user.

emailstring · emailRequired

The email of the user. This email uniquely identifies the user in the organization.

login_linkstring · uri · min: 1 · max: 2083 · nullableOptional

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.

role_namestringRequired

The role to assign to the user. Only roles that are returned from the Get roles endpoint are allowed.

Responses
201

Succeeded

application/json
user_idstringRequired

The identifier of the new user.

verify_linkstring · nullableRequired

The link sent to the user. Only present if login_link is True in the request.

post/v1/{organization}/user/
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:

Async Support Async version available with async with AsyncAmigoClient()

Get users

get
/v1/{organization}/user/

Retrieve all users in an organization.

Permissions

This endpoint is impacted by the following permissions:

  • Only users that the authenticated user has the User:GetUserInfo permission for are returned.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
organizationstringRequired
Query parameters
user_idstring[]Optional

The ID of the user.

Default: []
emailstring · email[]Optional

The email of the user.

Default: []
limitinteger · max: 100Optional

The maximum number of users to retrieve.

Default: 100
continuation_tokenintegerOptional

The token from the previous request to return the next page of users.

Default: 0
sort_bystring[]Optional

The 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.

Default: []
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Responses
200

Succeeded.

application/json
has_morebooleanRequired

Whether there are more users to retrieve.

continuation_tokeninteger · nullableRequired

A token to supply to the next request to retrieve the next page of users. Only populated if has_more is True.

get/v1/{organization}/user/
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)

Parameter
Type
Required
Description

query

string

Yes

Search query to match against names or emails

user_id

array

No

Filter by specific user IDs (repeatable)

get
/v1/{organization}/user/search/

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:GetUserInfo permission for will be returned.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
organizationstringRequired
Query parameters
querystringRequired

The search query. Any users whose name or email contains the query are returned.

user_idstring[]Optional

The IDs of the users.

Default: []
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Responses
200

Succeeded.

application/json
get/v1/{organization}/user/search/
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:

Async Support Async version available with async with AsyncAmigoClient()

Update user info

post
/v1/{organization}/user/{requested_user_id}

Update information about an user. Only fields that are specified in the request are updated.

Permissions

This endpoint requires the following permissions:

  • User:UpdateUserInfo for the user to update.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
requested_user_idstringRequired

The identifier of the user to update information for.

organizationstringRequired
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Body
first_namestring · min: 1 · nullableOptional

The first name of the user to update. If null, the first name is not modified.

last_namestring · min: 1 · nullableOptional

The last name of the user to update. If null, the last name is not modified.

enable_response_recommendationboolean · nullableOptional

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.

preferred_languageany of · nullableOptional

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).

Default: {}
string · enum · min: 3 · max: 3OptionalPossible values:
or
object · _NotSetOptional

A specific type to indicate that a field is not set in the request.

timezoneany of · nullableOptional

The user's timezone in the IANA tz database format. If not specified, the organization's timezone is used.

Default: {}
string · enum · min: 1OptionalPossible values:
or
object · _NotSetOptional

A specific type to indicate that a field is not set in the request.

conversations_visible_to_adminsboolean · nullableOptional

Whether conversations are visible to the admins. If null, the preference is not modified.

user_model_visible_to_adminsboolean · nullableOptional

Whether the user's user model is visible to the admins. If null, the preference is not modified.

additional_contextstring[] · nullableOptional

A list of additional context to update. If null, the context is not modified.

audio_keytermsstring[] · max: 20 · nullableOptional

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.

Responses
204

Succeeded.

No content

post/v1/{organization}/user/{requested_user_id}
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:

User Models

Delete User

Remove a user from the organization:

Async Support Async version available with async with AsyncAmigoClient()

Deletion Behavior Deletion returns 204 No Content on success. The user is deleted from the Concurrence system.

Delete an user

delete
/v1/{organization}/user/{requested_user_id}

Delete an user. This endpoint deletes the user from the Amigo system.

Permissions

This endpoint requires the following permissions:

  • User.DeleteUser on the user to delete.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
requested_user_idstringRequired

The identifier of the user to delete.

organizationstringRequired
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Responses
204

Succeeded.

No content

delete/v1/{organization}/user/{requested_user_id}
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

Modify the variables of an user

post
/v1/{organization}/user/{requested_user_id}/variable

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:UpdateUserInfo for the user to modify variables for.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
organizationstringRequired
requested_user_idstringRequired

The identifier of the user to update information for.

Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Body
Responses
204

Succeeded.

No content

post/v1/{organization}/user/{requested_user_id}/variable
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:

Field
Type
Description

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)

Get memories

get
/v1/{organization}/user/{user_id}/memory

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:GetMessage permission on will be returned.
Authorizations
AuthorizationstringRequired

The username should be set to {org_id}_{user_id}, and the password should be the Amigo issued JWT token that identifies the user.

AuthorizationstringRequired

Amigo issued JWT token that identifies an user. It's issued either after logging in through the frontend, or manually through the SignInWithAPIKey endpoint.

X-ORG-IDstringRequired

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.

Path parameters
organizationstringRequired
user_idstringRequired

The ID of the user to retrieve memories for.

Query parameters
idstring[]Optional

The IDs of the memories to retrieve.

Default: []
conversation_idstring[]Optional

The IDs of the conversations to retrieve memories from.

Default: []
limitinteger · max: 50Optional

The maximum number of memories to retrieve.

Default: 50
continuation_tokenintegerOptional

The token from the previous request to return the next page of memories.

Default: 0
sort_bystring[]Optional

The 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.

Default: []
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Responses
200

Succeeded.

application/json
has_morebooleanRequired

Whether there are more memories to retrieve.

continuation_tokeninteger · nullableRequired

A token to supply to the next request to retrieve the next page of memories. Only populated if has_more is True.

get/v1/{organization}/user/{user_id}/memory
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.

Sign in with email

post
/v1/{organization}/user/signin

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.

Path parameters
organizationstringRequired
Header parameters
x-mongo-cluster-namestring · nullableOptional

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.

Sec-WebSocket-Protocolstring[]OptionalDefault: []
Body
redirect_linkstring · uri · min: 1Required

An Amigo platform link that the user gets redirected to after clicking the login link.

emailstring · emailRequired

Email of the user. This must correspond to an existing, verified user in the Amigo platform.

Responses
200

Succeeded.

application/json
anyOptional
post/v1/{organization}/user/signin
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

Field
Type
Required
Description

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

Setting
Description

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.

Practice
Description

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 Models

Last updated

Was this helpful?