social.coves.community.post.update

coves.social

Documentation

Update an existing post

main procedure

Update an existing post

Input

Encodingapplication/json
content string Optional

Updated content - main text for text posts, description for media, etc.

maxLength: 500000 bytesmaxGraphemes: 50000 graphemes
editNote string Optional

DEPRECATED, retained for backward compatibility: an optional note explaining the edit. This field ships on main; removing it is a non-additive break, so it stays declared as an optional input until a new-NSID change retires it.

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
embed union Optional

Updated embedded content (note: changing embed type may be restricted)

facets array Optional

Updated annotations for rich text (mentions, links, formatting, block structure)

maxLength: 200 items
langs array Optional

Updated languages (ISO 639-1)

maxLength: 3 items
tags array Optional

Updated topic tags

maxLength: 8 items
title string Optional

Updated title

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
uri stringat-uri Required

AT-URI of the post to update

Output

Encodingapplication/json
cid stringcid Required

New CID of the updated post

uri stringat-uri Required

AT-URI of the updated post

Errors

PostNotFound Post not found
NotAuthorized User is not authorized to edit this post
ConcurrentModification The post changed between being read and being written, so the edit was composed against content that no longer stands. Re-read the post and re-apply the edit; the server does not merge, because re-applying server-side would silently erase a change the editor never saw.
NoAuthorCredentials The service holds no credentials it can write to the author's repository with. Distinct from an expired caller session: signing in again is the fix for a person and no fix at all for a non-interactive author whose stored grant was revoked.
EditWindowExpired DEPRECATED, retained for backward compatibility: no edit window is enforced - a post is editable by its author for as long as it exists. This name ships on main; removing a declared error is a non-additive break, so it stays declared until a new-NSID change retires it.
InvalidUpdate DEPRECATED, retained for backward compatibility: never emitted. Refusals this once covered are answered by name instead - an edit naming a different community is an InvalidRequest validation error, and a post whose collection is not editable is the same. This name ships on main; removing a declared error is a non-additive break, so it stays declared until a new-NSID change retires it.
Try It

Requests are sent directly from your browser. Some servers may block requests due to CORS.

Base URL for XRPC calls (e.g., https://bsky.social)
Enter valid JSON for the request body
View raw schema
{
  "description": "Update an existing post",
  "errors": [
    {
      "description": "Post not found",
      "name": "PostNotFound"
    },
    {
      "description": "User is not authorized to edit this post",
      "name": "NotAuthorized"
    },
    {
      "description": "The post changed between being read and being written, so the edit was composed against content that no longer stands. Re-read the post and re-apply the edit; the server does not merge, because re-applying server-side would silently erase a change the editor never saw.",
      "name": "ConcurrentModification"
    },
    {
      "description": "The service holds no credentials it can write to the author's repository with. Distinct from an expired caller session: signing in again is the fix for a person and no fix at all for a non-interactive author whose stored grant was revoked.",
      "name": "NoAuthorCredentials"
    },
    {
      "description": "DEPRECATED, retained for backward compatibility: no edit window is enforced - a post is editable by its author for as long as it exists. This name ships on main; removing a declared error is a non-additive break, so it stays declared until a new-NSID change retires it.",
      "name": "EditWindowExpired"
    },
    {
      "description": "DEPRECATED, retained for backward compatibility: never emitted. Refusals this once covered are answered by name instead - an edit naming a different community is an InvalidRequest validation error, and a post whose collection is not editable is the same. This name ships on main; removing a declared error is a non-additive break, so it stays declared until a new-NSID change retires it.",
      "name": "InvalidUpdate"
    }
  ],
  "input": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "content": {
          "description": "Updated content - main text for text posts, description for media, etc.",
          "maxGraphemes": 50000,
          "maxLength": 500000,
          "type": "string"
        },
        "editNote": {
          "description": "DEPRECATED, retained for backward compatibility: an optional note explaining the edit. This field ships on main; removing it is a non-additive break, so it stays declared as an optional input until a new-NSID change retires it.",
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "embed": {
          "description": "Updated embedded content (note: changing embed type may be restricted)",
          "refs": [
            "social.coves.embed.images",
            "social.coves.embed.video",
            "social.coves.embed.external",
            "social.coves.embed.post"
          ],
          "type": "union"
        },
        "facets": {
          "description": "Updated annotations for rich text (mentions, links, formatting, block structure)",
          "items": {
            "ref": "social.coves.richtext.facet",
            "type": "ref"
          },
          "maxLength": 200,
          "type": "array"
        },
        "labels": {
          "description": "Updated self-applied content labels",
          "ref": "com.atproto.label.defs#selfLabels",
          "type": "ref"
        },
        "langs": {
          "description": "Updated languages (ISO 639-1)",
          "items": {
            "format": "language",
            "type": "string"
          },
          "maxLength": 3,
          "type": "array"
        },
        "tags": {
          "description": "Updated topic tags",
          "items": {
            "maxGraphemes": 64,
            "maxLength": 640,
            "type": "string"
          },
          "maxLength": 8,
          "type": "array"
        },
        "title": {
          "description": "Updated title",
          "maxGraphemes": 300,
          "maxLength": 3000,
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the post to update",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri"
      ],
      "type": "object"
    }
  },
  "output": {
    "encoding": "application/json",
    "schema": {
      "properties": {
        "cid": {
          "description": "New CID of the updated post",
          "format": "cid",
          "type": "string"
        },
        "uri": {
          "description": "AT-URI of the updated post",
          "format": "at-uri",
          "type": "string"
        }
      },
      "required": [
        "uri",
        "cid"
      ],
      "type": "object"
    }
  },
  "type": "procedure"
}

Lexicon Garden

@