Facebook API guide

Facebook Pages API guide: posting text, photos, videos and Reels to a Page

Facebook's Pages API publishes text, links, photos and videos to a Facebook Page, and the Reels Publishing API publishes Reels, always in the voice of the Page; apps can no longer post to a person's own profile. You need a Page access token with pages_manage_posts, App Review once people outside your app use it, and Business Verification for Advanced Access. This guide sums up Meta's own developer pages, read on 15 October 2026.

  • Sources read on
  • Checked on

What the API can post, and where

The Pages API publishes as a Page. Meta's feed reference puts it in one line: "Posts will appear in the voice of the Page." The Reels Publishing API is Page-only too: "You can only publish Reels to Facebook Pages". [F3, F7]

Posting as a person is gone. Meta deprecated the publish_actions permission, which let apps "publish posts to Facebook as the logged in user", in 2018, and the last extensions ran out on 1 February 2020. [F17]

Who may publish depends on the person's tasks on the Page. CREATE_CONTENT is "Publish content as the Page on the Page"; the others are MANAGE, MODERATE, ADVERTISE and ANALYZE, and a Page admin can do all of them. [F1]

Access: permissions, App Review and Business Verification

Feed posts, photos, videos and Reels all need a Page access token from someone who can perform CREATE_CONTENT on the Page, with three permissions: pages_manage_posts, pages_read_engagement and pages_show_list. Meta's Pages API posts guide also lists pages_manage_engagement and pages_read_user_engagement, and publish_video for video. [F3, F4, F5, F7, F2]

In Meta's words, "All permissions require App Review before an app user can grant them to your app after it is live." While the app is in development, "Apps in Development Mode can request any Permission from any app User who has a Role on the app." Business apps need Advanced Access for people without a role. [F1]

App Review is needed once the app "will be used by anyone without a Role on the app or a role in a Business that has claimed the app". On top of that, "Business Verification is required for all apps making requests for Advanced Access". [F14, F10]

How long App Review and Business Verification take: not listed. Neither page gives a time. [F14, F15]

Page access tokens

  • Facebook Login for Business gives you a User access token. GET /me/accounts then lists each Page the person granted, with its id and its own Page access token. A person may grant several Pages, so let them choose which one to post to. [F1]
  • A long-lived User token "generally lasts about 60 days". [F9]
  • Page tokens: "Long-lived Page access token do not have an expiration date and only expire or are invalidated under certain conditions." The person asking must have a role on the Page, and Meta says to make these calls from your server. [F9]
  • Each Page has its own token. Store the Page id with it, and expect a token to stop working when the person loses their role on the Page (error 190, subcode 492). [F1, F12]

Text, links and photos, step by step

  1. Text or a link: POST /{page-id}/feed with message, link or both; "Either link or message must be supplied." Meta warns: "If the viewer or app cannot see the url of link, the post will fail." [F3]
  2. One photo: POST /{page-id}/photos with url (a hosted image) or the file itself as multipart form data, and a caption. The answer carries the photo id and the post_id. [F4]
  3. Several photos in one post: upload each one to /{page-id}/photos with published=false (Meta keeps such photos "about 24 hours"), then POST /{page-id}/feed with attached_media[0]={"media_fbid":"<photo-id>"}, attached_media[1] and so on. For a scheduled post with several photos, the photos also need temporary=true. [F4]
  4. To schedule on Facebook's side, send published=false with scheduled_publish_time. The allowed window is in the scheduling section below. [F3, F2]
