Skip to main content
PATCH
Update scheduled post

Authorizations

api_key
string
header
required

Personal API key.

Path Parameters

post_id
string
required

ID of the post, as returned by List scheduled posts.

Pattern: ^[0-9a-fA-F]{24}$
app_id
string
required

ID of the app whose social calendar you want.

Body

application/json

Editable content and schedule fields. platform is absent on purpose: switching the target account changes which connector must publish the post, which is a new post rather than an edit.

Every field is optional so an omitted one stays untouched. That makes None ambiguous, so an explicit null is rejected for the fields ScheduledPost stores non-nullable — otherwise it would write a row the model cannot load. Only the image fields can genuinely be cleared.

title
string | null

New title for the post. Omit it to keep the current one; an explicit null fails with a 422.

Required string length: 1 - 300
Example:

"Ship a CRM in an afternoon"

body
string | null

New body text. Omit it to keep the current one; an explicit null fails with a 422.

Maximum string length: 50000
Example:

"We replaced our lead spreadsheet with an app we built in an afternoon."

scheduled_at
string<date-time> | null

New publish time, as an ISO 8601 timestamp between the years 2000 and 2100. This only moves a post that isn't scheduled yet: once the post has a workflow_id it publishes at the time it was handed over with. An explicit null fails with a 422.

Example:

"2026-09-16T09:30:00Z"

scheduled_timezone
string | null

New IANA timezone for scheduled_local_at. It never moves the instant the post publishes. An explicit null fails with a 422.

Maximum string length: 64
Example:

"Asia/Jerusalem"

hook
string | null

New angle for the post. An explicit null fails with a 422.

Maximum string length: 500
Example:

"social_proof"

best_time_reason
string | null

New reason shown alongside the post's time. An explicit null fails with a 422.

Maximum string length: 1000
Example:

"Our audience checks LinkedIn before lunch."

hashtags
string[] | null

Replacement list of up to 30 hashtags, without the leading #. Send [] to publish none; an explicit null fails with a 422.

Maximum array length: 30
Maximum string length: 100
Example:
image_url
string | null

New HTTPS image URL, or null to remove the image. Removing it from an Instagram post means the post is rejected when it publishes.

Maximum string length: 2000
Example:

"https://cdn.example.com/posts/crm-launch-v2.png"

image_prompt
string | null

New image prompt, or null to clear it.

Maximum string length: 2000
Example:

"A freelancer closing a deal on a laptop, warm morning light"

Response

The post after the edit.

id
string
required

ID of the post. Pass it as post_id to the other social calendar endpoints.

Example:

"6886b8d390dc7e2f4a2c91b3"

app_id
string
required

ID of the app the post belongs to.

Example:

"6820f3a4e7b91d003c45a1f2"

plan_id
string | null
required

ID of the content plan the post was generated from, or null for a post created through Create scheduled post.

Example:

"8c1f9a2e-3b7d-4c5e-9f01-2a3b4c5d6e7f"

source_post_id
string | null
required

ID this post has inside the content plan it came from, or null for a post created through the API.

Example:

"3f2504e0-4f89-11d3-9a0c-0305e82c3301"

platform
string
required

Account the post publishes to. Base44 publishes to instagram and linkedin. A post generated from a content plan can also name x, tiktok, reddit or facebook, which Base44 plans for but can't publish, and scheduling such a post fails it.

Example:

"linkedin"

title
string
required

Title of the post. It labels the post on the calendar and isn't published as text, except on LinkedIn, where a post with an image sends it as the image's title.

Example:

"Ship a CRM in an afternoon"

body
string
required

Body text of the post. Base44 publishes this followed by hashtags, so leave the tags out of it.

Example:

"We replaced our lead spreadsheet with an app we built in an afternoon. Here's what changed."

hook
string
required

The angle the post leads with. A plan-generated post carries the angle the planner picked, such as pain_point or social_proof; a post you create carries whatever you sent, or an empty string.

Example:

"pain_point"

cover_index
integer
required

Zero-based position of the post in the series its content plan generated, which is how the calendar picks its cover image. Always 0 for a post created through the API.

Example:

0

scheduled_at
string<date-time>
required

When the post publishes, always in UTC. A post read back from the calendar carries no offset (2026-09-15T14:00:00), while the one Create scheduled post returns carries +00:00. Read both as UTC.

Example:

"2026-09-15T14:00:00"

scheduled_local_at
string
required

The same instant as scheduled_at, rendered in scheduled_timezone as an ISO 8601 timestamp. Display only.

Example:

"2026-09-15T17:00:00+03:00"

scheduled_timezone
string
required

IANA timezone scheduled_local_at is rendered in. It never moves the instant the post publishes.

Example:

"Asia/Jerusalem"

best_time_reason
string
required

Why this time was picked, written by the planner for a plan-generated post. Empty unless something set it.

Example:

"Weekday afternoons get the most engagement for this audience."

hashtags
string[]
required

Hashtags published after body, without the leading #. A leading # you send is stripped before publishing.

Example:
image_url
string | null
required

HTTPS URL of the image published with the post, or null if it has none. An Instagram post needs one to publish.

Example:

"https://cdn.example.com/posts/crm-launch.png"

image_prompt
string | null
required

Prompt the post's image was generated from, or null if there is none. Kept for reference; this endpoint doesn't generate images from it.

Example:

"A freelancer closing a deal on a laptop, warm morning light"

status
string
required

Where the post is in its lifecycle: proposal before you approve it, scheduled once approved, publishing while it's going out, then posted. needs_reconnect means the platform account has to be reconnected, not_materialized_plan_limit that the workspace plan doesn't cover publishing, publish_outcome_unknown that the platform may have accepted the post but Base44 couldn't confirm it, and failed that the post can't go out.

Example:

"scheduled"

workflow_id
string | null
required

ID of the automation that publishes this post, set once Start scheduling posts hands it over, and null before that. Its presence is what tells you the publish time is fixed.

Example:

"68a1c4f0d21b4e0a3c77e912"