# Photo Posts

Visual content that drives engagement across social networks. Use photo posts to share high-quality images—single or multiple—while respecting each platform’s unique requirements.

### Key Features

* **Multi-Platform Publishing**\
  Post images simultaneously to all supported networks.
* **Multiple Image Support**\
  Single photos or carousels (up to platform limits).
* **Advanced Customization**\
  Captions and location tags where available.
* **Resolution Optimization**\
  Automatic resizing and format handling per network.

### Platform Support & Limits

<table><thead><tr><th width="105.3690185546875">Platform</th><th width="100.15966796875">Max Photos</th><th width="125.1968994140625">Photo Size Limit</th><th width="134.597412109375">Caption Support</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Facebook</strong></td><td>Unlimited</td><td>No restriction</td><td>Yes</td><td>No restrictions on photo size.</td></tr><tr><td><strong>Instagram</strong></td><td>10</td><td>8 MB</td><td>Yes</td><td>Minimum resolution: 320x320 px, automatically cropped.</td></tr><tr><td><strong>TikTok</strong></td><td>35</td><td>No restriction</td><td>Yes</td><td>Cannot mix photos with GIFs or videos.</td></tr><tr><td><strong>Threads</strong></td><td>20</td><td>8 MB</td><td>Yes</td><td>Cannot mix photos with GIFs or videos.</td></tr><tr><td><strong>Twitter</strong></td><td>4</td><td>5 MB</td><td>Yes</td><td>Supports only up to 4 photos per post.</td></tr><tr><td><strong>LinkedIn</strong></td><td>20</td><td>No restriction</td><td>Yes</td><td>Photos and GIFs are supported, cannot mix with videos.</td></tr><tr><td><strong>Telegram</strong></td><td>10</td><td>10 MB</td><td>Yes</td><td>Cannot mix photos with GIFs or videos.</td></tr><tr><td><strong>Mastodon</strong></td><td>4</td><td>8 MB</td><td>Yes</td><td>Supports JPEG, PNG, or WEBP formats.</td></tr></tbody></table>

> **Note**: Inserting Alt text is supported on Publer for all social networks. However, when creating multi-photo posts on Facebook, adding Alt text will also count as the photo caption.

> **Note**: You cannot add Alt text to Facebook Personal Profiles/Groups posts, due to API limitations from the networks.

### Request Structure <a href="#request-structure" id="request-structure"></a>

Below is an example showing a photo post scheduled for multiple platforms.

Omit `scheduled_at` for immediate posts.

```json
{
  "bulk": {
    "state": "scheduled",
    "posts": [
      {
        "networks": {
          "facebook": {
            "type": "photo",
            "text": "Our new office is complete! #OfficeLife",
            "media": [
              {
                "id": "asset123456",
                "type": "photo",
                "caption": "Modern office with open layout"
              },
              {
                "id": "asset123457",
                "type": "photo",
                "caption": "Collaborative meeting area"
              }
            ]
          },
          "instagram": {
            "type": "photo",
            "text": "We’ve moved into our new HQ! 🏢✨",
            "media": [
              { "id": "asset123456", "type": "photo", "caption": "Modern office space" },
              { "id": "asset123457", "type": "photo", "caption": "Meeting area" }
            ]
          }
        },
        "accounts": [
          { "id": "FB_ACCOUNT_ID", "scheduled_at": "2025-05-20T14:30:00Z" },
          { "id": "IG_ACCOUNT_ID", "scheduled_at": "2025-05-20T15:00:00Z" }
        ]
      }
    ]
  }
}
```

### Required Parameters

<table><thead><tr><th width="282.17669677734375">Field</th><th>Description</th></tr></thead><tbody><tr><td><code>networks.{provider}.type</code></td><td>Must be <code>"photo"</code>.</td></tr><tr><td><code>networks.{provider}.media</code></td><td>Array of <code>{ id, type, caption }</code> objects.</td></tr><tr><td><code>accounts[].id</code></td><td>Target social account ID.</td></tr><tr><td><code>accounts[].scheduled_at</code>*</td><td>ISO 8601 timestamp for scheduling (optional).</td></tr></tbody></table>

\* Omit `scheduled_at` when publishing immediately.

### Media Workflow

1. **Upload Images**: Use the [Media Handling API ](https://publer.com/docs/posting/create-posts/media-handling)to upload files.
2. **Receive IDs**: Note each media object’s `id`.
3. **Compose Post**: Reference those IDs in your `media` array.
4. **Publish/Schedule**: Send the payload to the posts endpoint.

### Best Practices

* **Optimize Quality**: Compress and resize images to platform specs.
* **Descriptive Alt Text**: Enhance accessibility and SEO.
* **Tailor Captions**: Adjust tone and length per network.
* **Experiment Carousels**: Test image order to boost engagement.
* **Consistent Branding**: Use uniform styles and watermarks.

### Related Topics

* [Media Handling](https://publer.com/docs/posting/create-posts/media-handling)
* [Content Types](https://publer.com/docs/posting/create-posts/content-types)
* [Publishing Methods](https://publer.com/docs/posting/create-posts/publishing-methods)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://publer.com/docs/posting/create-posts/content-types/photo-posts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
