# Updating Posts

Modify an existing post—whether scheduled or already published—across your social networks. This endpoint handles network-specific constraints and supports advanced features like recycling and recurring schedules.

### Requirements

* **Authentication**: Bearer API token
* **Scope**: `posts`
* **Headers**:
  * `Authorization: Bearer-API YOUR_API_KEY`
  * `Publer-Workspace-Id: YOUR_WORKSPACE_ID`

### Endpoint

Updates an existing post by ID. The behavior differs depending on whether the post is scheduled or already published.

```http
PUT /api/v1/posts/:id
```

### Parameter Reference

<table data-header-hidden><thead><tr><th width="117.247802734375"></th><th width="99.66619873046875"></th><th width="116.20751953125"></th><th></th></tr></thead><tbody><tr><td>Parameter</td><td>Type</td><td>Required</td><td>Description</td></tr><tr><td>text</td><td>string</td><td>Yes</td><td>The main content text of the post</td></tr><tr><td>title</td><td>string</td><td>No</td><td>Title for the post (used in some networks)</td></tr></tbody></table>

#### Special Cases <a href="#special-cases" id="special-cases"></a>

When the post is published, you can only update network-specific params.

<table data-header-hidden><thead><tr><th width="157.33676147460938"></th><th></th></tr></thead><tbody><tr><td>Network</td><td>Updatable Fields</td></tr><tr><td>LinkedIn</td><td>• Text content</td></tr><tr><td>YouTube</td><td><p>• Title (limited to 100 characters)</p><p>• Text/description (limited to 5000 characters)</p></td></tr><tr><td>Google Business</td><td>• Text content (called "summary" in Google's API, limited to 1500 characters)</td></tr><tr><td>Facebook</td><td><p>• Text content (both description and message fields)</p><p>• Title (only for video posts, in the name field)</p></td></tr><tr><td>WordPress</td><td><p>• Title</p><p>• Content (HTML converted)</p></td></tr><tr><td>Telegram</td><td>• For status updates and links: Text content</td></tr><tr><td>Mastodon</td><td><p>• Text content</p><p>• Title</p></td></tr></tbody></table>

**Networks Not Supporting Published Post Updates**

For the following networks, only labels can be updated in Publer's database after a post is published:

* Twitter/X (polls cannot be edited after publishing)
* Pinterest
* Instagram
* Threads
* Bluesky

#### Recurring Posts

If the post is a recurring post, the update will be applied to all future child posts in the recurring series. Already published child posts will not be affected.

### Notes

* When updating a post that requires approval, a notification will be sent to the appropriate workspace members.
* Changes to published posts will be reflected both in Publer's database and on the social media platform (for supported networks).

## Update Post

> Updates an existing post. The behavior differs depending on whether the post is already published or not.

```json
{"openapi":"3.1.1","info":{"title":"Publer API","version":"1.0.0"},"tags":[{"name":"Posts","description":"Endpoints for managing social media posts"}],"servers":[{"url":"https://app.publer.com/api/v1"}],"security":[{"BearerApiAuth":[]}],"components":{"securitySchemes":{"BearerApiAuth":{"type":"apiKey","name":"Authorization","in":"header","description":"API key authentication. Format: \"Bearer-API YOUR_API_KEY\""}},"schemas":{"PostDetail":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the post"},"text":{"type":"string","description":"Post text content"},"state":{"type":"string","description":"Current state of the post"},"type":{"type":"string","description":"Type of post"},"account_id":{"type":"string","description":"ID of the social account"},"account":{"type":"object","description":"Details of the social account","properties":{"id":{"type":"string"},"type":{"type":"string"},"name":{"type":"string"},"picture":{"type":"string"}}},"user":{"type":"object","description":"User who created the post","properties":{"id":{"type":"string"},"name":{"type":"string"},"picture":{"type":"string"}}},"scheduled_at":{"type":"string","description":"Scheduled publication time"},"created_at":{"type":"string","description":"Creation timestamp"},"updated_at":{"type":"string","description":"Last update timestamp"},"post_link":{"type":"string","description":"Link to the published post on the social network"},"media":{"type":"array","description":"Media items attached to the post","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"},"alt_text":{"type":"string"}}}},"link":{"type":"object","description":"Link details for link posts","properties":{"url":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image_url":{"type":"string"}}},"labels":{"type":"array","description":"Labels assigned to this post","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"}}}},"auto":{"type":"boolean","description":"Whether this post was auto-scheduled"},"recycling":{"type":"object","description":"Recycling settings if applicable","properties":{"solo":{"type":"boolean"},"gap":{"type":"integer"},"gap_freq":{"type":"string"},"start_date":{"type":"string"},"expire_count":{"type":"integer"}}},"recurring":{"type":"object","description":"Recurring settings if applicable","properties":{"frequency":{"type":"string"},"repeat_every":{"type":"integer"},"weekdays":{"type":"array","items":{"type":"string"}},"start_date":{"type":"string"}}}}},"401ErrorResponseWithWorkspace":{"type":"object","properties":{"errors":{"type":"array","description":"List of error messages","items":{"type":"string"}}}},"403ErrorResponse":{"type":"object","properties":{"errors":{"type":"array","description":"List of error messages","items":{"type":"string"}}}},"422ErrorResponse":{"type":"object","properties":{"errors":{"type":"array","description":"List of error messages","items":{"type":"string"}}}}}},"paths":{"/posts/{id}":{"put":{"summary":"Update Post","description":"Updates an existing post. The behavior differs depending on whether the post is already published or not.","tags":["Posts"],"parameters":[{"schema":{"type":"string"},"name":"Publer-Workspace-Id","in":"header","description":"ID of the workspace containing the post","required":true},{"schema":{"type":"string"},"name":"id","in":"path","description":"ID of the post to update","required":true}],"responses":{"200":{"description":"Post updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostDetail"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/401ErrorResponseWithWorkspace"}}}},"403":{"description":"Forbidden - You cannot update a post that has been published with approval","content":{"application/json":{"schema":{"$ref":"#/components/schemas/403ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Error message explaining why the post couldn't be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/422ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"post":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The main content text of the post"},"title":{"type":"string","description":"Title for the post (used in some networks)"}}}}}}},"description":"Post update parameters","required":true}}}}}
```

### Related Resources

* [List Posts API](/docs/api-reference/posts.md) - Retrieve and filter posts
* [Accounts API](/docs/api-reference/accounts.md) - Manage social media accounts
* [Media API](/docs/posting/create-posts/media-handling.md) - Upload and manage media for posts


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://publer.com/docs/posting/update-posts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
