> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suprsend.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk Update Message Status

> Change the status of messages by passing their id and notification action.

<Note>
  **Channel applicability for `action`**

  * `seen`, `clicked` — all channels
  * `dismissed` — mobile push only (`androidpush`, `iospush`)
  * `read`, `unread`, `archived`, `unarchived` — `inbox` only
</Note>


## OpenAPI

````yaml PATCH /v1/bulk/message
openapi: 3.1.1
info:
  title: SuprSend API
  description: APIs supported on suprsend platform
  version: 1.2.2
servers:
  - url: https://hub.suprsend.com
security:
  - sec0: []
  - BearerAuth: []
paths:
  /v1/bulk/message:
    patch:
      summary: Bulk Update Message Status
      description: >-
        Change the status of messages by passing their id and notification
        action.
      operationId: bulk-update-messages
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - messages
              properties:
                messages:
                  type: array
                  minItems: 1
                  maxItems: 1000
                  description: >-
                    List of messages to update. No duplicate `message_id`s
                    allowed.
                  items:
                    type: object
                    required:
                      - message_id
                      - action
                    properties:
                      message_id:
                        type: string
                        description: Message-id to update.
                      action:
                        type: string
                        enum:
                          - seen
                          - clicked
                          - dismissed
                          - read
                          - unread
                          - archived
                          - unarchived
                        description: >
                          Action to apply to the message. Each action sets the
                          corresponding status or flag.


                          - `seen` — Mark the message as seen by the recipient. 

                          - `clicked` — Mark the message as clicked or
                          interacted with. 

                          - `dismissed` — Mark the message as dismissed (cleared
                          without taking action).

                          - `read` — Mark the inbox message as read. Applicable
                          for Inbox channel only. Also sets flag is_read = true.

                          - `unread` — Revert a previously read inbox message
                          back to unread. Applicable for Inbox channel only.
                          Sets flag is_read = false.

                          - `archived` — Archive the inbox message (sets the
                          `is_archived` flag to true; status is preserved).
                          Applicable for Inbox channel only.

                          - `unarchived` — Unarchive a previously archived inbox
                          message. (sets the `is_archived` flag to false; status
                          is preserved). Applicable for Inbox channel only.


                          **Status progression (one-way):** `triggered` →
                          `sent_by_vendor` → `delivered` → `seen` → `read` ->
                          `clicked` / `dismissed`. Once a message reaches a
                          later status, it cannot be moved back to an earlier
                          one — for example, marking a `clicked` message as
                          `seen` will not change the status to `seen`.


                          **Toggles (reversible):** `read` ↔ `unread` and
                          `archived` ↔ `unarchived` flip independent flags and
                          can be applied in either direction any number of
                          times.
            examples:
              mark-as-seen:
                summary: Mark messages as seen
                value:
                  messages:
                    - message_id: 01HVXXXXXXXXXXXXXXXXXXXX01
                      action: seen
                    - message_id: 01HVXXXXXXXXXXXXXXXXXXXX02
                      action: seen
              mixed-actions:
                summary: Apply different actions in one call
                value:
                  messages:
                    - message_id: 01HVXXXXXXXXXXXXXXXXXXXX01
                      action: read
                    - message_id: 01HVXXXXXXXXXXXXXXXXXXXX02
                      action: archived
      responses:
        '202':
          description: >-
            Bulk update accepted. Inspect each record's `status_code` and
            `error` for individual outcomes — a `null` `error` means success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  records:
                    type: array
                    description: Per-message results, in the same order as the request.
                    items:
                      $ref: '#/components/schemas/BulkPatchItemResult'
              example:
                records:
                  - message_id: 01HVXXXXXXXXXXXXXXXXXXXX01
                    status_code: 202
                    error: null
                  - message_id: 01HVXXXXXXXXXXXXXXXXXXXX02
                    status_code: 404
                    error:
                      type: not_found
                      message: not found
      deprecated: false
      security:
        - BearerAuth: []
components:
  schemas:
    BulkPatchItemResult:
      type: object
      description: >-
        Per-message outcome from the bulk patch endpoint. Success is implied by
        a null `error` field.
      properties:
        message_id:
          type: string
          description: Message-id to update.
        status_code:
          type: integer
          description: |
            Per-item status code:
            - `202` — success
            - `404` — `not_found`
            - `422` — `status_blocked` or `action_not_supported`
            - `500` — `internal_error`
        error:
          type: object
          nullable: true
          description: Null on success, populated on failure.
          required:
            - type
            - message
          properties:
            type:
              type: string
              description: >
                Machine-readable key for why the item failed:

                - `not_found` — message_id not found in this workspace

                - `status_blocked` — message is in a terminal state
                (`trigger_failed`, `trigger_blocked`, `failure_by_vendor`,
                `not_to_be_triggered`) that cannot be overridden

                - `action_not_supported` — action is invalid for the message's
                channel (for example, `dismissed` on inbox, `read` on sms)

                - `internal_error` — Internal error at SuprSend end. Reach out
                to support if you get this error code.
              enum:
                - not_found
                - status_blocked
                - action_not_supported
                - internal_error
            message:
              type: string
              description: Human-readable detail. Do not parse programmatically.
  securitySchemes:
    sec0:
      type: apiKey
      in: header
      name: Authorization
      x-bearer-format: bearer
      description: >-
        Bearer authentication header of the form `Bearer <token>`, where <token>
        is your auth token.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API_Key
      description: >-
        Pass as `Bearer <API_KEY>`. Get API Key from SuprSend dashboard
        Developers -> API Keys section.

````