Mutation
Use the scheduleFacebookPost mutation to schedule posts to Facebook:
mutation ScheduleFacebookPost($input: ScheduleFacebookPostInput!) {
scheduleFacebookPost(input: $input) {
success
errors {
field
message
}
post {
id
socialAccount {
id
username
}
publishingStatus
text
firstComment
gallery {
id
galleryMediaSet {
id
media {
url
mimeType
}
}
}
submissions {
id
postAt
mediaType
publishingMethod
}
}
}
}
Input Parameters
ScheduleFacebookPostInput
SPECIFIC_TIME, QUEUE_NEXT (default: SPECIFIC_TIME).
Only accepted when scheduling a new post. See Scheduling at the Next Open Slot.id, name, or url. See Attaching Media.
Only supported when scheduling new posts, not when updating existing ones.READY_TO_PUBLISH, DRAFT (default: READY_TO_PUBLISH)FacebookPostSubmissionInputType
Each submission in the array supports these parameters:
schedulingMode: QUEUE_NEXT on the post when scheduling a new one, or the post is a draft.
See Drafts without a date.POST, REEL, STORYAUTOMATIC, MANUAL (default: AUTOMATIC)Examples
Simple Facebook Post
Schedule a basic Facebook post with text only.
{
"input": {
"username": "myfacebookpage",
"text": "Hello Facebook! This is our first scheduled post 🎉",
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST"
}
]
}
}
Scheduling at the Next Open Slot
Instead of picking a time yourself, pass schedulingMode: QUEUE_NEXT and leave postAt out. Postpone puts the post in the next open slot on the account's Account Schedule, skipping any slot that already has a post on it.
{
"input": {
"username": "myfacebookpage",
"schedulingMode": "QUEUE_NEXT",
"text": "This one goes out at our next open slot.",
"submissions": [
{
"mediaType": "POST"
}
]
}
}
Leave postAt off the submissions — the resolved slot becomes the date for all of them.
The account needs a schedule set up for this to work, postAt and QUEUE_NEXT can't be combined, and updateScheduledFacebookPost rejects schedulingMode. See Scheduling at the Next Open Slot for the full rules.
Facebook Post with Media URL
Schedule a Facebook post by uploading media from an external URL. The media will be automatically downloaded and added to your Content Library.
{
"input": {
"username": "myfacebookpage",
"text": "Check out this amazing sunset! 🌅",
"media": [{ "url": "https://example.com/sunset.jpg" }],
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST"
}
]
}
}
Facebook Post with Content Library Media
Schedule a Facebook post using media already in your Content Library. Reference the file by its id, which every upload mutation returns.
{
"input": {
"username": "myfacebookpage",
"text": "Sharing our company logo! 🏢",
"media": [{ "id": "1042" }],
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST"
}
]
}
}
You can also reference the file by name. Names are matched case-insensitively and the first match wins, so prefer id when several files share a name.
{
"media": [{ "name": "company-logo.png" }]
}
Facebook Reel
Schedule a Facebook Reel with video content.
{
"input": {
"username": "myfacebookpage",
"text": "Behind the scenes at our office! 🎬",
"media": [{ "url": "https://example.com/office-tour.mp4" }],
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "REEL"
}
]
}
}
Facebook Story
Schedule a Facebook Story that will appear in your page's story highlights.
{
"input": {
"username": "myfacebookpage",
"media": [{ "url": "https://example.com/story-image.jpg" }],
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "STORY"
}
]
}
}
Facebook Post with First Comment
Schedule a Facebook post with an automatic first comment that will be posted after the main post is published.
{
"input": {
"username": "myfacebookpage",
"text": "What do you think about our latest product update?",
"firstComment": "Let us know in the comments below! We'd love to hear your feedback 💬",
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST"
}
]
}
}
Facebook Carousel Post
Schedule a Facebook post with multiple images in a carousel format.
{
"input": {
"username": "myfacebookpage",
"text": "Take a look at our product gallery! 📸",
"media": [{ "id": "1234" }, { "id": "1236" }, { "id": "1238" }],
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST"
}
]
}
}
Manual Publishing
Schedule a Facebook post for manual publishing, which will require you to manually approve the post in your dashboard before it goes live.
{
"input": {
"username": "myfacebookpage",
"text": "This post requires manual approval before publishing.",
"submissions": [
{
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST",
"publishingMethod": "MANUAL"
}
]
}
}
Response Types
Success Response
{
"data": {
"scheduleFacebookPost": {
"success": true,
"errors": [],
"post": {
"id": "123",
"socialAccount": {
"id": "456",
"username": "myfacebookpage"
},
"publishingStatus": "READY_TO_PUBLISH",
"text": "Hello Facebook! This is our first scheduled post 🎉",
"firstComment": null,
"gallery": null,
"submissions": [
{
"id": "789",
"postAt": "2025-12-01T15:30:00Z",
"mediaType": "POST",
"publishingMethod": "AUTOMATIC"
}
]
}
}
}
}
Error Response
{
"data": {
"scheduleFacebookPost": {
"success": false,
"errors": [
{
"field": "text",
"message": "Facebook posts cannot exceed 63,206 characters."
}
],
"post": null
}
}
}
Updating a Post
To update an existing scheduled post, use the same input type with the corresponding update mutation and include the post id:
mutation UpdateScheduledFacebookPost($input: ScheduleFacebookPostInput!) {
updateScheduledFacebookPost(input: $input) {
success
errors {
field
message
}
post {
id
}
}
}
Pass the id of the post you want to update in the input, along with the fields you want to change:
{
"input": {
"id": "12345",
"username": "mypagename",
"text": "Updated post text!",
"submissions": [{"postAt": "2025-12-01T15:30:00Z"}]
}
}
id field to specify which post to update. Only scheduled posts that have not been published yet can be updated.postAt is required on an update, so every update states the date the post goes out on — pass the date it already has to leave it where it is. A draft staying a draft is exempt, and a draft you're promoting to READY_TO_PUBLISH needs a date of your choosing; see Drafts without a date.
schedulingMode is not accepted on an update at all; see Scheduling at the Next Open Slot.
Validation Rules
- Text Length: Maximum 63,206 characters for post text
- Media: Maximum 10 images/videos per carousel post
- Video: Maximum 4GB file size for regular posts
- Reels: 3-90 seconds duration, minimum 960x540 resolution, 9:16 aspect ratio recommended
- Stories: 3-60 seconds duration for video, 9:16 aspect ratio recommended
- Scheduling: Posts must be scheduled for future dates only
- Account Limits: Respects your plan's monthly post limits
Media Type Guidelines
POST
- Standard Facebook feed posts
- Supports text, images, videos, and carousels
- Best for general content sharing and engagement
REEL
- Short-form vertical videos
- 3-90 seconds duration
- Minimum 960x540 resolution
- 9:16 aspect ratio recommended for best results
- Ideal for creative, engaging video content
STORY
- Temporary content that appears in story highlights
- 3-60 seconds for video content
- 9:16 aspect ratio recommended
- Perfect for behind-the-scenes content and quick updates
Common Errors
The specified username is not connected to your Postpone account. Connect the Facebook page in your settings first.
Facebook posts have a maximum length of 63,206 characters. Consider shortening your text or breaking it into multiple posts.
The postAt timestamp must be in the future. Check your timezone settings.
A new post has to say when it goes out: pass a postAt, or schedulingMode: QUEUE_NEXT. Drafts are exempt: leave postAt off one and it is parked on a placeholder date about 30 days out.
schedulingMode isn't accepted on an update, so a postAt is the only way to say when the post goes out. You'll also see it when promoting a parked draft to publishingStatus: READY_TO_PUBLISH without giving it a date.
schedulingMode: QUEUE_NEXT needs an Account Schedule on the account you're posting to. Set one up, or pass an explicit postAt.
schedulingMode is only accepted when scheduling a new post. To move a post that is already scheduled, pass a postAt to updateScheduledFacebookPost.
Facebook carousels can have no more than 10 images or videos. Reduce the number of media files in your gallery.
Facebook Reels require vertical videos (9:16 aspect ratio) with a duration between 3-90 seconds and minimum resolution of 960x540.
You've reached your plan's Facebook post limit for the scheduled month. Upgrade your plan or schedule for a different month.
The media file exceeds Facebook's size limits. Videos must be under 4GB, and images should be optimized for web use.