Facebook

Facebook API for Posting to Pages

How posting through the Facebook Graph API works, what it asks of you, and how to publish and schedule Page posts with one Publora request instead.

Posting to Facebook through code means the Graph API: a Meta app, the pages_manage_posts permission, a Page access token and a request to the Page feed. It works well once it is set up. Getting there, and keeping it working as Graph API versions and tokens expire, is the part most teams underestimate.

Publora is a publishing API that already holds the Meta app approval. You connect your Facebook Pages in the Publora dashboard, then post and schedule to them with an API key and one request. The same request can also go to Instagram, LinkedIn, Threads and the other networks Publora supports.

One scope note up front: the Graph API only publishes to Pages, and Publora does the same. Personal profiles cannot be posted to by third-party apps, and Meta removed the Groups API in 2024, so neither route can post to Facebook groups.

Posting through the official Facebook API compared with one Publora API request

The official Facebook API

Facebook Page posts are created with POST /{page-id}/feed on the Graph API, using a Page access token. The request takes a message, an optional link, and a published flag for immediate or unpublished posts. Publishing for someone else also means an app that Meta has reviewed and a token that stays valid.

What posting requires

  1. Create a Meta app in the Meta developer dashboard.
  2. Request pages_manage_posts, which depends on pages_read_engagement and pages_show_list.
  3. Get a Page access token for a user who can perform the CREATE_CONTENT task on that Page.
  4. Submit the permissions for App Review if people outside your app's roles will connect Pages they manage. Meta requires review for access to data you do not own or manage.
  5. Pin a Graph API version and plan upgrades: each version works for at least two years after the next version ships, then calls fall back to the oldest usable version.

Cost: Meta's Pages API documentation lists no per-call fee for publishing. The cost is building and maintaining the app, review, token handling and version upgrades.

Official limits

EndpointPOST /{page-id}/feed with a Page access token
Required permissionpages_manage_posts (plus pages_read_engagement, pages_show_list)
Page rate limit4,800 calls x number of engaged users per 24 hours
Rate limit errorError code 80001; usage in the X-Business-Use-Case-Usage header
Groups publishingGroups API and publish_to_groups removed for all versions on April 22, 2024
Version lifetimeAt least 2 years after the next version is released

Common gotchas

  • Personal profiles cannot be posted to by apps, and group posting is gone since the Groups API was deprecated in v19.0.
  • The Page rate limit scales with engaged users, so a small or new Page gets a small budget.
  • User tokens, Page tokens and their lifetimes are easy to mix up; a scheduled job fails when a token quietly expires.
  • A single post cannot mix images and a video; Facebook rejects the combination.
  • Every Graph API version eventually expires, so an integration needs a version upgrade at least every couple of years.

Posting to Facebook through Publora

Meta approval already in place

You log in with Facebook from Publora Channels and pick the Pages you manage. Publora requests pages_manage_posts, pages_show_list and pages_read_engagement under its own reviewed app.

Page tokens refreshed for you

Facebook Page tokens have a 59-day lifespan. Publora refreshes them automatically; you reconnect only if Facebook revokes the Page permissions.

One request, several Pages

Each Page gets its own ID, such as facebook-112233445566. List several in the platforms array and each Page gets its own published post at the scheduled time.

Media in the same call

Pass up to 10 public https image or video URLs in mediaUrls. Publora downloads them, uploads them to Facebook and publishes the post, with WebP converted to JPEG.

Version upgrades are Publora's job

Publora tracks Graph API versions. Your integration keeps calling the same api.publora.com endpoint.

Official Facebook APIPublora API
SetupMeta app, OAuth, App ReviewConnect Pages in dashboard, create API key
AuthUser token, then Page access tokenx-publora-key header
Token lifetimeYou track and refresh tokensPublora refreshes Page tokens
DestinationsPages onlyPages only (no profiles or groups)
MediaMedia handled in your own codemediaUrls or presigned upload, same post
SchedulingYour own queue or the published flagscheduledTime in UTC
Other networksFacebook only10 networks in one request
CoverageAll Graph API features (ads, insights, comments)Publishing and scheduling Page posts

Post to Facebook via API

curl -X POST https://api.publora.com/api/v1/create-post \
  -H "Content-Type: application/json" \
  -H "x-publora-key: sk_YOUR_API_KEY" \
  -d '{
    "content": "New opening hours from Monday: 8:00 to 20:00, every day. See you soon!",
    "platforms": ["facebook-112233445566", "facebook-778899001122"],
    "scheduledTime": "2026-10-05T13:00:00.000Z",
    "mediaUrls": ["https://example.com/images/new-hours.jpg"]
  }'
# { "success": true, "postGroupId": "...", "scheduledTime": "2026-10-05T13:00:00.000Z" }
import requests

response = requests.post(
    "https://api.publora.com/api/v1/create-post",
    headers={
        "Content-Type": "application/json",
        "x-publora-key": "sk_YOUR_API_KEY",
    },
    json={
        "content": "New opening hours from Monday: 8:00 to 20:00, every day. See you soon!",
        "platforms": ["facebook-112233445566", "facebook-778899001122"],
        "scheduledTime": "2026-10-05T13:00:00.000Z",
        "mediaUrls": ["https://example.com/images/new-hours.jpg"],
    },
)
print(response.json())  # {'success': True, 'postGroupId': '...', 'scheduledTime': '...'}

Or let an AI agent post

Connect any MCP client to mcp.publora.com:

  • “List my connected Facebook Pages and schedule this holiday notice to all of them for Friday at 13:00 UTC.”
  • “Create a Facebook Page post with these four product photo URLs and a short caption, and schedule it for next Monday morning Berlin time.”
  • “Show me everything scheduled to my Facebook Pages next week and move the Wednesday post to Thursday at the same time.”

Where you get the key and connect agents

Publora dashboard API page with API keys and code examples
API page: create a key and copy ready-made examples.
Publora dashboard MCP page listing Claude, Claude Code, Codex, Cursor, VS Code and Windsurf
MCP page: pick your AI app for a one-step setup.

Facebook API FAQ

Can I post to a Facebook group via API?

No. Meta deprecated the Groups API and the publish_to_groups permission in Graph API v19.0 and removed them for all versions on April 22, 2024. Publora publishes to Facebook Pages only.

Can I post to a personal Facebook profile via API?

No. Facebook does not let third-party apps publish to personal profiles. Both the Graph API and Publora post to Pages.

Which permission do I need to post to a Facebook Page?

pages_manage_posts, which depends on pages_read_engagement and pages_show_list, plus a Page access token from someone who can create content on the Page. With Publora, these are granted when you connect the Page.

What is the Facebook Pages API rate limit?

Meta allows 4,800 calls times the number of engaged users per Page per 24 hours and returns error code 80001 when you exceed it.

Is the Publora Facebook API free?

The free Starter plan includes the REST API and MCP server: 3 connected accounts (each Page counts as one), 15 posts per month, up to 3 scheduled posts at a time and scheduling up to 7 days ahead. Pro is $5.99 per account per month, $3.99 billed yearly, with graduated discounts from the 6th account.