Manage end-user records
Browse and manage end-user records from the Convai Editor window or from a script, covering the editor tool, every method, and pagination.
The Convai Unity SDK tracks every user who connects with a memory-enabled character as an end-user record. Each record stores the user's stable identifier, last activity timestamps, and any metadata you sent during connection. You can browse and delete these records from the Unity editor or manage them programmatically with client.EndUsers.
Beta API. Method signatures are stable but may change in future SDK updates. Pin your SDK version in production and review the changelog before upgrading.
Access the panel from the Unity menu bar: Convai → Long Term Memory.
The panel shows all end-user records associated with your API key. It loads records in batches of 200, with cursor-based pagination fetching additional pages automatically for large sets.
Available actions:
Refresh the list
Click Refresh
Select individual records
Click a record row
Select or deselect all
Click Select All / Unselect All
Delete selected records
Click Delete

Deleting an end-user record from the editor removes the record and all memory records for that user across every character. This cannot be undone. A confirmation dialog appears before deletion proceeds.

Access end-user operations through client.EndUsers on a ConvaiRestClient instance.
See each method below for full examples.
EndUserDetails fields
Each end-user record is represented by EndUserDetails:
EndUserId
string
The stable identifier sent by the SDK on connection
LastActiveTs
string
ISO 8601 timestamp of the last session
LastLtmUsageTs
string
ISO 8601 timestamp of the last LTM interaction
Metadata
Dictionary<string, object>
Key–value data sent by IEndUserMetadataProvider
DisplayName
string
Computed property — reads Metadata["name"] if present and non-empty; otherwise "User {EndUserId[..8]}", optionally suffixed with relative last-active time (e.g., "User a1b2c3d4 (3d ago)")
ShortId
string
Computed property — truncated form of EndUserId for compact display (e.g., "a1b2c3d4...ef01")
DisplayName and ShortId are C# computed properties, not stored fields. They are not present in the JSON API response.
Scripting API
List end users
Retrieve all end-user records with cursor-based pagination. The default limit is 50 records per page.
EndUsersListResponse fields:
EndUsers
List<EndUserDetails>
Records on this page
TotalCount
int
Total number of end-user records
NextCursor
string
Cursor token for the next page; null when no further pages exist
HasMore
bool
Whether additional pages exist
You can also filter by activity date using activeAfter and activeBefore (ISO 8601 strings):
Get a single end user
Retrieve details for one specific user by their endUserId.
Update user metadata
Update one or more metadata keys for a user. The patch operation preserves keys you do not include — it does not replace the entire metadata object.
Delete an end user
DeleteAsync removes the end-user record and all memory records for that user across all characters. Unlike MemoryService.DeleteAllAsync, which is scoped to one character, this operation removes the user globally. This cannot be undone.
DeleteAllAsync vs. DeleteAsync
client.Memory.DeleteAllAsync(characterId, endUserId)
One user + one character
All memory records for that user–character pair
client.EndUsers.DeleteAsync(endUserId)
One user + all characters
The user record and all memories across every character
Use DeleteAllAsync when you want to reset a user's memory for a specific character while keeping their records for other characters intact. Use EndUsers.DeleteAsync when you need to fully remove a user from the system.
Next steps
Memory management APILong-term memory scripting referenceLast updated
Was this helpful?