Update an existing post
Input
application/jsoncontent
string
Optional
Updated content - main text for text posts, description for media, etc.
maxLength: 500000 bytesmaxGraphemes: 50000 graphemeseditNote
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 graphemesembed
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 itemslabels
refcom.atproto.label.defs#selfLabels
Optional
Updated self-applied content labels
langs
array
Optional
Updated languages (ISO 639-1)
maxLength: 3 itemstags
array
Optional
Updated topic tags
maxLength: 8 itemstitle
string
Optional
Updated title
maxLength: 3000 bytesmaxGraphemes: 300 graphemesuri
stringat-uri
Required
AT-URI of the post to update
Output
application/jsoncid
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.
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"
}