---
title: "Edit a message"
method: PATCH
path: "/v1/tables/{tableId}/messages/{messageId}"
tags: ["Tables"]
---

# Edit a message

`PATCH /v1/tables/{tableId}/messages/{messageId}`

## Request

- Base URL: `https://api.banksync.io`
- URL: `https://api.banksync.io/v1/tables/{tableId}/messages/{messageId}`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Change the wording of a message the calling credential wrote, within 30 minutes of posting. Another author’s message, or one past its window, is a 409 `MESSAGE_NOT_EDITABLE`. The previous wording is kept.

## Path parameters

- `tableId` string, required: Table ID
- `messageId` string, required: Message ID

## Request body

- object
  - `body` string, required

## Response `200`

Message edited

- object
  - `success` true, required
  - `data` object, required
    - `id` string, required
    - `workspaceId` string, required
    - `tableId` string, required
    - `rowId` string, required
    - `author` union, required
      - object
        - `kind` 'user', required
        - `userId` string, required
      - object
        - `kind` 'sync', required
        - `feedId` string, required
        - `jobId` string
        - `cause` object
          - `automationId` string, required
          - `runId` string, required
          - `depth` integer, required
          - `untrustedSender` true
      - object
        - `kind` 'extractor', required
        - `feedId` string, required
        - `jobId` string
        - `untrustedSender` true
      - object
        - `kind` 'import', required
        - `importId` string, required
        - `userId` string, required
      - object
        - `kind` 'api', required
        - `clientId` string, required
      - object
        - `kind` 'system', required
        - `reason` string, required
      - object
        - `kind` 'automation', required
        - `automationId` string, required
        - `revision` string, required
        - `grantId` string, required
        - `runId` string, required
        - `node` string, required
        - `startedBy` ActorRef, required (recursive)
        - `depth` integer, required
        - `untrustedSender` true
    - `as` string
    - `body` string, required
    - `bodyHtml` string
    - `createdAt` string, required
    - `editedAt` string
    - `pinned` boolean
    - `resolvedAt` string
    - `resolvedBy` union
      - object
        - `kind` 'user', required
        - `userId` string, required
      - object
        - `kind` 'sync', required
        - `feedId` string, required
        - `jobId` string
        - `cause` object
          - `automationId` string, required
          - `runId` string, required
          - `depth` integer, required
          - `untrustedSender` true
      - object
        - `kind` 'extractor', required
        - `feedId` string, required
        - `jobId` string
        - `untrustedSender` true
      - object
        - `kind` 'import', required
        - `importId` string, required
        - `userId` string, required
      - object
        - `kind` 'api', required
        - `clientId` string, required
      - object
        - `kind` 'system', required
        - `reason` string, required
      - object
        - `kind` 'automation', required
        - `automationId` string, required
        - `revision` string, required
        - `grantId` string, required
        - `runId` string, required
        - `node` string, required
        - `startedBy` ActorRef, required (recursive)
        - `depth` integer, required
        - `untrustedSender` true
    - `deletedAt` string
    - `role` 'message' | 'note' | 'system'
    - `label` string
    - `audience` 'staff' | 'participants' | 'everyone'
    - `origin` 'console' | 'app' | 'email' | 'api' | 'web'
    - `publishedAt` string
    - `moderation` object
      - `state` 'visible' | 'hidden' | 'removed', required
      - `by` union
        - object
          - `kind` 'user', required
          - `userId` string, required
        - object
          - `kind` 'sync', required
          - `feedId` string, required
          - `jobId` string
          - `cause` object
            - `automationId` string, required
            - `runId` string, required
            - `depth` integer, required
            - `untrustedSender` true
        - object
          - `kind` 'extractor', required
          - `feedId` string, required
          - `jobId` string
          - `untrustedSender` true
        - object
          - `kind` 'import', required
          - `importId` string, required
          - `userId` string, required
        - object
          - `kind` 'api', required
          - `clientId` string, required
        - object
          - `kind` 'system', required
          - `reason` string, required
        - object
          - `kind` 'automation', required
          - `automationId` string, required
          - `revision` string, required
          - `grantId` string, required
          - `runId` string, required
          - `node` string, required
          - `startedBy` ActorRef, required (recursive)
          - `depth` integer, required
          - `untrustedSender` true
      - `reason` string
      - `at` string
    - `idempotencyKey` string
    - `attachments` object[]
      - `id` string, required
      - `filename` string, required
      - `contentType` string, required
      - `sizeBytes` integer, required

## Other responses

- `400`: Validation failed, or a read-only field was written — `code` names the refusal and `details[]` the offending field or cell
- `401`: Unauthorized
- `403`: Forbidden — missing scope, insufficient role, or plan limit reached
- `404`: Not found

---

[API](https://skmtc.dev/banksync/apis/banksync-api.md) · [All operations](https://skmtc.dev/banksync/apis/banksync-api/llms.txt) · [OpenAPI document](https://skmtc.dev/banksync/apis/banksync-api/revisions/94465f5ee922?raw)
