List contacts
Returns contacts (people and bots) that the authenticated user has communicated with.
Use cases:
- Discover entity IDs for filtering messages by sender via GET /v1/users/:user_id/messages?entity_id=ent_xxx
- Build a contact picker UI
- Show sender details in inbox views
Filtering:
- search: Case-insensitive substring match on contact name, or exact match on an external ID (email address, Slack user ID)
- entity_type: Filter by type (e.g., "person", "bot")
- is_bot: Filter by bot status (true/false)
Pagination (cursor-only):
- limit: Maximum number of contacts per page (default: 50, max: 100)
- cursor: Opaque token from pagination.next_cursor of a prior response. Pass it back unchanged to fetch the next page. Omit on the first page.
The response pagination object contains limit, has_more, and (when has_more=true) next_cursor. There is no offset and no total_count — partners walk pages forward via cursor and use has_more to detect the last page.
Examples:
# List all contacts
GET /v1/users/:user_id/entities
# Search by name or email
GET /v1/users/:user_id/entities?search=john
# Only non-bot contacts
GET /v1/users/:user_id/entities?is_bot=false
# Filter by type
GET /v1/users/:user_id/entities?entity_type=person
Request
- Base URL: http://0.0.0.0:3000
- URL: http://0.0.0.0:3000/v1/users/{user_id}/entities
- Auth: none declared
Path parameters
Query parameters
Search by name (substring, case-insensitive) or external ID (exact match)
Filter by entity type (e.g., "person", "bot")
Filter by bot status
Number of items to return (1-100, default 50)
Opaque pagination cursor returned as pagination.next_cursor from a prior response. Pass it back unchanged to fetch the next page. Cursors are sort-key bound — a cursor from one endpoint cannot be reused on another.
Response
Default Response
Changes
No recorded changes to this operation across all 1 revision of this API.