Skip to content

Recent conversations of a user

GET
/users/{userUuid}/dashboard
curl --request GET \
--url 'https://chat.work.optidata.cloud/api/users/3f1c9a52-4d7e-4b31-9c02-77a1b6e5d840/dashboard?limit=5' \
--header 'Authorization: Bearer <token>'

A compact list of the user’s most recently active conversations, each with its last message and a deep link into Talk. Built for a home-screen card: the conversation objects carry fewer fields than the ones returned by the conversation endpoints.

userUuid
required
string format: uuid

UUID of the user. Read your own from GET /me.

limit
required
integer
>= 1 <= 100

How many conversations to return.

The user’s most recent conversations.

Media typeapplication/json
Array<object>

The compact conversation shape used by the dashboard: enough to render a row, plus a link that opens it in Talk.

object
id
integer format: int64
name
string | null
icon_url
string | null format: uri
is_individual
boolean
link

Deep link that opens this conversation in Talk.

string format: uri
is_pinned
boolean
is_muted
boolean | null
muted_until
string | null format: date-time
is_archived
boolean
is_current_user_in_chat
boolean
draft_message
string | null
active_call
object | null
pivot

One user’s membership of one conversation. It appears as pivot on the conversation payload and carries everything that is personal to that user: their role, their read marker and their pin, mute, archive and draft state.

object
id
integer format: int64
chat_id
integer format: int64
user_id
integer format: int64
role
string
Allowed values: OWNER ADMIN PARTICIPANT
last_message_seen
One of:
null
pinned_at

When the user pinned the conversation, or null.

string | null format: date-time
is_muted
boolean | null
muted_until

When the mute expires. null on an indefinite mute, and on an unmuted conversation. Unlike the other timestamps, the value inside pivot is a plain YYYY-MM-DD HH:MM:SS UTC string, not ISO-8601.

string | null
is_archived
boolean
has_mention

Whether an unread message mentions this user.

boolean
draft_message
string | null
favorited_at
string | null format: date-time
guid
string | null
created_at
string | null format: date-time
updated_at
string | null format: date-time
deleted_at

Set when the user has left or been removed.

string | null format: date-time
users
Array<object>

A person in the tenant.

object
id
required

Numeric id, used on the conversation and participant routes.

integer format: int64
uuid
required

Stable identifier of the user across the Optiwork suite.

string format: uuid
cuid

Identifier of the company the user belongs to.

string
username
string | null
email
required
string format: email
name
required
string
company_name
string | null
type

null for a person. 0 marks the Optiwork AI assistant, 1 a bot and 2 a contact reached over an external messaging integration.

integer | null
dark_mode
boolean
messenger_color

The colour used for this user’s name in the interface.

string
avatar_url
string | null format: uri
created_at
string format: date-time
updated_at
string format: date-time
deleted_at

Set when the user has been removed from the company.

string | null format: date-time
whatsapp_info

Details of the linked external-messaging contact, present when the user is reached over an external messaging integration (type 2); null for an ordinary person. Its keys depend on the integration, so treat it as an open object.

object | null
last_message

A trimmed view of the newest message.

object
id
integer format: int64
chat_id
integer format: int64
user_id
integer format: int64
content
string | null
type
string
Allowed values: USER SYSTEM
files_count
integer
user

The trimmed user record embedded in message payloads and search results.

object
id
required
integer format: int64
uuid
required
string format: uuid
name
required
string
email
string format: email
cuid
string
avatar_url
string | null format: uri
deleted_at
string | null format: date-time
whatsapp_info

Details of the linked external-messaging contact, present when the embedded user is one (type 2); null otherwise. Open object.

object | null
created_at
string format: date-time
updated_at
string format: date-time
deleted_at
string | null format: date-time
created_at
string format: date-time
updated_at
string format: date-time
Examples
Examplecards
[
{
"id": 4,
"name": null,
"icon_url": "https://chat.work.optidata.cloud/images/avatars/group-placeholder.png",
"is_individual": true,
"created_at": "2026-08-14T11:57:28.000000Z",
"updated_at": "2026-08-14T14:02:40.000000Z",
"link": "https://chat.work.optidata.cloud/urn/acme/v1-3-eyJjb252ZXJzYXRpb25faWQiOjR9",
"is_pinned": false,
"is_muted": false,
"muted_until": null,
"is_archived": false,
"is_current_user_in_chat": true,
"active_call": null,
"draft_message": null,
"last_message": {
"id": 91,
"chat_id": 4,
"user_id": 5,
"content": "Sending the report now",
"type": "USER",
"created_at": "2026-08-14T14:02:40.000000Z",
"updated_at": "2026-08-14T14:02:40.000000Z",
"deleted_at": null,
"files_count": 0,
"user": {
"id": 5,
"uuid": "7c2f4b18-a90d-4d6e-8f11-2b5c9e70a334",
"name": "John Smith",
"avatar_url": "https://cdn.example/avatars/john.webp"
}
}
}
]

Missing, malformed or expired authentication key.

Media typeapplication/json

Authentication failures — and a few permission denials — use an error key rather than message.

object
error
required
string
Examples
Examplemissing

No bearer token sent

{
"error": "JWT passport exception: Missing bearer token in request"
}

The resource does not exist, or does not belong to the given conversation.

Media typeapplication/json

Generic error envelope used by policy, binding and framework failures.

object
message
required

Human-readable description of the failure.

string
Examples
Examplemissing
{
"message": "No query results for model [App\\Models\\Chat\\Chat] 99999999"
}

The request body or query string failed validation.

Media typeapplication/json
object
message
required

The first validation message.

string
errors
required

Validation messages keyed by field name.

object
key
additional properties
Array<string>
Examples
Exampleinvalid
{
"message": "The content field is required.",
"errors": {
"content": [
"The content field is required."
]
}
}

Rate limit exceeded. Retry after the window resets.

Media typeapplication/json

Generic error envelope used by policy, binding and framework failures.

object
message
required

Human-readable description of the failure.

string
Examples
Examplethrottled
{
"message": "Too Many Attempts."
}