Recent conversations of a user
const url = 'https://chat.work.optidata.cloud/api/users/3f1c9a52-4d7e-4b31-9c02-77a1b6e5d840/dashboard?limit=5';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”UUID of the user. Read your own from GET /me.
Query Parameters
Section titled “Query Parameters”How many conversations to return.
Responses
Section titled “ Responses ”The user’s most recent conversations.
The compact conversation shape used by the dashboard: enough to render a
row, plus a link that opens it in Talk.
object
Deep link that opens this conversation in Talk.
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
One message. type separates what a person wrote (USER) from what the
service recorded about the conversation (SYSTEM) — a rename, a join, a
departure. Render SYSTEM messages as notices, not as chat bubbles; their
data holds the details of what happened.
object
Author of the message.
The message this one replies to, or null.
Stable identifier of the message. This is what
POST /chats/messages/forward takes.
The client-supplied value that made the send idempotent.
The message text.
Structured payload. On a SYSTEM message it describes the event; on a
USER message it carries the mentioned user ids, when there are any.
Where the message came in from — chat for Talk itself, or the name of
the external messaging integration that relayed it.
true when the message was copied here from another conversation.
1 when the caller has favourited this message, 0 otherwise.
How many participants have seen the message.
Position of the message within the conversation.
The trimmed user record embedded in message payloads and search results.
object
Details of the linked external-messaging contact, present when the
embedded user is one (type 2); null otherwise. Open object.
A file attached to a message.
object
Alternative identifier accepted by the attachment content endpoints.
Size in bytes.
true for a voice message.
Playback length in seconds, for audio and video.
Thumbnail, when one was generated.
Storage metadata. Its keys depend on where the file is stored, so treat it as an open object.
Preview of the first link found in the text, when there is one.
Reactions on the message: the ids of the users who left each emoji, keyed by the emoji. Empty when nobody has reacted.
object
A poll carried by a message. total_votes and the per-option
votes_count / voter_ids are computed for every message payload, so a
client can render the result without a second call.
object
Whether a voter may pick more than one option.
object
Display order, starting at 0.
When the user pinned the conversation, or null.
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.
Whether an unread message mentions this user.
Set when the user has left or been removed.
A person in the tenant.
object
Numeric id, used on the conversation and participant routes.
Stable identifier of the user across the Optiwork suite.
Identifier of the company the user belongs to.
null for a person. 0 marks the Optiwork AI assistant, 1 a bot and
2 a contact reached over an external messaging integration.
The colour used for this user’s name in the interface.
Set when the user has been removed from the company.
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.
A trimmed view of the newest message.
object
The trimmed user record embedded in message payloads and search results.
object
Details of the linked external-messaging contact, present when the
embedded user is one (type 2); null otherwise. Open object.
Examples
[ { "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.
Authentication failures — and a few permission denials — use an error
key rather than message.
object
Examples
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.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examples
{ "message": "No query results for model [App\\Models\\Chat\\Chat] 99999999"}The request body or query string failed validation.
object
The first validation message.
Validation messages keyed by field name.
object
Examples
{ "message": "The content field is required.", "errors": { "content": [ "The content field is required." ] }}Rate limit exceeded. Retry after the window resets.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examples
{ "message": "Too Many Attempts."}