---
title: "Mark messages as seen"
method: POST
path: "/v1/messages/batch/seen"
tags: ["Messages"]
---

# Mark messages as seen

`POST /v1/messages/batch/seen`

Marks the given messages as `seen`. This indicates that the user has viewed the message in their feed or inbox. Read more about message engagement statuses [here](/send-notifications/message-statuses#engagement-status).

## Request body

- BatchMessagesStatusRequest — Request to update the status of multiple messages in batch.
  - `message_ids` string[], required — The message IDs to update the status of.

## Response `200`

OK

- Message[] — The list of messages that were updated.
  - `__typename` string, required — The typename of the schema.
  - `actors` RecipientReference[] — One or more actors that are associated with this message. Note: this is a list that can contain up to 10 actors if the message is produced from a [batch](/designing-workflows/batch-function).
    - union — A reference to a recipient, either a user identifier (string) or an object reference (ID, collection).
      - string — The ID of the user which is used as the reference for the recipient.
      - object — A reference to a recipient object.
        - `collection` string — The collection the recipient object belongs to.
        - `id` string — An identifier for the recipient object.
  - `archived_at` string, date-time, nullable — Timestamp when the message was archived.
  - `channel_id` string, uuid, required — The ID for the channel the message was sent through.
  - `clicked_at` string, date-time, nullable — Timestamp when the message was clicked.
  - `data` object, nullable — Data associated with the message’s workflow run. Includes the workflow trigger request’s `data` payload merged with any additional data returned by a [fetch function](/designing-workflows/fetch-function). For messages produced after a [batch step](/designing-workflows/batch-function), includes the payload `data` from the most-recent trigger request (the final `activity` in the batch).
  - `engagement_statuses` string[], required — A list of engagement statuses.
  - `id` string, required — The unique identifier for the message.
  - `inserted_at` string, date-time, required — Timestamp when the resource was created.
  - `interacted_at` string, date-time, nullable — Timestamp when the message was interacted with.
  - `link_clicked_at` string, date-time, nullable — Timestamp when a link in the message was clicked.
  - `metadata` object, nullable — The metadata associated with the message.
  - `read_at` string, date-time, nullable — Timestamp when the message was read.
  - `recipient` union, required — A reference to a recipient, either a user identifier (string) or an object reference (ID, collection).
    - string — The ID of the user which is used as the reference for the recipient.
    - object — A reference to a recipient object.
      - `collection` string — The collection the recipient object belongs to.
      - `id` string — An identifier for the recipient object.
  - `scheduled_at` string, date-time, nullable — Timestamp when the message was scheduled to be sent.
  - `seen_at` string, date-time, nullable — Timestamp when the message was seen.
  - `source` object, required — The workflow that triggered the message.
    - `__typename` string, required
    - `categories` string[], required — The categories associated with the message.
    - `key` string, required — The key of the workflow that triggered the message.
    - `step_ref` string, nullable — The step reference for the step in the workflow that generated the message.
    - `version_id` string, uuid, required — The ID of the version of the workflow that triggered the message.
  - `status` 'queued' | 'sent' | 'delivered' | 'delivery_attempted' | 'undelivered' | 'not_sent' | 'bounced', required — The message delivery status.
  - `tenant` string, nullable — The ID of the `tenant` associated with the message. Only present when a `tenant` is provided on a workflow trigger request.
  - `updated_at` string, date-time, required — The timestamp when the resource was last updated.
  - `workflow` string, nullable — The key of the workflow that generated the message.

## Changes

- **2025-08-27** `de67f68640a0` — 9 info
  - the response property `items/allOf[subschema #1: Message]/__typename` became required for the status `200`
  - the response property `items/allOf[subschema #1: Message]/channel_id` became required for the status `200`
  - the response property `items/allOf[subschema #1: Message]/engagement_statuses` became required for the status `200`
  - the response property `items/allOf[subschema #1: Message]/id` became required for the status `200`
  - …5 more
- **2025-07-10** `592610bb4a05` — 1 info
  - added the optional property `items/allOf[subschema #1: Message]/source/step_ref` to the response with the `200` status

[Change history](https://skmtc.dev/knocklabs/apis/knock-api/changes/v1/messages/batch/seen/post.md)

---

[API](https://skmtc.dev/knocklabs/apis/knock-api.md) · [All operations](https://skmtc.dev/knocklabs/apis/knock-api/llms.txt) · [OpenAPI document](https://skmtc.dev/knocklabs/apis/knock-api/revisions/7e6c3d2d08fa?raw)
