---
title: "mark chat messages as seen (blue ticks)"
method: POST
path: "/instances/{id}/client/action/send-seen"
tags: ["chat"]
---

# mark chat messages as seen (blue ticks)

`POST /instances/{id}/client/action/send-seen`

## Request

- Base URL: `https://waapi.app/api/v1`
- URL: `https://waapi.app/api/v1/instances/{id}/client/action/send-seen`
- Auth: HTTP bearer

Mark all messages in a chat as seen (read). This will show blue ticks (double check marks) to the sender only if both parties have read receipts enabled in their privacy settings. If read receipts are disabled by either party, the messages will be marked as delivered (gray ticks) instead.

## Path parameters

- `id` integer, required

## Request body

- object
  - `chatId` string, required: Chat ID <countrycode_short><usernumber>@c.us or @g.us for groups

## Response `200`

Request reached the instance. `data.status` reports whether the action was carried out; on error `data` carries `message` and `explanation`. Payload: Successfully marked chat messages as seen.

- object
  - `data` union: The action's outcome. `status: success` carries the payload; `status: error` is an `actionError`.
    - object
      - `status` 'success', required: Whether the instance carried the action out — the authoritative field. In this branch it is always `success`; when the instance refused the action the whole `data` object is an `actionError` with `status: error`, `message` and `explanation`.
      - `instanceId` union
        - integer
        - string
      - `data` object
        - `seenSend` boolean: Indicates if the seen status was successfully sent
    - ActionError: Shape of `data` when the instance refused the action. HTTP status is still 200 and the outer `status` is still `success`.
      - `status` 'error', required
      - `message` string
      - `explanation` string
      - `instanceId` union
        - integer
        - string
  - `links` object
    - `self` string
  - `status` 'success' | 'error': Whether the request reached the instance. `success` here does **not** mean the action was carried out — that is reported by `data.status`, which is the authoritative one. A malformed input arrives as `status: success` with `data.status: error`.

## Other responses

- `401`: Unauthorized — invalid or missing bearer token
- `403`: Forbidden — insufficient permissions or account blocked
- `404`: Not found — instance does not exist or does not belong to you
- `409`: Conflict — instance is not ready
- `422`: Validation error — invalid or missing request parameters
- `429`: Too many requests — rate limit exceeded

---

[API](https://skmtc.dev/waapi/apis/waapi-api-2.md) · [All operations](https://skmtc.dev/waapi/apis/waapi-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/waapi/apis/waapi-api-2/revisions/490302f75576?raw)
