Connection requirements, publishing examples, and limits for Facebook.
Requirements
Use a connected Facebook Page with pages_manage_posts, the Page’s CREATE_CONTENT task, and a healthy connection. Public-write availability must also be enabled. The returned capabilities are the final discovery check; new jobs can return 503 SERVICE_UNAVAILABLE while existing job replay, status, and cancellation remain available.
Supported formats
One Page per request, using a facebook object. FEED accepts nonblank text, up to 10 JPEG photos, or one video; it cannot mix images and videos. A URL in a text-only message may become a link post. REELS requires one video and allows message. STORY requires one JPEG or video and rejects message.
For formats that need media, complete the upload guide: reserve → PUT → confirm. Only confirmed mediaId values can be published.
Publish a post
Account and media UUIDs are illustrative; replace them with real IDs. Set your API key in the POSTEADY_API_KEY environment variable.
curl --request POST "https://www.posteady.com/api/v1/posts" \
--header "Authorization: Bearer $POSTEADY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"accountIds": [
"11111111-1111-4111-8111-111111111111"
],
"facebook": {
"requestId": "33333333-3333-4333-8333-333333333333",
"contentType": "FEED",
"message": "Our latest release is live"
}
}'Each JSON block below is a complete, separate request body. Supply real media IDs of the stated type and use a new requestId for each different operation. Keep the previous ID only when retrying that same operation.
Photo feed
{
"accountIds": [
"11111111-1111-4111-8111-111111111111"
],
"facebook": {
"requestId": "33333333-3333-4333-8333-333333333333",
"contentType": "FEED",
"items": [
{
"mediaId": "22222222-2222-4222-8222-222222222222"
}
]
}
}Video feed
{
"accountIds": [
"11111111-1111-4111-8111-111111111111"
],
"facebook": {
"requestId": "33333333-3333-4333-8333-333333333333",
"contentType": "FEED",
"items": [
{
"mediaId": "22222222-2222-4222-8222-222222222222"
}
]
}
}Reel
{
"accountIds": [
"11111111-1111-4111-8111-111111111111"
],
"facebook": {
"requestId": "33333333-3333-4333-8333-333333333333",
"contentType": "REELS",
"items": [
{
"mediaId": "22222222-2222-4222-8222-222222222222"
}
]
}
}Story
{
"accountIds": [
"11111111-1111-4111-8111-111111111111"
],
"facebook": {
"requestId": "33333333-3333-4333-8333-333333333333",
"contentType": "STORY",
"items": [
{
"mediaId": "22222222-2222-4222-8222-222222222222"
}
]
}
}Confirm success
HTTP 202 means the job was accepted. Store results[0].jobId, then read its status below and wait for status: published. Replace the illustrative ID with the returned value.
curl --request GET "https://www.posteady.com/api/v1/publish-jobs/44444444-4444-4444-8444-444444444444" \
--header "Authorization: Bearer $POSTEADY_API_KEY"Scheduling and related tasks
To schedule, send the same platform input to /scheduled-posts with a future scheduledAt and optional timezone. For asynchronous platforms, generate a UUID requestId per operation and retain it for retries.
Schedule and cancel · Read posts and metrics · Retries · MCP tools
Limits and errors
message allows 63,206 UTF-16 code units and is trimmed. Images must be JPEG up to 8 MiB. Videos must be MP4/QuickTime up to 1 GiB and 20 minutes; REELS allows 3–90 seconds and STORY video allows 3–60 seconds. Arbitrary public media URLs are not accepted. Replays in any terminal state return HTTP 200, including failed, canceled, and unknown, where success remains false. Always read both status and success. Facebook reposts are unsupported.