Update scheduled post
<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>
Edits the content or the schedule of a post that hasn't published yet. Send only the fields you want to change: an omitted field keeps its current value, and an empty body fails with a 400.
proposal and scheduled are the only editable states. Every other one answers 409 naming the state that blocked the edit: publishing while the publisher has the post, posted and failed once it's over, publish_outcome_unknown when the platform's answer was lost, and the needs_reconnect and not_materialized_plan_limit a scheduling run can leave behind. platform isn't editable in any state, because publishing to a different account is a new post rather than an edit.
<Note>Only the fields documented here are accepted, platform included, and any other field in the body fails with a 422. So don't read a post and send the whole object back: id, app_id, status, workflow_id and the rest of the response are Base44's, and a round-trip like that is rejected rather than partly applied. Send only the fields you're changing.</Note>
image_url and image_prompt are the only fields you can clear by sending null. A null for any other field fails with a 422.
Editing a post also takes over its content. A post generated from a content plan stops tracking that plan once you edit it, so regenerating the plan no longer overwrites what you wrote.
Editing scheduled_at only moves a post you haven't scheduled yet. A post that already carries a workflow_id is bound to the instant it had when you ran Start scheduling posts, and it publishes then even though the calendar reports your new time. Content edits always take effect, because the post is read again at publish time. To move a post that's already scheduled, delete it and create it again at the new time.
The social calendar endpoints share two rate limits: 20 requests per minute across creating, editing, deleting and approving posts, and 40 requests per minute across the rest. This endpoint counts against the 20.
<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>
Path parameters
ID of the post, as returned by List scheduled posts.
ID of the post, as returned by List scheduled posts.
ID of the app whose social calendar you want.
ID of the app whose social calendar you want.
Request body
Example request
{
"title": "Ship a CRM in an afternoon",
"body": "We replaced our lead spreadsheet with an app we built in an afternoon.",
"scheduled_at": "2026-09-16T09:30:00Z",
"scheduled_timezone": "Asia/Jerusalem",
"hook": "social_proof",
"best_time_reason": "Our audience checks LinkedIn before lunch.",
"hashtags": [
"buildinpublic",
"crm"
],
"image_url": "https://cdn.example.com/posts/crm-launch-v2.png",
"image_prompt": "A freelancer closing a deal on a laptop, warm morning light"
}Response
The post after the edit.
Example response
{
"id": "6886b8d390dc7e2f4a2c91b3",
"app_id": "6820f3a4e7b91d003c45a1f2",
"plan_id": "8c1f9a2e-3b7d-4c5e-9f01-2a3b4c5d6e7f",
"source_post_id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
"platform": "linkedin",
"title": "Ship a CRM in an afternoon",
"body": "We replaced our lead spreadsheet with an app we built in an afternoon. Here's what changed.",
"hook": "pain_point",
"scheduled_at": "2026-09-15T14:00:00",
"scheduled_local_at": "2026-09-15T17:00:00+03:00",
"scheduled_timezone": "Asia/Jerusalem",
"best_time_reason": "Weekday afternoons get the most engagement for this audience.",
"hashtags": [
"buildinpublic",
"crm"
],
"image_url": "https://cdn.example.com/posts/crm-launch.png",
"image_prompt": "A freelancer closing a deal on a laptop, warm morning light",
"status": "scheduled",
"workflow_id": "68a1c4f0d21b4e0a3c77e912"
}Changes
No recorded changes to this endpoint across all 1 revision of this API.