Postpone Logo
Platforms

Facebook

Schedule posts, reels, and stories to Facebook pages

Mutation

Use the scheduleFacebookPost mutation to schedule posts to Facebook:

Mutation
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

username
String! required
The username of the connected Facebook page to post from
schedulingMode
SchedulingModeType
How the post date is decided. Options: SPECIFIC_TIME, QUEUE_NEXT (default: SPECIFIC_TIME). Only accepted when scheduling a new post. See Scheduling at the Next Open Slot.
submissions
[FacebookPostSubmissionInputType!]! required
Array of submissions defining when and how to publish (minimum 1 submission)
text
String
The main text content of the Facebook post
firstComment
String
An optional first comment to add to the post after publishing
media
[SimpleMediaInput]
Media files to attach to the post. Each item references a file by id, name, or url. See Attaching Media. Only supported when scheduling new posts, not when updating existing ones.
publishingStatus
PublishingStatusType
Publishing status. Options: READY_TO_PUBLISH, DRAFT (default: READY_TO_PUBLISH)
postTags
[ID!]
Array of post tag IDs to organize your content. See Post Tags.
id
ID
ID of existing post when updating (only for updates)

FacebookPostSubmissionInputType

Each submission in the array supports these parameters:

postAt
DateTime
When to publish the post (must be in the future). Required unless you pass schedulingMode: QUEUE_NEXT on the post when scheduling a new one, or the post is a draft. See Drafts without a date.
mediaType
FacebookMediaType! required
Type of Facebook content. Options: POST, REEL, STORY
publishingMethod
PublishingMethodType
How to publish. Options: AUTOMATIC, MANUAL (default: AUTOMATIC)
id
ID
ID of existing submission when updating (only for updates)

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
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"}]
  }
}
The update mutation uses the same input type as the create mutation. Include the 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

The API enforces Facebook's content policies and technical limitations:
  • 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