Skip to main content
Scheduling

Edit Scheduled Post

Update the content, media, platforms, or time of a scheduled post before it publishes.

Change what a scheduled post will publish. You can update the text, swap or add media, change which platforms and platform-specific options it targets, and optionally move the scheduled time — all in one call. Only works while the post is still scheduled (not yet published or already publishing).

The request body has the same shape as Create Post, minus publishNow. It replaces the editable fields, so send the full desired state (all platforms and media you want, not just the changes). PostPeer re-validates each platform and reconciles the credit difference: adding a platform charges the extra credits, removing one refunds them.

Endpoint

PUT https://api.postpeer.dev/v1/posts/scheduled/{postId}

Path Parameters

ParameterTypeDescription
postIdstringThe scheduled post ID

Request Body

FieldTypeRequiredDescription
contentstringYesNew post text body
platformsarrayYesReplacement target accounts (same shape as create, incl. platformSpecificData)
mediaItemsarrayNoReplacement media attachments. Omit to clear media
scheduledForstringNoNew ISO 8601 datetime. Omit to keep the current time
timezonestringNoIANA timezone. Omit to keep the current one

Example

curl -X PUT "https://api.postpeer.dev/v1/posts/scheduled/post_xyz789" \
  -H "x-access-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Updated caption for the launch!",
    "mediaItems": [
      { "type": "image", "url": "https://cdn.example.com/new-photo.jpg" }
    ],
    "platforms": [
      { "platform": "twitter", "accountId": "tw_123" },
      { "platform": "linkedin", "accountId": "li_456" }
    ],
    "scheduledFor": "2026-09-15T09:00:00Z",
    "timezone": "UTC"
  }'
import PostPeer from '@postpeer/node';

const client = new PostPeer();
const { data } = await client.posts.scheduled.edit({
	path: { postId: 'post_xyz789' },
	body: {
		content: 'Updated caption for the launch!',
		mediaItems: [
			{ type: 'image', url: 'https://cdn.example.com/new-photo.jpg' },
		],
		platforms: [
			{ platform: 'twitter', accountId: 'tw_123' },
			{ platform: 'linkedin', accountId: 'li_456' },
		],
		scheduledFor: '2026-09-15T09:00:00Z',
		timezone: 'UTC',
	},
});
from postpeer import PostPeer

with PostPeer() as client:
    post = client.posts.scheduled.edit(
        post_id="post_xyz789",
        content="Updated caption for the launch!",
        media_items=[
            {"type": "image", "url": "https://cdn.example.com/new-photo.jpg"}
        ],
        platforms=[
            {"platform": "twitter", "accountId": "tw_123"},
            {"platform": "linkedin", "accountId": "li_456"},
        ],
        scheduled_for="2026-09-15T09:00:00Z",
        timezone="UTC",
    )

Response

{
	"success": true,
	"message": "Scheduled post updated",
	"postId": "post_xyz789",
	"scheduledFor": "2026-09-15T09:00:00.000Z"
}

Status Codes

CodeMeaning
200Successfully updated
400Invalid payload or a platform rejected the content
402Not enough credits for the added platforms
403A target platform is not available on your plan
404Post not found
409Post already published or not in scheduled state
503Scheduling unavailable

On this page