# Facebook (/docs/platforms/facebook)




What you can post [#what-you-can-post]

| Type              | Supported | Max media | Notes                                                             |
| ----------------- | --------- | --------- | ----------------------------------------------------------------- |
| Text only         | ✅         | 0         | 63,206 character limit. Links in text auto-preview                |
| Single photo      | ✅         | 1         | JPEG, PNG. Max 10 MB                                              |
| Reel              | ✅         | 1         | Any single video is a Reel. MP4, MOV. Max 4 GB, no duration limit |
| Multi-photo album | ✅         | 20        | Images only — videos cannot be mixed in                           |
| Story             | ✅         | 1         | Image or video. Disappears after 24h                              |

<Callout title="Limitations" type="warn">
  * **Facebook API only posts to Pages, not personal profiles.** You must have a Facebook Page and admin access to it.
  * **Multiple Pages can be managed from one connected account.**
  * **Multi-photo albums are images only.** You cannot mix videos with images in a multi-photo post.
  * **GIF files are not supported.** The Facebook API does not accept animated photos.
  * **100 API-published posts per 24-hour moving period.**
</Callout>

<Callout title="Videos are Reels" type="info">
  Facebook no longer has a separate video format — all videos are now Reels, regardless of length, aspect ratio, or orientation. You don't need to set any special `contentType` for videos. Just post a video and it becomes a Reel. The only `contentType` you need to set is `"story"` for ephemeral Stories.
</Callout>

Quick start [#quick-start]

Post text [#post-text]

<Tabs items="['cURL']">
  <Tab value="cURL">
    ```bash
    curl -X POST https://publishq.com/api/v1/posts \
      -H "Authorization: Bearer pq_live_..." \
      -H "Content-Type: application/json" \
      -d '{
        "content": "Exciting news from our team! 🎉",
        "accounts": [
          { "accountId": "your-facebook-page-id" }
        ],
        "publishNow": true
      }'
    ```
  </Tab>
</Tabs>

Post a photo [#post-a-photo]

A single photo post on your Facebook Page.

<div className="fd-steps">
  <div className="fd-step">
    Get your media ready [#1-get-your-media-ready]

    <Tabs items="['Upload new media', 'Use existing media']">
      <Tab value="Upload new media">
        ```bash
        curl -X POST https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..." \
          -F "file=@photo.jpg"
        ```
      </Tab>

      <Tab value="Use existing media">
        ```bash
        curl https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..."
        ```

        Pick the `id` of the media you want to use from the response.
      </Tab>
    </Tabs>
  </div>

  <div className="fd-step">
    Create the post [#2-create-the-post]

    <Tabs items="['cURL']">
      <Tab value="cURL">
        ```bash
        curl -X POST https://publishq.com/api/v1/posts \
          -H "Authorization: Bearer pq_live_..." \
          -H "Content-Type: application/json" \
          -d '{
            "content": "Check out this view 📸",
            "mediaIds": ["media-id-from-step-1"],
            "accounts": [
              { "accountId": "your-facebook-page-id" }
            ],
            "publishNow": true
          }'
        ```
      </Tab>
    </Tabs>
  </div>
</div>

Post a reel [#post-a-reel]

Any single video becomes a Reel on Facebook. No special settings needed.

<div className="fd-steps">
  <div className="fd-step">
    Get your media ready [#1-get-your-media-ready-1]

    <Tabs items="['Upload new media', 'Use existing media']">
      <Tab value="Upload new media">
        ```bash
        curl -X POST https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..." \
          -F "file=@video.mp4"
        ```
      </Tab>

      <Tab value="Use existing media">
        ```bash
        curl https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..."
        ```

        Pick the `id` of the video you want to use from the response.
      </Tab>
    </Tabs>
  </div>

  <div className="fd-step">
    Create the post [#2-create-the-post-1]

    <Tabs items="['cURL']">
      <Tab value="cURL">
        ```bash
        curl -X POST https://publishq.com/api/v1/posts \
          -H "Authorization: Bearer pq_live_..." \
          -H "Content-Type: application/json" \
          -d '{
            "content": "Behind the scenes 🎬",
            "mediaIds": ["media-id-from-step-1"],
            "accounts": [
              { "accountId": "your-facebook-page-id" }
            ],
            "publishNow": true
          }'
        ```
      </Tab>
    </Tabs>
  </div>
</div>

Post a multi-photo album [#post-a-multi-photo-album]

A post with 2–20 photos. Only images are supported — videos cannot be mixed in.

<div className="fd-steps">
  <div className="fd-step">
    Get your media ready [#1-get-your-media-ready-2]

    <Tabs items="['Upload new media', 'Use existing media']">
      <Tab value="Upload new media">
        ```bash
        curl -X POST https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..." \
          -F "file=@photo1.jpg"
        ```

        Repeat for each file. You need at least 2 media IDs.
      </Tab>

      <Tab value="Use existing media">
        ```bash
        curl https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..."
        ```

        Pick the `id` of each media item you want to use from the response.
      </Tab>
    </Tabs>
  </div>

  <div className="fd-step">
    Create the post [#2-create-the-post-2]

    <Tabs items="['cURL']">
      <Tab value="cURL">
        ```bash
        curl -X POST https://publishq.com/api/v1/posts \
          -H "Authorization: Bearer pq_live_..." \
          -H "Content-Type: application/json" \
          -d '{
            "content": "Photo dump from the weekend 📷",
            "mediaIds": ["media-id-1", "media-id-2", "media-id-3"],
            "accounts": [
              { "accountId": "your-facebook-page-id" }
            ],
            "publishNow": true
          }'
        ```
      </Tab>
    </Tabs>
  </div>
</div>

Post a story [#post-a-story]

Set `contentType: "story"` to publish to Stories. Stories disappear after 24 hours. Text captions are not displayed on stories, and interactive stickers are not supported via the API. Supports a single image or video (max 60 seconds).

<div className="fd-steps">
  <div className="fd-step">
    Get your media ready [#1-get-your-media-ready-3]

    <Tabs items="['Upload new media', 'Use existing media']">
      <Tab value="Upload new media">
        ```bash
        curl -X POST https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..." \
          -F "file=@story.jpg"
        ```
      </Tab>

      <Tab value="Use existing media">
        ```bash
        curl https://publishq.com/api/v1/media \
          -H "Authorization: Bearer pq_live_..."
        ```

        Pick the `id` of the media you want to use from the response.
      </Tab>
    </Tabs>
  </div>

  <div className="fd-step">
    Create the post [#2-create-the-post-3]

    <Tabs items="['cURL']">
      <Tab value="cURL">
        ```bash
        curl -X POST https://publishq.com/api/v1/posts \
          -H "Authorization: Bearer pq_live_..." \
          -H "Content-Type: application/json" \
          -d '{
            "mediaIds": ["media-id-from-step-1"],
            "accounts": [
              {
                "accountId": "your-facebook-page-id",
                "platformSpecificSettings": {
                  "contentType": "story"
                }
              }
            ],
            "publishNow": true
          }'
        ```
      </Tab>
    </Tabs>
  </div>
</div>

Platform-specific settings [#platform-specific-settings]

Pass these inside `platformSpecificSettings` on the Facebook account entry. Only needed for Stories — omit for all other post types.

{/* Fields auto-generated from FacebookPlatformSpecificSettingsSchema */}

<PlatformSettingsTable platform="FACEBOOK" />

<small>
  Full schema: 

  [FacebookPlatformSpecificSettings](/docs-scalar#model/FacebookPlatformSpecificSettings)
</small>

Media specs [#media-specs]

Photos [#photos]

| Spec          | Value     |
| ------------- | --------- |
| Formats       | JPEG, PNG |
| Max file size | 10 MB     |

Videos (Reels) [#videos-reels]

| Spec          | Value                                               |
| ------------- | --------------------------------------------------- |
| Formats       | MP4, MOV                                            |
| Max file size | 4 GB                                                |
| Duration      | No limit (9:16 vertical recommended for best reach) |
| Video codec   | H.264, H.265, VP9, AV1                              |
| Audio codec   | AAC, 48kHz, stereo                                  |
| Frame rate    | 24–60 FPS                                           |

Story videos [#story-videos]

| Spec           | Value            |
| -------------- | ---------------- |
| Formats        | MP4              |
| Max duration   | 60 seconds       |
| Aspect ratio   | 9:16 recommended |
| Min resolution | 540 x 960        |

Not yet supported [#not-yet-supported]

* **GIF attachments** — Facebook does not accept animated photos via the API.
* **Audience targeting** — Limiting post visibility by geography, age, or gender.
* **First comment** (coming soon)