Publish a text post to a Page (Facebook's API, not ours) [F3]
curl -X POST 'https://graph.facebook.com/v26.0/{page-id}/feed' \
  -d 'message=New opening hours from Monday' \
  -d 'access_token={page-access-token}'

Videos and Reels, step by step

Page videos go through the Resumable Upload API. /{page-id}/videos also takes a hosted file_url (not together with upload_phase), a source file, or a chunked upload in three upload_phase calls: start, transfer and finish. [F6, F5]

  1. Video, first call: POST /{app-id}/uploads with file_name, file_length and file_type. The answer is an upload session id of the form upload:<id>. [F6]
  2. Video, second call: POST /upload:<id> with the bytes and file_offset. The answer is a file handle, h. [F6]
  3. Video, third call: POST /{page-id}/videos with title, description and fbuploader_video_file_chunk set to that handle. [F6]
  4. Reel, first call: POST /{page-id}/video_reels with upload_phase=start. The answer gives a video_id and an upload_url. [F7]
  5. Reel, second call: POST the file to https://rupload.facebook.com/video-upload/{video-id}, with an Authorization header of the form OAuth <PAGE_ACCESS_TOKEN> and offset plus file_size, or file_url for a hosted file. [F7]
  6. Reel, third call: POST /{page-id}/video_reels with video_id, upload_phase=finish, video_state=PUBLISHED and a description. Follow it with GET /{video-id}?fields=status, which reports the uploading, processing and publishing phases and a video_status of error, expired, processing, ready, uploading, upload_failed or upload_complete. [F7]

Media specs

What Meta's publishing pages accept
TypeMeta's rule
Photos.jpeg, .bmp, .png, .gif or .tiff. "Files can not exceed 10MB. For .png files, we recommend not exceeding 1MB or the image may appear pixelated."
Reels.mp4 recommended; 9:16; 1080 × 1920 recommended, at least 540 × 960; 24 to 60 frames a second; "3 to 90 seconds."; AAC-LC audio at 48 kHz, stereo, 128 kbps or more.
Page videosLargest file and longest length: not listed on the developer pages read.

Sources: [F4, F7, F5, F6, F8]

Limits and rate limits

  • Reels: "Reels API is limited to 30 API-published posts within a 24-hour moving period." A Page can also send at most 10 collaborator invitations in 24 hours. [F7]
  • Calls made with Page or system user tokens: "Calls within 24 hours = 4800 * Number of Engaged Users". [F11]
  • Calls counted per app: "Calls within one hour = 200 * Number of Users". Meta notes this is a pool for the app, not a quota per user. [F11]
  • Watch the X-App-Usage and X-Business-Use-Case-Usage headers. The second carries estimated_time_to_regain_access, in minutes. [F11]

How far ahead Facebook lets you schedule

Meta's own pages give three different windows for scheduled_publish_time, so test the one your post type uses. [F2, F3, F5]

  • Pages API posts guide: "The publish date must be between 10 minutes and 30 days from the time of the API request." [F2]
  • Page feed reference: "Must be date between 10 minutes and 75 days from the time of the API request." [F3]
  • Page videos reference: between 10 minutes and 6 months from the time of publishing the video. [F5]

Errors Facebook returns

Facebook answers with the Graph API error object: a code, often an error_subcode, and a message. The code tells you whether to get a new token, ask for a permission, slow down or change the post. [F12]

Facebook's main errors when posting to a Page
CodeWhat it meansWhat to do
190The access token expired or is invalid. Subcodes: 458 app not installed, 459 user checkpointed, 460 password changed, 463 expired, 464 unconfirmed user, 467 invalid token, 492 invalid session.Get a new token; for 492, the person needs a role on the Page again.
10, 200-299Permission denied, or a permission is missing.Ask for the permission, and pass App Review for it.
4, 17, 32, 613, 80001Rate limits: the app, the user, Page requests, a custom limit, the Pages Business Use Case limit.Stop and spread the calls out.
368Temporarily blocked for policy violations.Wait.
506"Duplicate posts cannot be published consecutively."Change the post.
1609005Error posting the link.Check the URL.
100A required parameter is missing (Reels).Send the missing field.
1363040Reel aspect ratio not allowed.Use 9:16.
1363127Reel resolution too low.At least 540 × 960.
1363128Reel duration outside 3 to 90 seconds.Trim or extend it.
1363129Reel frame rate outside 24 to 60.Re-encode it.

Sources: [F12, F7, F11]

What changed in 2025 and 2026

  • 17 June 2025 (updated 14 July 2025), Meta's newsroom: "all videos will be shared as reels", and "Reels on Facebook will also not have any length or format restrictions", rolled out gradually to profiles and Pages. The Reels Publishing API page still says 3 to 90 seconds. [F16, F7]
  • Graph API versions: v22.0 on 21 January 2025, v23.0 on 29 May 2025, v24.0 on 8 October 2025, v25.0 on 18 February 2026 and v26.0 on 29 July 2026. v20.0 was removed on 24 September 2026; v21.0 goes on 21 January 2027. [F13]
  • The v23.0 to v26.0 changelogs list no change to publishing on Pages. v26.0 deprecates legacy Page fields for the New Pages Experience, which are Page settings, not posting. [F13]

Gotchas developers hit

  • There is no personal-profile posting. Build for Pages from the start. [F3, F17]
  • "An app can only update a Page post if the post was made using that app." [F2]
  • Custom link previews: "The link must be owned by the posting Page." [F3]
  • Reels from a URL are rejected when the site blocks Meta's crawler in robots.txt, and when the URL is on Meta's own CDN (fbcdn). [F7]
  • Unpublished photos waiting for a multi-photo post last about 24 hours. [F4]
  • Error 190 with subcode 492 means the person lost their role on the Page, not that your app is broken. [F12]
  • The Reels page names the last upload_phase "complete" in its field table and "finish" in its examples. [F7]

Posting to Facebook through Status 200 Uploads

Status 200 Uploads publishes to your Facebook Page with its own Meta app: you sign in on Facebook itself and pick the Page, and never create a Meta developer app or go through the App Review and Business Verification above. The facts below are the ones our Facebook page shows, as checked on that page's own date.

Where posts go
To the Facebook Page of the connection. The account's posting options name that Page.
What you can post
Text on its own, one photo, several photos in one post, a video or a Reel.
Largest video
5 GB per file. File limits of every network
Largest image
10 MB per image, checked in the dashboard; through the API, Facebook itself decides.
Reels
Facebook takes Reels of 3 to 90 seconds.
Caption
Up to 63,206 characters. A dry run or a scheduled post flags a longer one (caption_over_limit).
Scheduling
Schedule a post up to 365 days ahead, or send it now.
Your own Meta app
Not needed: our Meta app publishes for you, so there is no app review to go through on your side.

Settings you can choose: Post type.

Everything about posting to Facebook →

Facebook API questions

More on Facebook

Facebook's own pages

Sources read on 15 October 2026.

  1. F1Pages API overview (no date shown)
  2. F2Pages API: Posts (no date shown)
  3. F3Page feed reference (no date shown)
  4. F4Page photos reference (no date shown)
  5. F5Page videos reference (last updated Graph API Reference v26.0)
  6. F6Video API: publishing (no date shown)
  7. F7Reels Publishing API (no date shown)
  8. F8Video API overview (no date shown)
  9. F9Long-lived access tokens (no date shown)
  10. F10Permissions reference (no date shown)
  11. F11Graph API rate limiting (no date shown)
  12. F12Graph API error handling (no date shown)
  13. F13Graph API changelog (last updated v26.0 released July 29, 2026)
  14. F14App Review (no date shown)
  15. F15Business Verification (no date shown)
  16. F16Meta newsroom: Making it easier to create videos on Facebook (last updated June 17, 2025 (updated July 14, 2025))
  17. F17Meta developer blog: publish permission update (last updated July 31, 2018 (updated August 1, 2019))

Post to Facebook without building it yourself

Facebook is on every plan, Free included. This page was checked on 26 October 2026.