The End Users API allows you to create, update, and manage your end users’ data in real time. It also comes with webhook events you can subscribe to so you can keep track of changes to user profiles in Ada.
This API allows integrators to:
POST /v2/end-users/ to set language, metadata, and sensitive metadata before calling POST /v2/conversations/. The AI Agent has full user context from the first turn.external_id field on POST /v2/end-users/, PATCH /v2/end-users/{end_user_id}, and GET /v2/end-users/?external_id=<value> to reference end users by your own identifier (for example a CRM contact ID or a phone number) across conversations.end_user_id is a variable that will fill in this part of the URL programmatically for requests or actions (so you don’t have to consume webhooks unless needed).sensitive_metadata field to provide auth tokens, session IDs, or personally identifiable information through an encrypted, write-only pathway.For native chat, the Chat SDK provides setMetaFields() and setSensitiveMetaFields() as the primary path. For social and email channels, PATCH /v2/end-users/:id with sensitive_metadata is the only API pathway for passing sensitive values.
End users created through POST /v2/end-users/ that are not associated with a conversation within 24 hours of creation are automatically deleted. To prevent deletion, start a conversation for the end user via POST /v2/conversations/ before the 24-hour window elapses.
For end-to-end integration patterns, see the developer guide.
The End User Profile entity is represented as a JSON object composed of key,value pairs. Each key in the End User object represents a metavariable you can use throughout Ada. Learn more about metavariables.
You can use the profile.metadata object to create a custom mapping of key, value pairs to reflect your company’s
data schema. All values must be strings, integers, or booleans.
The system_properties object includes select keys automatically created by Ada, and is read-only. Note that depending on your Ada configuration, not all keys defined in the End Users API specification may be present or may have values.
The end user profile is composed of metavariables, which may be set through Ada’s embed SDK as well as through the End Users API. Use caution when storing user information in metavariables - they are not intended to replace an authentication flow to verify a user’s identity and information.
The sensitive_metadata field is available on both POST /v2/end-users/ and PATCH /v2/end-users/:id. It provides a secure pathway for passing values that should not be stored in standard metadata.
Sensitive metadata values are:
This matches the security contract of the Chat SDK’s setSensitiveMetaFields().
Use sensitive_metadata for auth tokens, session IDs, and personally identifiable information. Use standard metadata for non-sensitive context like region and plan type.
Additional constraints:
PATCH, keys must match the pattern [A-Za-z0-9_-]+.POST, sensitive metadata keys must not overlap with keys in the sibling metadata field.Sensitive metadata is stored at the end-user level, not the conversation level. If an end user has multiple active conversations, a value set in one conversation is accessible in all of them. For the most common integration pattern (one end user per conversation), this is not observable.
The sensitive_metadata field is nested inside profile and contains a fields object. To remove a sensitive metavariable, set the key to null:
The external_id field is an optional, caller-supplied identifier on the end user object. It lets custom-channel integrations reference end users by a stable identifier from another system (for example a CRM contact ID or a phone number) instead of Ada’s end_user_id.
external_id sits alongside end_user_id on the end user object, not inside profile.external_id maps to exactly one end user within an AI Agent.ABC-123 and abc-123 are treated as the same value.< and > characters are not allowed.external_id in POST /v2/end-users/ or PATCH /v2/end-users/{end_user_id}.POST /v2/end-users/ is called with an external_id that is already mapped, the existing end user is returned with HTTP 200 instead of creating a duplicate. A new end user returns HTTP 201.external_id to null in a PATCH request removes the mapping and frees the value to be assigned to a new end user.GET /v2/end-users/?external_id=<value> returns the matching end user or 404.external_id is available for custom channel integrations only (V1). Native chat, social, and voice channels are out of scope. For end users created through non-custom channels, external_id is null on the end user object and in webhook payloads.
For an end-to-end example, see Identify end users with a stable external ID.
Ada uses webhook events to keep your systems in sync. These events allow your systems to track and react to key moments related to specific user actions and updates. The following events are supported:
v1.end_user.created: Triggered when a new user is created through any of Ada’s supported channels, including explicit creation via POST /v2/end-users/. The AI Agent’s customer persistence setting influences the rate of these events.v1.end_user.updated: Triggered when a value on the end user’s profile changes. Updates may occur via:
setMetafields on embeds).For implementation details, see the webhook documentation.
Certain updates do not generate end_user.updated events:
sensitive_metadata (write-only values do not trigger update events).For more details on how to implement and use webhooks, refer to the webhook documentation.
All /v2/end-users/<end_user_id> endpoints adhere to these rate limits:
All other End Users API endpoints adhere to our global rate limits.