Only this pageAll pages
Powered by GitBook
1 of 56

Publer API

Loading...

Getting Started

Loading...

Loading...

Loading...

API REFERENCE

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Posting

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Analytics

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Overview

Access & Availability The Publer API is available exclusively to Business and Enterprise customers. Upgrade your plan

Introduction

Welcome to the Publer API. This RESTful JSON API brings Publer’s social media scheduling, publishing, and analytics capabilities into your own applications, scripts, or services. Whether you’re automating campaigns, building dashboards, or integrating content workflows, the Publer API provides the same power you know from the Publer web platform.

What is Publer?

Publer is an all-in-one social media management solution. From a single dashboard you can:

  • Schedule and publish posts

  • Manage accounts and team workspaces

  • Track performance with built-in analytics

Supported networks: Facebook, Instagram, Twitter/X, LinkedIn, Pinterest, YouTube, TikTok, Google Business Profile, WordPress, Telegram, Mastodon, Threads, Bluesky.

What can I do with the Publer API?

  • Create, schedule, and publish posts (text, images, videos, links, polls, carousels, PDFs)

  • Upload, organize, and reuse media assets (images, videos, GIFs, documents)

  • List workspaces, accounts, and user details

  • Retrieve posts and their performance analytics

  • Analytics:

    • Charts: Discover available analytics charts and fetch chart data for dashboards

    • Post Insights: Per‑post metrics with filtering, sorting, pagination, and competitor mode

  • Build custom integrations, dashboards, or bots

API Specifications

Property
Value

Base URL

https://app.publer.com/api/v1

Format

JSON

Auth Method

Bearer-API Token

Authentication

Include your API token in every request header:

Authorization: Bearer-API YOUR_API_TOKEN
Publer-Workspace-Id: YOUR_WORKSPACE_ID // Required on special cases
Content-Type: application/json

Manage and regenerate tokens in Settings → Access & Login → API Keys.

Getting Started

  1. Generate an API key in your Publer Dashboard.

  2. Validate your credentials:

    curl -H "Authorization: Bearer YOUR_API_TOKEN" \
         https://app.publer.com/api/v1/me
  3. Follow our quickstart guide to make your first API request

  4. Explore the full for detailed endpoint docs.

Support & Resources

If you need assistance with the API:

  • Review our quickstart guide for basic concepts

  • Check the API reference for detailed endpoint information

  • Contact support@publer.com for technical issues

Jump right in

Authentication

Every Publer API request must include a valid API key. This guide shows you how to obtain, use, and manage your keys securely.

  1. Sign in to your Publer account (Business plan).

  2. Navigate to .

  3. Click Create API Key.

Introduction

A RESTful JSON interface for automating social media workflows—scheduling, publishing, media management, and analytics—across multiple networks.

All endpoints share this root URL:

Include your API key and workspace ID on almost every request:

Use query parameters for filters and pagination:

Send JSON in the request body:

No request body is required (unless otherwise noted):

All responses are JSON.

Users

Retrieve profile and application settings for the currently authenticated user. Use this endpoint to adapt your integration to user preferences and entitlements.

Requirements

  • Authentication: Bearer API token

  • Headers:

    • Authorization: Bearer-API YOUR_API_KEY

Endpoint

Get Current User

GET /api/v1/users/me

Related Resources

  • Authentication - Managing API keys and scopes

  • Workspaces API - Access workspace information

  • Rate Limits - Understanding API usage limits

Workspaces

Manage organizational units (“workspaces”) that group social accounts, members, and content. Workspaces help agencies, brands, and departments keep clients and campaigns separate under a single Publer login.

Requirements

  • Authentication: Bearer API token

  • Scope: workspaces

  • Headers:

    • Authorization: Bearer-API YOUR_API_KEY

Endpoint

List Workspaces

Retrieve all workspaces accessible by the authenticated user.

GET /api/v1/workspaces

Working with Workspaces

  • A user can belong to multiple workspaces.

  • Each workspace has its own accounts, posts, and settings.

  • Use the workspace context (Publer-Workspace-Id header) to target API calls at the correct workspace.

Workspace Context for Other Endpoints

Many endpoints require you to specify which workspace you’re operating in. Include the Publer-Workspace-Id header:

curl -X GET https://app.publer.com/api/v1/accounts \
  -H "Authorization: Bearer-API YOUR_API_KEY" \
  -H "Publer-Workspace-Id: 61a7c2e4f9e8c3b2d1e0f9a8"

Related Resources

  • Users API - Access user profile information

  • Accounts API - Access social accounts within workspaces

  • Posts API — Create, schedule, and manage content

Accounts

Manage and retrieve social media accounts connected to your Publer workspaces. Use these accounts as targets when scheduling or publishing content.

  • Authentication: Bearer API token

  • Scope: accounts

Media

The Media API lets you list and filter items in your library. You can page through results, query by IDs, or apply filters such as type, usage status, source, and search terms.

Requirements

  • Authentication: Bearer API token

  • Scope: media

  • Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

Retrieve all social media accounts in a workspace.

Parameter
Type
Required
Description
  • Free trial users see placeholder data unless they supply specific query filters.

  • Paid accounts have full library access.

  • — Manage connected social accounts

  • — Create and schedule posts

  • — Upload new media files

Manual Scheduling

Schedule posts for future publication across one or more social networks using the Publer API.

Header
Required
Description
Hashtag Analysis: Aggregate hashtag performance plus top performing posts per hashtag
  • Best Times to Post: Day/hour heatmap for optimal posting times (supports competitor view)

  • Members: Per‑member activity and performance (posts, reach, engagements)

  • Competitor Analysis: List competitors and compare followers, engagement, reach, and posting mix

  • Version

    v1 (semantic versioning MAJOR.MINOR.PATCH)

    Rate Limits

    100 requests/2 minutes per user

    Quickstart

    Get up and running with the API in minutes

    Authentication

    Learn how to authenticate your API requests

    API Reference

    Explore detailed endpoint documentation

    API reference

    Synchronous endpoints return the requested resource or collection.

  • Asynchronous endpoints (e.g., post creation) return a job_id:

    • Status codes indicate general error type (4xx, 5xx).

    • The response body contains an errors array:

    • 200 OK

    • 201 Created

    • 202 Accepted (async)

    • 400 Bad Request

    • 401 Unauthorized

    • 403 Forbidden

    • 404 Not Found

    • 429 Too Many Requests

    • 500 Internal Server Error

    Current version: v1 (in the URL path). We follow Semantic Versioning. Breaking changes only occur on MAJOR version bumps; you will be notified in advance.

    1. Submit your request → 202 Accepted + {"job_id": "…"}

    2. Poll the job status endpoint until complete:

    All timestamps use ISO 8601 with timezone:

    Example: 2025-05-04T14:58:35+00:00

    • Always use HTTPS.

    • Sensitive fields may be redacted.

    • Adhere to least-privilege scope selection.

    • Users API

    • Workspaces API

    • Accounts API

    • Posts API

    For implementation examples, see the Quickstart Guide and sections on creating content, media handling, and network-specific formats.

    BUSINESS ACCESS ONLY: The Publer API is currently available exclusively to Publer Business users.

    What Is the Publer API?

    Base URL

    Authentication

    Request Format

    GET

    POST, PUT, PATCH

    DELETE

    Response Format

    Success

    Error

    Common HTTP Status Codes

    Versioning

    Asynchronous Operations

    Date & Time

    Privacy & Security

    Next Steps

    { "job_id": "6810dec617eae6d55d7a5e5b" }
    { "errors": ["Detailed error message"] }
    GET /job_status/{job_id}
    {
      "status": "completed",
      "payload": { "failures": {} }
    }
    https://app.publer.com/api/v1/
    Authorization: Bearer-API YOUR_API_KEY
    Publer-Workspace-Id: YOUR_WORKSPACE_ID
    Content-Type: application/json
    GET /posts?state=scheduled&from=2025-04-20
    POST /posts
    {
      "bulk": {
        "state": "scheduled",
        "posts": [ … ]
      }
    }
    DELETE /posts/{post_id}
    YYYY-MM-DDThh:mm:ss±hh:mm

    No

    Page number (0-based). Default: 0

    types[]

    string[]

    Yes

    Filter by media type: photo, video, gif

    used[]

    boolean[]

    Yes

    Filter by usage status

    source[]

    string[]

    No

    Filter by source: canva, vista, postnitro, contentdrips, openai, favorites, upload

    search

    string

    No

    Full-text search on name or caption

    GET /api/v1/media

    ids[]

    string[]

    No

    Specific media IDs (pagination and other filters ignored when set)

    page

    Endpoint

    List Media

    Query Parameters

    Notes

    Related Resources

    Accounts API
    Posts API
    Media Upload

    integer

    Enter a descriptive name for your key.

  • Select only the scopes your integration needs (e.g., posts, media, accounts).

  • Click Create.

  • Copy and securely store the key — you won’t see it again.

  • Include your key in the Authorization header for every request. Also provide your workspace ID:

    Example (list posts):

    When creating an API key, you must select specific permission scopes based on your integration needs:

    Scope

    Description

    Example Endpoints

    workspaces

    Retrieve user's workspaces

    /workspaces

    accounts

    Retrieve user's accounts of selected workspace

    • 401 Unauthorized • Missing or invalid Authorization header • Key revoked or expired

    • 403 Forbidden • Insufficient scopes for the endpoint • Missing Publer-Workspace-Id header

    Always inspect the JSON error response for message and code.

    • Environment Variables Store your key outside code—e.g., in a .env file:

      PUBLER_API_KEY=your_api_key_here
    • Secrets Management Use a vault (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault).

    • Key Rotation Rotate keys every 90–180 days, or after team changes/incidents.

    • Least Privilege Create separate keys for different use cases.

    • Safe Logging Never log full keys; mask all but the last 4 characters:

    • Always HTTPS Never send keys over plain HTTP.

    If you continue to see authentication errors:

    1. Confirm your key is active and not expired.

    2. Verify you have the correct header names and values.

    3. Double-check that your key has the required scopes.

    4. Contact support@publer.com for assistance.

    • Quickstart Guide

    • Rate Limits

    • API Reference

    Obtaining an API Key

    Settings → Access & Login → API Keys
    Authorization: Bearer-API YOUR_API_KEY  
    Publer-Workspace-Id: YOUR_WORKSPACE_ID  
    Content-Type: application/json
    curl -X GET https://app.publer.com/api/v1/posts \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-Id: 5f8d7a62c9e77e001f36e3a1"

    Using Your API Key

    API Key Scopes

    Common Authentication Errors

    Security Best Practices

    Troubleshooting

    Related Documentation

    Headers:
    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve all social media accounts in a workspace.

    Retrieves a list of all social media accounts available in the specified workspace.

    The list of accounts returned will include all social media accounts that you have connected to your Publer workspaces and have permission to access. These accounts can be used to schedule and publish content via the Posts API.

    The accounts data provides important information about the social media profiles available for posting, including their configuration settings and current synchronization status.

    Publer supports these network providers and account types:

    Provider

    Description

    Supported Account Types

    facebook

    Facebook

    page, group, profile

    instagram

    Instagram

    • Workspaces API - Manage organizational units

    • Posts API - Create and publish content to accounts

    • Media API - Upload media files for posting

    Requirements

    GET /api/v1/accounts

    Endpoint

    List Accounts

    Supported Providers

    Related Resources

    Yes

    Workspace ID for scheduling posts

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    Include a valid ISO 8601 scheduled_at timestamp under each account:

    Status: 200 OK

    • state Must be set to "scheduled" for future publishing.

    • accounts[].scheduled_at ISO 8601 timestamp (with Z or offset) specifying when to publish.

    • networks Per-platform content configuration (e.g., facebook, twitter, linkedin).

    • Use full ISO 8601 format, including timezone (e.g., 2025-06-01T09:00:00+02:00).

    • Timestamps must be at least 1 minute in the future.

    • Buffer Time: Space posts 1–2 minutes apart to avoid collisions.

    • Timezone Awareness: Schedule using your audience’s local time.

    • Batch Scheduling: Combine related posts in a single request for efficiency.

    • Verify: Poll /api/v1/job_status/{job_id} to confirm scheduling success.

    • Content Types - Details on different content formats

    • Auto-Scheduling - Advanced AI-based scheduling options

    • Recurring Posts - Setting up repeating content

    • - Platform-specific scheduling limitations

    POST /api/v1/posts/schedule

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Endpoint

    Request Headers

    Publer-Workspace-Id

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              // network provider as key, e.g., facebook, twitter, etc
              "facebook": {
                "type": "status",
                "text": "This post was scheduled through the Publer API! #ScheduledContent"
              }
            },
            "accounts": [
              {
                "id": "66db83154e299efa19a2d8eb",
                "scheduled_at": "2025-06-01T09:00:00Z"
              }
            ]
          }
        ]
      }
    }
    
    curl -X POST https://app.publer.com/api/v1/posts/schedule \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-Id: YOUR_WORKSPACE_ID" \
      -H "Content-Type: application/json" \
      -d '{
        "bulk": {
          "state": "scheduled",
          "posts": [{
            "networks": {
              "facebook": {
                "type": "status",
                "text": "This post was scheduled through the Publer API! #ScheduledContent"
              }
            },
            "accounts": [{
              "id": "66db83154e299efa19a2d8eb",
              "scheduled_at": "2025-06-01T09:00:00Z"
            }]
          }]
        }
      }'
    {
      "job_id": "6810dec617eae6d55d7a5e5b"
    }

    Request Body

    Sample Request

    Sample Response

    Key Fields

    Important Considerations

    Time Formats

    Best Practices

    Related Topics

    Immediate Publishing

    Publish content to social networks instantly using the Publer API. This method skips scheduling and sends posts for immediate delivery.

    Endpoint

    POST /api/v1/posts/schedule/publish

    Request Headers

    Header
    Required
    Description

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Use the standard bulk structure. Omit scheduled_at under accounts:

    • state: must be "scheduled" for immediate publishing

    • networks: per-network content configuration (facebook, twitter, linkedin, etc.)

    Status: 200 OK

    Use the returned job_id to poll /api/v1/job_status/{job_id} until status: "completed".

    • Delivery Timing

      • Posts are sent as soon as Publer processes the request.

      • Network-side processing may introduce slight delays.

    • - Details on different content formats

    • - Information about uploading and managing media

    • - Platform-specific capabilities and limitations

    Platform-Specific Formats

    Each social network offers unique post formats. Publer’s API supports these specialized types—click a format to dive into its implementation details:

    • Text Posts with Background

    • Multi-Link Posts (Facebook Carousels)

    • Polls

    • Choose the Right Format Select the layout that matches your content goal and platform norms.

    • Follow Platform Guidelines Observe character limits, aspect ratios, and file-size rules.

    • Enhance Engagement Interactive formats (polls, carousels) tend to drive higher user interaction.

    Content Types

    A comprehensive overview of all content formats you can publish via the Publer API. Each content type is specified by the type field inside the networks.[provider] object.

    Deleting Posts

    Remove one or multiple posts of any state from your workspace. This endpoint enforces role-based permissions and state-specific restrictions.

    • Authentication: Bearer API token

    • Scope: posts

    Network Reference
    Test & Iterate Experiment across formats to discover what resonates best with your audience.

    Best Practices

    Related Topics

    LinkedIn PDF Carousels
    Pinterest Pins with a Link URL
    Google Events, Offers, and Photos
    Reels, Shorts, or Stories
    Media Handling
    Publishing Methods
    Content Types

    Instagram

    photo, video, story, reel

    Twitter/X

    status, photo, video, link, gif, poll

    LinkedIn

    status, photo, video, link, document, poll, gif

    Pinterest

    photo, video, carousel

    Google Business

    status, photo, event, offer

    YouTube

    video, short

    TikTok

    video, photo, carousel

    WordPress

    article

    Telegram

    status, photo, video, link, gif

    Mastodon

    status, photo, video, link, gif, poll

    Threads

    status, photo, video, link

    Bluesky

    status, photo, video, link

    • Test each format on a single account before scaling.

    • Use network-specific overrides to tailor text length, captions, and metadata.

    • Always provide alt_text for images to enhance accessibility.

    • Follow each platform’s style and character limits for optimal engagement.

    • Preprocess media (resize, compress) before upload to meet platform requirements.

    • Verify media upload success before referencing media IDs in your post payload.

    • Review provider documentation for specific limits (e.g., LinkedIn document size, TikTok clip length).

    • Poll the job status endpoint to ensure the content was processed and published without errors.

    • Media Handling - Detailed guide for uploading and managing media

    • Network Reference - Platform-specific capabilities and limitations

    • Publishing Methods - Ways to publish different content types

    Network

    Supported Content Types

    Facebook

    status, photo, video, link, carousel, story, reel, gif

    Supported Content Types

    Best Practices

    Content Optimization

    Technical Considerations

    Related Topics

    /accounts

    posts

    Manage user's posts

    /posts

    media

    Upload and list media assets

    /media

    accounts: list of target account IDs (no scheduled_at timestamp)

    Job remains in working state until all targets confirm receipt.
  • Platform Requirements

    • All network-specific content rules still apply (e.g., character limits, media formats).

    • Some networks may perform additional reviews before public display.

    • Ensure the connected accounts have immediate-posting permissions.

  • Processing delays

    For media posts, allow extra time for media processing

    Publer-Workspace-Id

    Yes

    Workspace ID

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    Issue

    Solution

    Rate limiting

    Space out immediate publishing requests to avoid triggering platform limits

    Authentication errors

    Check that social accounts are properly connected and authorized

    Content rejection

    Review platform guidelines for content that might be flagged

    Request Body

    Key Fields

    Sample Request

    Sample Response

    Important Considerations

    Common Issues

    Related Topics

    Content Types
    Media Handling
    Network Reference
    console.log(`Using key ***${apiKey.slice(-4)}`);
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              // network provider as key, e.g., facebook, twitter etc.
              "[network_provider]": {
                "type": "[content_type]",
                "text": "Post content",
                // Additional properties based on content type
              }
            },
            "accounts": [
              {
                "id": "account_id"
                // No scheduled_at parameter
              }
            ]
          }
        ]
      }
    }
    curl -X POST https://app.publer.com/api/v1/posts/schedule/publish \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-Id: YOUR_WORKSPACE_ID" \
      -H "Content-Type: application/json" \
      -d '{
        "bulk": {
          "state": "scheduled",
          "posts": [
            {
              "networks": {
                "facebook": {
                  "type": "status",
                  "text": "Just published this update via the Publer API! #RealTimePosting"
                }
              },
              "accounts": [
                { "id": "66db83154e299efa19a2d8eb" }
              ]
            }
          ]
        }
      }'
    { 
       "job_id": "6810dec617eae6d55d7a5e5b"
    }
    Headers:
    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Deletes one or more posts based on the provided IDs. If no post_ids are provided, all unpublished posts that you have permission to delete will be removed.

    Parameter

    Type

    Required

    Description

    post_ids

    array

    Yes

    Array of post IDs to delete. If omitted, all unpublished posts (scheduled, drafts, recycle, recurring, auto-scheduled, pending, etc.) that you have permission to delete will be deleted. Published posts are excluded.

    You may delete:

    • Posts you created

    • Posts in workspaces you own

    • Posts in workspaces where you have post action access

    • Private drafts: only their creator can delete

    Restrictions:

    • Published posts requiring approval: restricted roles (e.g. editors) cannot delete

    • Queued posts (except reminders): cannot be deleted

    • Pending-state deletions trigger a notification to the creator before removal

    • List Posts API - Retrieve and filter posts

    • Update Posts API - Modify existing posts

    Warning

    If the post_ids query parameter is omitted, this endpoint will delete all non-published posts in the workspace that you have permission to delete. This includes:

    • Scheduled posts

    • Draft posts

    • Auto-scheduled posts

    • Recycle posts

    • Recurring posts

    • Pending posts

    • Other unpublished post states

    Published posts are never deleted when post_ids is omitted.

    Use this operation with caution, as it performs a bulk deletion.

    Requirements

    DELETE /api/v1/posts

    Endpoint

    Query Parameters

    Authorization Rules

    Related Resources

    business

    twitter

    Twitter/X

    profile

    linkedin

    LinkedIn

    page, profile

    pinterest

    Pinterest

    business, profile

    youtube

    YouTube

    channel

    tiktok

    TikTok

    profile

    google

    Google Business

    location

    wordpress

    WordPress

    blog

    telegram

    Telegram

    channel

    mastodon

    Mastodon

    profile

    threads

    Threads

    profile

    bluesky

    Bluesky

    profile

    Rate Limits

    To keep our service reliable and fair, the Publer API enforces rate limits on all requests. Limits are applied per user account (across all API keys) and use a fixed-window algorithm.

    Default Limits

    Limit Window
    Requests Allowed

    2-minute fixed

    100 requests

    Note: If you need higher throughput for your integration, see Requesting Higher Limits below.

    When you reach the rate limits, every API response includes these headers so you can monitor your rate limit status:

    Header
    Description

    Example Response Headers

    If you go over your quota, the API returns:

    • HTTP Status: 429 Too Many Requests

    • Response Body:

    • Headers will show X-RateLimit-Remaining: 0 and a future X-RateLimit-Reset.

    While most social networks don't explicitly limit daily posts, Publer implements posting limits to prevent spam, ensure compliance with platform guidelines, and allocate resources fairly. These limits are calculated on a rolling 24-hour basis in UTC timezone.

    Platform
    Free Plan
    Professional Plan
    Business Plan
    • Rolling 24-hour window: Limits are calculated based on the previous 24 hours from the current time (UTC)

    • Per profile/account: Facebook limits apply per connected profile or page

    • Anti-spam protection: These limits help maintain a balance between automation and spam prevention

    • Cache responses for idempotent or infrequently changing endpoints.

    • Use bulk endpoints (e.g., POST /api/v1/posts/schedule for multiple posts).

    • Stagger non-urgent requests during off-peak hours.

    For integrations requiring a higher rate limit, please contact us with:

    • Your expected request volume (per minute/hour/day)

    • Use case description and critical endpoints

    • Project or company name and contact info

    Email:

    Draft Posts

    Create, manage, and collaborate on draft posts that aren't published immediately. Drafts help you save work-in-progress content, collaborate with your team, and schedule posts for later publishing.

    Overview

    Draft posts are unfinished posts connected to a social account. They can be:

    • Dated drafts: drafts with a set date/time (these typically show up in Calendar views in the UI).

    • Undated drafts: drafts without a set date/time (stored under Drafts in the UI for later review/scheduling).

    Draft Posts are created via the scheduling endpoint using:

    • bulk.state = "draft"

    Draft Posts support the same post structures as normal scheduled/published posts, meaning you can create different kinds of drafts (photos, videos, carousels, reels, etc.) depending on the provider.

    Use the scheduling endpoint with bulk.state: "draft" to save work-in-progress content without publishing.

    Header
    Required
    Value

    Drafts connected to specific social accounts that can optionally include scheduling information.

    Key Features

    • Must include accounts array with account IDs

    • Can include scheduled_at for future publishing (dated drafts)

    • Uses specific network keys (e.g., facebook

    Example Request

    Field
    Type
    Required
    Description
    Field
    Type
    Required
    Description
    Field
    Type
    Required
    Description
    • For Draft Posts (bulk.state = "draft"), use specific provider keys inside posts[].networks (e.g. facebook, instagram, twitter, etc.).

    • The network payload structure depends on the provider and content type (e.g., status, photo, video, carousel, story, reel, etc.).

    Draft Posts can be created using any supported content type (the type field inside networks.[provider]).

    See the full reference.

    • Save often: create drafts early to avoid losing work-in-progress content.

    • Use dated drafts as reminders: set scheduled_at to place drafts on a timeline for later review/publishing.

    • Use the right tool: Draft Posts are for content already tied to specific social accounts. (Use for account-less planning and templates.)

    Auto-Scheduling

    Automatically pick the optimal posting time for your content within a specified date window. Publer analyzes your posting schedule and audience engagement to fill gaps and maximize reach.

    Endpoint

    POST /api/v1/posts/schedule

    Request Headers

    Header
    Required
    Description

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Set auto: true and define range to enable auto-scheduling:

    Field
    Type
    Description

    Omit end_date and set share_next to schedule at the next open slot:

    1. Analyze Schedule: Publer looks at your existing posting queue and calendar.

    2. Identify Slots: Finds open time slots based on your account’s posting schedule.

    3. Optimize: Uses audience engagement data to pick a high-impact time within your range.

    • Fill Gaps: Keep your queue full without manual scheduling.

    • Engagement Boost: Leverage data-driven timing for better reach.

    • Bulk Campaigns: Auto-schedule large batches within a window.

    • Define Posting Schedule: Ensure your account has active time slots configured.

    • Reasonable Ranges: Provide a wide enough window for better slot selection.

    • Mix Methods: Combine auto-scheduling with manual posts for flexibility.

    Issue
    Solution

    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
    Max Photos
    Photo Size Limit
    Caption Support
    Notes

    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.

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

    Omit scheduled_at for immediate posts.

    Field
    Description

    * Omit scheduled_at when publishing immediately.

    1. Upload Images: Use the to upload files.

    2. Receive IDs: Note each media object’s id.

    3. Compose Post: Reference those IDs in your media array.

    • Optimize Quality: Compress and resize images to platform specs.

    • Descriptive Alt Text: Enhance accessibility and SEO.

    • Tailor Captions: Adjust tone and length per network.

    Twitter/X Community Posts

    Publish posts directly to Twitter/X Communities using the Publer API. This feature enables you to reach targeted audiences and participate in focused discussions within X Communities—right from your own app or workflow.

    Overview

    Twitter/X Communities are spaces for people to connect, share, and discuss specific topics. Posts made in a Community are visible to anyone on X, but only Community members can engage (like, reply, etc.) with them.

    • You can only post to Communities you have joined.

    • Community posts help foster deeper engagement on niche topics or interests.

    How It Works

    To publish a post inside a Twitter/X Community via the API, you need:

    • The Community ID (found in the X Community URL: https://x.com/i/communities/{COMMUNITY_ID})

    • The Community Name (for reference and clarity)

    • Whether to share the post with followers or not

    Set the community object inside the details for the twitter network configuration:

    Field
    Type
    Description
    1. Go to the Community on X.

    2. Look at the URL: https://x.com/i/communities/1492410432069451776

    3. The number at the end is your COMMUNITY_ID.

    • Membership Required: You must be a member of the Community to post.

    • Engagement: Only members can engage with Community posts, but all users can view them.

    • Visibility: Community posts are public, but participation is limited to members.

    • Join Relevant Communities: Ensure your X account has joined the Communities you wish to post in.

    • Use for Focused Engagement: Target posts to specific Communities for more relevant discussions.

    • Check Community Guidelines: Each Community may have its own moderation and content rules.

    Updating Posts

    Modify an existing post—whether scheduled or already published—across your social networks. This endpoint handles network-specific constraints and supports advanced features like recycling and recurring schedules.

    Requirements

    • Authentication: Bearer API token

    • Scope: posts

    • Headers:

      • Authorization: Bearer-API YOUR_API_KEY

      • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Updates an existing post by ID. The behavior differs depending on whether the post is scheduled or already published.

    When the post is published, you can only update network-specific params.

    Networks Not Supporting Published Post Updates

    For the following networks, only labels can be updated in Publer's database after a post is published:

    • Twitter/X (polls cannot be edited after publishing)

    • Pinterest

    • Instagram

    • Threads

    If the post is a recurring post, the update will be applied to all future child posts in the recurring series. Already published child posts will not be affected.

    • When updating a post that requires approval, a notification will be sent to the appropriate workspace members.

    • Changes to published posts will be reflected both in Publer's database and on the social media platform (for supported networks).

    • - Retrieve and filter posts

    • - Manage social media accounts

    • - Upload and manage media for posts

    Members

    The Members endpoint returns posting activity and engagement metrics per workspace member, optionally scoped to a single account and time range. Use it to build leaderboards, performance reviews, and workload reports.

    Requirements

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieves analytics for each workspace member within a required date range. Optionally filter to a specific social account.

    Param
    Type
    Required
    Description

    Fields:

    • engagements: Total engagements = likes + comments + shares + post clicks (platform-dependent).

    • posts: Number of posts created by the member in the range.

    • reach: Sum of post reach where supported by the platform/account type (may be omitted for unsupported types).

    • Date range is required; ensure from ≤ to.

    • If account_id is omitted, metrics aggregate across all accessible accounts in the workspace.

    • reach

    • — Discover chart IDs and fetch chart data

    • — Per‑post performance analytics

    • — Hashtag performance

    Twitter/X Long-Form Posts

    Unlock the ability to schedule and publish long-form posts (up to 25,000 characters) to Twitter/X using the Publer API—exclusively for accounts with an X Premium subscription.

    Overview

    Twitter/X supports long-form posts (sometimes called "long posts" or "extended tweets") for users with an X Premium (formerly Twitter Blue) subscription, even at the Basic tier. These posts can contain up to 25,000 characters, far exceeding the standard 280-character limit.

    With Publer, you can programmatically schedule and publish long-form posts via the API. Publer automatically detects your account’s eligibility and switches to the appropriate post type.

    How It Works

    • Accounts with X Premium: You can create and schedule long-form posts up to 25,000 characters.

    • Accounts without X Premium: Your post text will be truncated to the standard 280-character limit, and the long-form post type will be disabled.

    Tip: Validate the post length in your integration to avoid surprises when publishing.

    • Long-form posts are not the same as Twitter threads. Threads are multiple connected posts; long-form posts are a single post with expanded character count.

    • Scheduling long-form posts is not possible directly on X/Twitter—use Publer’s API or platform to achieve this functionality.

    To schedule a Twitter/X long-form post, set the network type to "long_post" inside the details object for the "twitter" network:

    Field
    Type
    Description
    • X Premium Required: Only X Premium accounts can publish long-form posts. For other accounts, posts will be truncated to 280 characters.

    • Not for Threads: Use this format for single extended posts, not for multi-part threads.

    • API Detection: Publer automatically detects account eligibility for long-form posting.

    • Check your account’s X Premium status before relying on long-form functionality.

    • Always validate post length to ensure your content is not unintentionally truncated.

    • Use long-form posts for in-depth announcements, articles, or detailed updates—threads remain better for sequential storytelling.

    Quickstart Guide

    This guide walks you through the core steps to integrate with Publer’s API in minutes. By the end, you’ll have published your first scheduled post.

    • A Business Publer account

    • Basic familiarity with HTTP/JSON APIs

    • A command-line tool (curl) or API client (Postman, Insomnia)

    Bulk Scheduling

    Efficiently schedule up to 500 posts across multiple accounts and networks in a single API request. Bulk scheduling in Publer streamlines content planning and helps you stay organized at scale.

    Bulk scheduling lets you prepare, customize, and schedule a large number of posts at once supporting both text and media content for all supported networks. Each post in the bulk payload can have unique content, network targeting, and scheduling options.

    • Create and schedule up to 500 posts in a single API call.

    • Combine multiple social accounts and networks per post.

    Post with Location

    Tag your posts with a real-world location to increase engagement and reach more local audiences. Publer supports location tagging for Facebook Pages, Instagram Business accounts and Threads accounts.

    Location tagging attaches a physical place (such as a city, office, or venue) to your Facebook, Instagram or Threads post. This is especially helpful for businesses, events, and local marketing.

    Use Publer’s dedicated endpoints to search and select the correct location for your post:

    Location Object Example:

    When creating or scheduling a post, use the location object inside the relevant accounts array:

    Example Request:

    GIF Posts

    Animated GIFs are a fun, engaging way to capture attention. Use the Publer API to create or schedule single‐GIF posts with caption and thumbnail support across multiple platforms.

    GIF posts let you share looping animations with optional captions and metadata. Perfect for reactions, announcements, or adding personality to your feed.

    • Cross-Platform GIF Publishing

    • Custom Caption Support

    Media Options

    Manage and retrieve Facebook albums, Pinterest boards, and saved watermarks for your social accounts—all within your workspace. Use these options to organize content and protect your creative assets.

    Media options help you:

    • Post your Facebook photos into albums.

    • Pin to specific Pinterest boards.

    Best Times to Post

    The Best Times to Post endpoint returns a heatmap of optimal posting times for a specific account, based on historical performance. Use it to power schedule suggestions, calendar overlays, and autofill routines.

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    Post with Signature

    Automatically append a branded or informative signature to your social posts. Signatures help drive consistency and professionalism across your accounts.

    A signature is a reusable block of text (such as a disclaimer, call-to-action, or branded tagline) you can attach to posts on supported networks. You can manage multiple signatures per account and select which one to append when scheduling or publishing.

    Before attaching a signature to your post, retrieve the available signatures for your account(s):

    When scheduling or publishing a post, use the signature parameter within the relevant accounts object to append a signature to the post.

    Example Request:

    24

    36

    Instagram Posts & Reels

    15

    20

    25

    Instagram Stories

    15

    20

    25

    Threads App Posts

    150

    200

    250

    TikTok Videos

    15

    20

    25

    Twitter / X Posts

    25

    50

    100

    Mastodon Posts

    25

    50

    100

    Bluesky Posts

    25

    50

    100

    LinkedIn Profile Posts

    10

    12

    14

    LinkedIn Page Posts

    12

    18

    24

    Pinterest Pins

    12

    24

    36

    Google Business Updates

    5

    10

    15

    YouTube Videos & Shorts

    5

    10

    15

    WordPress Articles

    12

    18

    24

    Telegram Messages

    5

    10

    15

    Platform compliance: Limits align with each social network's community guidelines

    Monitor headers and throttle your client.

  • Implement exponential backoff when you approach or hit the limit.

  • X-RateLimit-Limit

    Total requests allowed in the current window

    X-RateLimit-Remaining

    Requests remaining in the current time window

    X-RateLimit-Reset

    UNIX timestamp when your window resets (next available slot)

    Facebook Posts & Reels

    12 / day / profile

    24 / day / profile

    36 / day / profile

    Facebook Stories

    Tracking Your Usage

    When You Exceed the Limit

    Daily Post Limits

    Post Limits by Plan

    Important Notes

    Best Practices to Avoid Throttling

    Requesting Higher Limits

    support@publer.com

    12

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    ,
    instagram
    ,
    twitter
    , etc.)

    Yes

    List of posts to create

    Yes

    Social accounts the draft is connected to

    No

    ISO 8601 timestamp. If provided, the draft becomes a dated draft. If omitted, it’s an undated draft.

    Draft Posts support the same payload shapes as scheduled/published posts.

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Publer-Workspace-Id

    Yes

    Workspace ID

    bulk.state

    string

    Yes

    Must be "draft" for Draft Posts

    bulk.posts

    posts[].networks

    object

    Yes

    Network configurations for the post (use provider keys like facebook, instagram, etc.)

    posts[].accounts

    accounts[].id

    string

    Yes

    Social account ID

    accounts[].scheduled_at

    Endpoint

    Request Headers

    Draft Type & Example

    Account-Connected Draft (draft)

    Parameters

    Bulk

    Post Object

    Accounts (required for Draft Posts)

    Network Configuration

    Content Types

    Best Practices

    Related Topics

    Content Types
    Ideas
    Content Types
    Publishing Methods
    Media Handling

    array

    array

    string

    range.end_date

    string

    Latest ISO 8601 timestamp for posting (inclusive, optional)

    share_next

    boolean

    (Optional) When true, schedule in the very next available slot

    Schedule: Creates the post at the selected time.
    Hands-Off Workflow: Let Publer handle timing so you focus on content.
    Monitor Jobs: Poll /api/v1/job_status/{job_id} to confirm success.

    Publer-Workspace-Id

    Yes

    Workspace ID

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    auto

    boolean

    Set to true to enable auto-scheduling

    range.start_date

    string

    Earliest ISO 8601 timestamp for posting (inclusive)

    No available slots

    Add or open time slots in your posting schedule within the date range.

    Suboptimal timing

    Expand the date range or refine your posting schedule.

    Data insufficient

    Post more content manually to build up engagement metrics.

    Request Body

    Key Parameters

    Examples

    Basic Auto-Scheduling

    Next Available Slot

    How It Works

    Use Cases

    Best Practices

    Common Issues

    Related Topics

    Publishing Methods
    Scheduled Publishing
    Recurring Posts

    Instagram

    10

    8 MB

    Yes

    Minimum resolution: 320x320 px, automatically cropped.

    TikTok

    35

    No restriction

    Yes

    Cannot mix photos with GIFs or videos.

    Threads

    20

    8 MB

    Yes

    Cannot mix photos with GIFs or videos.

    Twitter

    4

    5 MB

    Yes

    Supports only up to 4 photos per post.

    LinkedIn

    20

    No restriction

    Yes

    Photos and GIFs are supported, cannot mix with videos.

    Telegram

    10

    10 MB

    Yes

    Cannot mix photos with GIFs or videos.

    Mastodon

    4

    8 MB

    Yes

    Supports JPEG, PNG, or WEBP formats.

    accounts[].scheduled_at*

    ISO 8601 timestamp for scheduling (optional).

    Publish/Schedule: Send the payload to the posts endpoint.

    Experiment Carousels: Test image order to boost engagement.
  • Consistent Branding: Use uniform styles and watermarks.

  • Facebook

    Unlimited

    No restriction

    Yes

    networks.{provider}.type

    Must be "photo".

    networks.{provider}.media

    Array of { id, type, caption } objects.

    accounts[].id

    Target social account ID.

    Platform Support & Limits

    Request Structure

    Required Parameters

    Media Workflow

    Best Practices

    Related Topics

    Media Handling API
    Media Handling
    Content Types
    Publishing Methods

    No restrictions on photo size.

    networks.twitter.details.community.share_with_followers

    boolean

    Whether to share the post with followers or not (defaulted to true)

    Scheduling: You can schedule Community posts just like any other X post using Publer.

    networks.twitter.details.community.id

    string

    Community ID (from the Community URL)

    networks.twitter.details.community.name

    string

    Name of the Community (optional, for clarity in requests/logs)

    Example Request

    How to Find the Community ID

    Important Notes

    Best Practices

    Related Topics

    Twitter/X Long-Form Posts
    Content Types Overview
    Scheduling Limitation: Twitter/X doesn’t natively support scheduling long-form posts; this is enabled via Publer’s platform and API.

    networks.twitter.details.type

    string

    Must be "long_post" for long-form posts

    networks.twitter.text

    string

    Content of your long-form post (max 25,000 characters with X Premium)

    Key Differences

    Request Example

    Important Notes

    Best Practices

    Related Topics

    Content Types Overview
    Publishing Methods
    X-RateLimit-Limit: 100
    X-RateLimit-Remaining: 0
    X-RateLimit-Reset: 1714558492
    {
      "error": "Rate limit exceeded. Retry later."
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "draft",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "First Draft"
              }
            },
            "accounts": [
              {
                "id": "647a0edddb2797b89044e2c1",
                "scheduled_at": "2025-06-23T10:43:00+02:00"
              }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Let Publer pick the best time for this post!"
              }
            },
            "accounts": [
              { "id": "ACCOUNT_ID" }
            ],
            "range": {
              "start_date": "2025-05-23T07:45:00Z",
              "end_date":   "2025-05-31T23:59:00Z"
            },
            "auto": true
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "facebook": {
              "type": "status",
              "text": "Let Publer choose the best time!"
            }
          },
          "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
          "range": {
            "start_date": "2025-05-23T07:45:00Z",
            "end_date":   "2025-05-31T23:59:00Z"
          },
          "auto": true
        }]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "facebook": {
              "type": "status",
              "text": "Post in next available slot"
            }
          },
          "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
          "range": { "start_date": "2025-05-23T07:45:00Z" },
          "share_next": true,
          "auto": true
        }]
      }
    }
    {
      "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" }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "twitter": {
                "type": "status",
                "details": {
                  "community": {
                    "id": "1508851391443484686",
                    "share_with_followers": true,
                    "name": "ALBANIANS"
                  }
                },
                "text": "Post to X communities"
              }
            },
            "accounts": [
              {
                "id": "66e011b94e299eb49376c715",
                "scheduled_at": "2025-07-03T10:28+02:00"
              }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "twitter": {
                "type": "status",
                "details": {
                  "type": "long_post"
                },
                "text": "This is a twitter long post"
              }
            },
            "accounts": [
              {
                "id": "66e011b94e299eb49376c715",
                "scheduled_at": "2025-09-24T14:16+02:00"
              }
            ]
          }
        ]
      }
    }

    string

    No

    Title for the post (used in some networks)

    Facebook

    • Text content (both description and message fields)

    • Title (only for video posts, in the name field)

    WordPress

    • Title

    • Content (HTML converted)

    Telegram

    • For status updates and links: Text content

    Mastodon

    • Text content

    • Title

    Bluesky

    PUT /api/v1/posts/:id

    Parameter

    Type

    Required

    Description

    text

    string

    Yes

    The main content text of the post

    Network

    Updatable Fields

    LinkedIn

    • Text content

    YouTube

    • Title (limited to 100 characters)

    • Text/description (limited to 5000 characters)

    Google Business

    • Text content (called "summary" in Google's API, limited to 1500 characters)

    Endpoint

    Parameter Reference

    Special Cases

    Recurring Posts

    Notes

    Related Resources

    List Posts API
    Accounts API
    Media API

    title

    Yes

    End date (inclusive).

    account_id

    string

    No

    Restrict analytics to one social account. Omit for all workspace accounts.

    account_ids[]: Accounts the member posted to.

  • user: Member info { id, name, picture }.

  • may be missing for networks that don’t expose member-level reach. Handle absent fields gracefully.
  • Insights refresh automatically (about every 24 hours). Use “Sync Insights” in the UI to update on demand.

  • — Suggested posting time slots
    GET /api/v1/analytics/members

    from

    date (YYYY-MM-DD)

    Yes

    Start date (inclusive).

    to

    Endpoint

    Get Members Analytics

    Description

    Query Parameters

    Notes

    Related Resources

    Charts
    Post Insights
    Hashtag Analysis

    date (YYYY-MM-DD)

    Best Times
  • Sign in to Publer and verify you have Business plan access.

  • Go to Settings → Access & Login → API Keys.

  • Click Create API Key.

  • Enter a descriptive name, then select scopes:

    • workspaces

    • accounts

    • posts

  • Click Create.

  • Copy and store the key securely—this value will not be shown again.

  • Before making other requests, let's retrieve your workspaces. The workspace ID is required in the header for most API operations:

    Now you can use a workspace ID in your subsequent requests by including it in the header:

    Next, let's retrieve the social media accounts in your workspace. You'll need the account IDs to specify where to publish your posts:

    Make note of the account IDs as you'll need them to specify where to publish your content in the next step.

    Make your first scheduled post with one API call:

    The API returns a job ID that you can use to check the status of your request:

    Posts are created asynchronously. Use the returned job_id to check progress:

    If there's an error with your request, the response will include details about what went wrong:

    List your scheduled posts to confirm creation:

    1. Generate an API key

    2. List workspaces → pick a workspace ID

    3. List accounts → pick account IDs

    4. Submit a post creation request

    5. Poll job status until completed

    6. Fetch posts to verify

    This async pattern scales across multiple workspaces, accounts, and post types.

    • Explore Content Types (photos, videos, links, polls)

    • Dive into Media Handling and upload workflows

    • Learn about Publishing Methods (drafts, recurring posts)

    • Review for platform-specific limits

    For full API details, see the API Reference. For assistance, contact support@publer.com.

    BUSINESS ACCESS ONLY: The Publer API is currently available exclusively to Publer Business users.

    Prerequisites

    Step 1: Generate an API Key

    curl -X GET "https://app.publer.com/api/v1/workspaces" \
      -H "Authorization: Bearer-API YOUR_API_KEY"
    [
        {
          "id": "5f8d7a62c9e77e001f36e3a1",
          "name": "My Primary Workspace",
          "role": "owner",
          "picture": "https://publer.io/uploads/workspaces/thumb_mini_workspace_123.png"
        },
        {
          "id": "60a2e45f9b3c8d002a4b7c32",
          "name": "Client Workspace",
          "role": "admin",
          "picture": "https://publer.io/uploads/workspaces/thumb_mini_workspace_456.png"
        }
    ]
    Publer-Workspace-Id: 5f8d7a62c9e77e001f36e3a1
    curl -X GET "https://app.publer.com/api/v1/accounts" \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-ID: 5f8d7a62c9e77e001f36e3a1"
    {
      "accounts": [
        {
          "id": "63c675b54e299e9cf2b667ea",
          "name": "My Facebook Page",
          "provider": "facebook",
          "type": "page",
          "picture": "https://publer.io/uploads/accounts/thumb_mini_facebook_page.jpg",
          "status": "active"
        },
        {
          "id": "63c675d74e299e9cf2b667eb",
          "name": "Company LinkedIn Page",
          "provider": "linkedin",
          "type": "page",
          "picture": "https://publer.io/uploads/accounts/thumb_mini_linkedin_page.jpg",
          "status": "active"
        },
        {
          "id": "63c675e94e299e9cf2b667ec",
          "name": "Brand Twitter",
          "provider": "twitter",
          "type": "profile",
          "picture": "https://publer.io/uploads/accounts/thumb_mini_twitter.jpg",
          "status": "active"
        }
      ]
    }
    curl -X POST "https://app.publer.com/api/v1/posts/schedule" \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-Id: 5f8d7a62c9e77e001f36e3a1" \
      -H "Content-Type: application/json" \
      -d '{
        "bulk": {
          "state": "scheduled",
          "posts": [
            {
              "networks": {
                // You need to provide the network provider as the key, e.g., facebook, twitter
                "facebook": {
                  "type": "status", // Type of the post
                  "text": "Status Update Post" // Text of the post
                }
              },
              "accounts": [
                {
                  "id": "63c675b54e299e9cf2b667ea", // Id of the selected account
                  "scheduled_at": "2025-09-06T14:16+02:00" // Scheduled time
                }
              ]
            }
          ]
        }
      }'
    {
      "job_id": "68176fa0f0eb419444bee686"
    }
    curl -X GET "https://app.publer.com/api/v1/job_status/68176fa0f0eb419444bee686" \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-Id: 5f8d7a62c9e77e001f36e3a1"
    {
      "status": "complete",
      "payload": {
        "failures": {}
      },
      "plan": {
        // other account-specific data
      }
    }
    {
      "status": "complete",
      "payload": {
        "failures":[
            {
              "account_id": "63c675b54e299e9cf2b667ea",
              "account_name": "Test Page",
              "provider": "facebook",
              "message": "There's another post at this time. A one minute gap is required between posts"
            }
        ]
      },
      "plan": {
        // other account-specific data
      }
    }
    curl -X GET "https://app.publer.com/api/v1/posts?state=scheduled" \
      -H "Authorization: Bearer-API YOUR_API_KEY" \
      -H "Publer-Workspace-ID: 5f8d7a62c9e77e001f36e3a1"
    {
      "posts": [
        {
          "id": "68176f0e8bee9dc9b0ce3427",
          "text": "Status Update Post for 2025-05-07!",
          "url": null,
          "title": null,
          "state": "scheduled",
          "type": "status",
          "account_id": "63c675b54e299e9cf2b667ea",
          "user": {
            "id": "5b1ec026db27977424e8599e",
            "name": "Business User",
            "picture": "https://publer.io/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
          },
          "scheduled_at": "2025-05-08T14:30:00.000+02:00",
          "post_link": null
        }
      ],
      "total": 1
    }

    Step 2: List Workspaces

    Sample Response

    Step 3: List Social Accounts

    Expected Response

    Step 4: Create a Scheduled Post

    Sample Response

    Step 5: Poll Job Status

    Successful Job Response

    Failed Job Response

    Step 6: Verify Scheduled Posts

    Sample Response

    Understanding the Workflow

    Next Steps

    Supports text, images, videos, and more.

  • Choose between Schedule, Auto Schedule, or Recycle modes.

  • Individually customize each post (content, media, timing, etc.).

  • Posts without a scheduled_at field use the account’s posting schedule.

  • Send a POST request to the scheduling endpoint with your bulk payload:

    Header
    Required
    Description

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Publer-Workspace-Id

    Yes

    Workspace ID for scheduling posts

    Example Payload:

    Important: Every object in bulk.posts must contain the same accounts array. The accounts[].id values (and their order) must be identical for every post. Only per-account fields such as scheduled_at may differ.

    Field
    Type
    Description

    bulk.state

    string

    Scheduling mode: "scheduled" (manual schedule), "auto", or "recycle"

    bulk.posts

    array

    Array of up to 500 post objects

    • Schedule: Add scheduled_at to specify exact publish time per account/post.

    • Auto Schedule: Omit scheduled_at and set bulk.state to "auto" to use the account's posting schedule.

    • Recycle: Set bulk.state to "recycle" to enable cyclical republishing based on the account's recycle settings.

    • Recurring posts are not supported in bulk scheduling.

    1. Prepare Your Bulk Payload: List each post with its content, targeted networks, and accounts.

    2. Customize Each Post: Add media, captions, hashtags, locations, watermarks, and more individually per post.

    3. Choose Scheduling Mode: Use scheduled_at for manual scheduling or let Publer auto-schedule based on your rules.

    4. Submit: Send your payload to /posts/schedule and monitor job status for completion.

    • Use bulk scheduling for campaigns, product launches, or large-scale social content plans.

    • Individually tailor each post for its platform and audience.

    • Use the scheduling modes for flexibility—manual times for some posts, auto-schedule for others.

    • Every post in a bulk request must target the same social accounts. The accounts[].id values (and their order) must be identical across all posts. You may only change per-account properties such as scheduled_at between posts.

    • Publishing Methods

    • Content Types

    • Media Handling

    Overview

    Key Features

    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Bulk Scheduling"
              },
              "mastodon": {
                "type": "status",
                "text": "Bulk Scheduling"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea"
              },
              {
                "id": "650170394e299e33b427c2ff",
                "scheduled_at": "2025-08-17T16:19+02:00"
              }
            ]
          },
          {
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea"
              },
              {
                "id": "650170394e299e33b427c2ff",
                "scheduled_at": "2025-07-17T17:19+02:00"
              }
            ],
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Second Post"
              },
              "mastodon": {
                "type": "status",
                "text": "Second Post"
              }
            }
          },
          {
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea"
              },
              {
                "id": "650170394e299e33b427c2ff",
                "scheduled_at": "2025-06-17T18:19+02:00"
              }
            ],
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Third post"
              },
              "mastodon": {
                "type": "status",
                "text": "Third post"
              }
            }
          }
        ]
      }
    }

    Request Structure

    Endpoint

    Request Headers

    Request Body

    Parameters

    Scheduling Modes

    How It Works

    Best Practices

    Related Topics

    Field
    Type
    Description

    accounts[].id

    string

    Target account ID

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit for immediate publish)

    • Supported Networks: Location tagging is supported for Facebook Pages, Instagram Business and Threads accounts only.

    • Media Types Restrictions: You cannot add locations to Facebook regular videos, GIFs, Stories, or Reels scheduled via reminders.

    • Other Networks: Twitter/X no longer supports location tagging via API.

    • Search Required: Always search and select the correct location using the endpoints above before scheduling your post.

    • Always verify the location by name and address before tagging.

    • Tagging your business or event location can boost local discovery and engagement.

    • Use location tags for promotions, events, or posts relevant to specific regions

    • Publishing Methods

    • Content Types

    • Media Handling

    {
      "id": "308281375929281",
      "name": "Tirana",
      "info": "Tirana, Albania ⋅ 590 follow this",
      "verified": true
    }

    Overview

    Step 1: Search for a Location

    Step 2: Schedule or Publish a Post with a Location

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Facebook location"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-06-14T10:21:00+02:00",
                "location": {
                  "id": "308281375929281",
                  "name": "Tirana",
                  "info": "Tirana, Albania ⋅ 590 follow this",
                  "verified": null,
                  "address": "Tirana, Albania",
                  "checkins": "590"
                }
              }
            ]
          }
        ]
      }
    }

    Parameters

    Key Notes & Limitations

    Best Practices

    Related Topics

    Thumbnail Preview

  • Immediate or Scheduled Posting

  • Network
    Size Limit
    Notes

    Facebook

    4 MB

    —

    Twitter/X

    15 MB

    4×4 to 2048×2048 px resolution

    Send to the scheduling endpoint (/posts/schedule) or immediate‐publish (/posts/schedule/publish):

    Field
    Description

    networks.{provider}.type

    Must be "gif".

    networks.{provider}.media

    Array of exactly one media object

    networks.{provider}.media[].id

    "external" or your uploaded media ID

    1. Reference or upload your GIF via the Media Handling API.

    2. Build your post object with "type": "gif".

    3. (Optional) Add "thumbnail" and "name" for preview.

    4. Call /posts/schedule or /posts/schedule/publish.

    5. Monitor /api/v1/job_status/{job_id} for completion.

    • Compress GIFs to meet platform size limits without sacrificing quality.

    • Provide a clear, engaging thumbnail to boost click-through.

    • Use concise captions to add context or calls-to-action.

    • Platform-Specific Formats

    • Publishing Methods

    • Content Types

    Overview

    Key Features

    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "gif",
                "text": "Check out this fun GIF!",
                "media": [
                  {
                    "id": "external",
                    "type": "gif",
                    "url": "https://media.giphy.com/media/xyz/giphy.gif",
                    "path": "https://media.giphy.com/media/xyz/giphy.gif",
                    "thumbnail": "https://media.giphy.com/media/xyz/200w.webp",
                    "name": "Fun Reaction GIF"
                  }
                ]
              }
            },
            "accounts": [
              { 
                "id": "ACCOUNT_ID", 
                "scheduled_at": "2025-08-02T23:18:00+02:00" 
              }
            ]
          }
        ]
      }
    }

    Platform Support & Limits

    Request Structure

    Required Parameters

    Workflow

    Best Practices

    Related Topics

    Protect your images and videos with custom watermarks.

    Retrieve all available albums/boards and watermarks per account to use in your post scheduling workflows.

    Use the following endpoint to list all available albums (for Facebook), boards (for Pinterest), and saved watermarks for the accounts in your workspace.

    Field
    Type
    Description

    id

    string

    Account ID

    albums

    array

    List of albums (Facebook) or boards (Pinterest)

    • Facebook Albums: Select an album ID when posting to Facebook to keep your photos organized and easy to browse.

    • Pinterest Boards: Use the board ID to specify where your Pin should be published.

    • Watermarks: Choose a watermark ID to apply a logo, copyright, or brand mark to your images/videos. Watermarks help deter unauthorized use and reinforce your brand.

    • Content Types

    • Publishing Methods

    • Media Handling

    Overview

    Fetch Media Options

    Parameters

    How to Use Media Options

    Related Topics

    Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieves a day/hour heatmap of posting performance tailored to the audience of the specified account. Optionally include competitor data and restrict to a custom date range.

    Parameter
    Type
    Required
    Description

    account_id

    string

    No

    Social account to analyze. Omit for all workspace accounts.

    Parameter
    Type
    Required
    Description

    competitors

    string

    No

    For competitor data. true or false (default false).

    competitor_id

    • Object keyed by day of week (Monday..Sunday).

    • Each day maps to an array of 24 numbers (hour indexes 0..23).

    • Each number is a relative engagement/performance score (higher = better posting time). Use for ranking and heatmap intensity; not a percentage.

    • Default window: If no dates are provided, best times are computed from recent history (commonly last 7 days).

    • Workspace/account settings (e.g., “day starts at” and “week starts on”) influence the visualization in the app; the API always returns 24 hourly slots per day.

    • Heatmap scores are relative within the dataset; normalize in your UI if combining multiple accounts.

    • Competitor view requires competitors=true; use competitor_id to focus on a single competitor.

    • Data refreshes automatically (about every 24 hours). Use Sync Insights in the UI for on‑demand refresh.

    • Charts — Discover chart IDs and fetch chart data

    • Post Insights — Per‑post performance analytics

    • Hashtag Analysis — Hashtag performance

    • — Workspace member analytics

    Requirements

    GET /api/v1/analytics/:account_id/best_times

    Endpoint

    Get Best Times to Post

    Description

    URL Parameter

    Query Parameters

    Structure

    Notes

    Related Resources

    Field
    Type
    Description

    accounts[].id

    string

    Target account ID

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit for immediate publishing)

    • Account-specific: Up to 10 signatures per account.

    • Supported Networks: Most networks except Twitter/X and Bluesky (unless you have X Premium, due to character limits).

    • Photo Captions: On Facebook, configure whether the signature is included in photo captions for multi-photo posts.

    • Auto-Share: Signatures are not included when you auto-share a scheduled post.

    • Signature Management: Signatures must be created and managed for each social account individually.

    • Craft signatures that reinforce your brand identity.

    • Use signatures for legal disclaimers, campaign CTAs, or promotional blurbs.

    • Set a default signature for frequent use.

    • Publishing Methods

    • Content Types

    • Media Handling

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Check out our latest news!"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-06-13T10:16:00+02:00",
                "signature": "680fa73ebd7195d33da6630b"
              }
            ]
          }
        ]
      }
    }

    Overview

    Step 1: Fetch Available Signatures

    Step 2: Create or Schedule a Post with a Signature

    Parameters

    Key Notes & Limitations

    Best Practices

    Related Topics

    Post with Watermark

    Protect your creative content and reinforce your brand by automatically applying watermarks to photos and videos you share across your social accounts.

    Overview

    A watermark is a logo or symbol placed on your media to discourage unauthorized use and promote your brand. With Publer, you can save, manage, and apply unique watermarks per account—no editing skills required.

    Watermarking is available on the Professional Plan for images and the Business Plan for videos.

    Step 1: Fetch Available Watermarks

    Use the Media Options endpoint to get all saved watermarks for your account(s):

    Response Example:

    [
      {
        "id": "63c675b54e299e9cf2b667ea",
        "albums": [],
        "watermarks": [
          {
            "id": "680fa7bebd7195d33da6630d",
            "name": "Brand Logo",
            "opacity": 80,
            "size": 6,
            "position": "bottom_right",
            "default": true,
            "image": "https://cdn.example.com/watermarks/logo.png"
          }
        ]
      }
    ]
    • Each watermark is account-specific.

    • You can create and manage multiple watermarks per account in Publer.

    When creating or scheduling a post, specify the full watermark object in the relevant accounts array. The watermark settings will be applied to all attached media.

    Example Request:

    Field
    Type
    Description
    • Use PNG logos with transparent backgrounds for cleaner results.

    • Place watermarks in corners with moderate opacity to protect without distracting.

    • Watermarking is available per account and per post—choose the right watermark for each audience.

    • Plan Requirements: Watermarking images requires the Professional Plan, videos require the Business Plan.

    • Unlimited Media: No limit on the number of photos you can watermark per post.

    • Account-specific: Watermarks are managed and applied per account.

    Multi-Link Posts (Facebook Carousels)

    Create and schedule multi‐link carousel posts on Facebook Pages. Carousels let you showcase up to 10 clickable cards—each with its own image, title, description, and call-to-action—in a single organic post.

    Request Body

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "carousel",
                "text": "Explore our top features!",
                "sublinks": [
                  {
                    "url": "https://publer.com",
                    "title": "Publer Dashboard",
                    "description": "Manage all your social accounts in one place.",
                    "images": [
                      "https://cdn.publer.com/images/dashboard1.jpg",
                      "https://cdn.publer.com/images/dashboard2.jpg"
                    ],
                    "default_image": 0,
                    "call_to_action": "LEARN_MORE"
                  },
                  {
                    "url": "https://publer.com/pricing",
                    "title": "Pricing Plans",
                    "description": "Find the right plan for your team.",
                    "images": [
                      "https://cdn.publer.com/images/pricing.jpg"
                    ],
                    "default_image": 0,
                    "call_to_action": "SIGN_UP"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-07-06T23:18:00Z"
              }
            ]
          }
        ]
      }
    }

    Parameters

    networks.facebook

    Field
    Type
    Description

    type

    string

    Must be "carousel".

    Field
    Type
    Description
    • Pages Only: Supported on Facebook Pages. Group posts will include only the first sublink.

    • Max Sublinks: Up to 10 cards per carousel.

    • No Cost: Carousel posts are organic (no ad spend).

    1. Select Page Choose a Facebook Page account in the accounts array.

    2. Define Sublinks Provide url, title, description, and images for each card.

    • Engaging Thumbnails Use high-quality images that clearly represent each link.

    • Clear Titles & Descriptions Keep text concise and action-oriented to drive clicks.

    • Focused Carousels Limit to 5–7 cards to avoid overwhelming users.

    Text Posts

    Simple yet powerful status updates without media attachments. Text posts are widely supported, versatile, and often drive high engagement.

    Overview

    Text posts (status updates) let you share plain-text messages across all major social networks. With the Publer API you can:

    • Publish or schedule text updates simultaneously to multiple platforms

    • Customize each network’s copy to match character limits and conventions

    • Leverage network-specific features: hashtags, mentions, rich formatting

    • Cross-Platform Publishing Send consistent or tailored copy to every network in one API call.

    • Character Limit Handling Automatic enforcement of each platform’s text length.

    • Rich Text Support Use hashtags, emojis, and markdown styling where supported.

    Below is an example showing a text post scheduled for multiple platforms:

    Field
    Description
    • Optimize per Platform Tailor messaging length and tone: concise on Twitter, detailed on LinkedIn.

    • Use Hashtags Strategically Add relevant tags to boost discoverability; match platform conventions.

    • Schedule for Peak Times Publish when your audience is most active across time zones.

    Posts

    The Posts API lets you list, filter, and inspect social media posts across your connected accounts. Build dashboards, content calendars, or analytics by combining powerful query parameters.

    • Authentication: Bearer API token

    • Scope: posts

    Creating Posts

    The Posts Create endpoints let you asynchronously schedule, draft, or immediately publish content across one or more social networks. Submit a batch request, receive a job ID, then poll for completion.

    • Authentication: Bearer API token

    • Scopes: posts, media

    Ideas

    Ideas are unfinished posts or content templates that aren’t linked to any specific social account yet. You can create them, work on them over time, collaborate with your team, and turn them into real posts whenever you’re ready.

    • draft_public: visible to the entire workspace and editable by teammates (based on permissions)

    • draft_private: visible only to the creator

    Recurring Posts

    Automatically publish the same post at regular intervals, indefinitely or until a specified stop condition.

    Header
    Required
    Description

    Video Posts

    Dynamic, high-impact video content for social networks. Video posts drive significantly more views and shares than static media, and the Publer API makes it easy to upload, configure, and schedule videos across multiple platforms.

    Programmatically create and schedule video content—standard uploads, short-form (Reels/Shorts/Stories), and rich metadata (titles, descriptions, custom thumbnails)—while meeting each network’s format rules and size limits.

    • Cross-Platform Publishing One API call to distribute videos to Facebook, Instagram, YouTube, TikTok, LinkedIn, and more.

    • Format Versatility Support for standard videos, short-form (Reels, Shorts), and Stories.

    Polls

    Create and schedule interactive polls on LinkedIn, Mastodon, and Twitter to engage your audience and gather feedback.

    • Cross-Platform Polls: One payload to post polls on multiple networks

    • Flexible Duration: Support for platform-specific duration limits

    • Option Constraints: Enforce character limits and unique choices

    Post Insights

    The Post Insights endpoint retrieves detailed performance analytics for published posts, with powerful filtering, sorting, and pagination. Use it to build per-post dashboards, leaderboards, and competitor comparisons.

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    LinkedIn PDF Carousels

    Turn multiple images or documents into a scrollable PDF carousel in a single LinkedIn post. Perfect for presentations, portfolios, and multi-page documents.

    Include type: "photo" and set details.type: "document" to bundle your media into a PDF carousel. You may upload images, PDFs, Word, or PowerPoint files up to 100 pages/photos.

    Field
    Type
    Description

    Pinterest Pins With a Link URL

    Share visually engaging Pins with an external link URL to drive traffic from Pinterest boards.

    Create or schedule a Pinterest Pin by setting type: "photo", adding your media, specifying url for the external link, and the album_id to select the destination board.

    • Single API call to schedule or publish…

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    posts[].networks

    object

    Networks and their post data (e.g., Facebook, Mastodon, etc.)

    posts[].networks.{network}

    object

    Post content for each targeted network

    posts[].accounts

    array

    Array of account objects that will receive this post

    accounts[].id

    string

    Target social account ID. The account IDs must be identical across every posts[].accounts array in the bulk request.

    accounts[].scheduled_at

    string

    ISO 8601 time for scheduled post (omit for auto or recycle based on posting schedule)

    ...

    ...

    All other post options (media, watermarks, signature, location, etc.) supported per post type

    LinkedIn

    Unlimited

    Native GIF support

    Telegram

    50 MB

    —

    Mastodon

    8 MB

    Supports JPEG, PNG, WEBP, and GIF

    Pinterest

    Unlimited

    —

    networks.{provider}.media[].type

    Must be "gif".

    networks.{provider}.media[].url

    Direct URL to the GIF file

    networks.{provider}.media[].path

    Same as URL or CDN path

    networks.{provider}.media[].thumbnail

    URL to a GIF thumbnail (e.g., WebP format)

    networks.{provider}.media[].name

    Descriptive name or title for the GIF

    accounts[].id

    Target social media account ID

    accounts[].scheduled_at

    ISO 8601 timestamp for scheduling (omit for immediate)

    Network Reference

    title

    string

    Card title (overrides fetched metadata).

    description

    string

    Card description (overrides fetched metadata).

    images

    string[]

    Array of image URLs for this card.

    default_image

    integer

    Index (0-based) of the default image in images.

    call_to_action

    string

    CTA button type: NO_BUTTON, LEARN_MORE, SIGN_UP, etc.

    phone_number

    string

    (Optional) Phone number for call-to-action cards.

    customized

    boolean

    (Optional) true if overriding the link’s default thumbnail or metadata.

    Syncing: Published carousel posts can only sync back as regular link posts (no carousel structure).

    Arrange Order Order sublinks as they should appear (array index defines order).

  • Schedule or Publish

    • For scheduled: set scheduled_at under accounts.

    • For immediate: omit scheduled_at and use /posts/schedule/publish.

  • A/B Test CTAs Experiment with LEARN_MORE, SIGN_UP, and other button types.

    text

    string

    Caption shown above the carousel cards.

    sublinks[]

    array

    List of carousel items (max 10).

    url

    string

    Target link for this card.

    provider_display

    string

    (Optional) Display domain or provider name.

    sublinks[] Object

    Key Notes & Limitations

    Workflow

    Best Practices

    Related Topics

    Platform-Specific Formats
    Publishing Methods
    Content Types

    accounts[].watermark

    object

    Watermark object to apply (see below)

    watermark.id

    string

    Watermark ID (from fetched media options)

    watermark.name

    string

    Watermark label

    watermark.opacity

    number

    Opacity (0–100, higher = more opaque)

    watermark.size

    number

    Relative size percentage (e.g., 6 = 6% of media size)

    watermark.position

    string

    Position on media (bottom_right, top_left, etc.)

    watermark.default

    boolean

    Whether this is the default watermark

    watermark.image

    string

    URL to the watermark image (PNG recommended)

    Media Orientation: Watermarks are applied consistently regardless of image/video orientation.

    accounts[].id

    string

    Target account ID

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit for immediate publish)

    Step 2: Schedule or Publish a Post with a Watermark

    Parameters

    Best Practices

    Key Notes & Limitations

    Related Topics

    Media Options
    Media Handling
    Publishing Methods
    Flexible Scheduling Instant publish, scheduled posts, or auto-optimized time slots.

    LinkedIn

    3,000

    Supports formatting like bold, italic

    Instagram

    2,200

    For feed post captions

    Google Business

    1,500

    For business updates

    Pinterest

    500

    For pin descriptions

    Telegram

    4,096

    Per message

    Mastodon

    500+

    Varies by server (usually 500 minimum)

    Threads

    500

    Maximum length

    Bluesky

    300

    Maximum length

    accounts[].scheduled_at

    ISO 8601 timestamp (for scheduling)

    Include Clear CTAs Encourage engagement with direct calls-to-action.
  • A/B Test Variations Schedule multiple text variants to measure which resonates best.

  • Network

    Character Limit

    Notes

    Facebook

    10,000

    Full text supported with formatting

    Twitter/X

    280

    networks.{provider}.type

    Must be set to "status"

    networks.{provider}.text

    Your post copy string

    accounts[].id

    Target social account ID

    Key Features

    Platform Support & Limitations

    Request Structure

    Required Parameters

    Best Practices

    Related Topics

    Publishing Methods
    Media Handling
    Content Types

    25,000 for premium accounts

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "video",
                "text": "Watermark posts",
                "media": [
                  {
                    "id": "67da8532075cdb33821384c4",
                    "name": "Follow your dreams.mp4",
                    "path": "https://cdn.example.com/videos/67da8532075cdb33821384c4.mp4",
                    "type": "video"
                  }
                ],
                "details": {
                  "type": "reel"
                }
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-08-02T10:16:00+02:00",
                "watermark": {
                  "id": "680fa7bebd7195d33da6630d",
                  "name": "Brand Logo",
                  "opacity": 80,
                  "size": 6,
                  "position": "bottom_right",
                  "default": true,
                  "image": "https://cdn.example.com/watermarks/logo.png"
                }
              }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Exciting news! We're launching our new product line next week. #NewLaunch #ProductAnnouncement"
              },
              "twitter": {
                "type": "status",
                "text": "Big announcement coming next week! Our new product line is almost here 🚀 #NewLaunch #ProductAnnouncement"
              },
              "linkedin": {
                "type": "status", 
                "text": "We're thrilled to announce our new product line launching next week. Stay tuned for more details! #NewLaunch #ProductAnnouncement"
              }
            },
            "accounts": [
              {
                "id": "account_id_for_facebook",
                "scheduled_at": "2025-05-20T14:30:00Z" // Optional, depending on publishing method
              },
              {
                "id": "account_id_for_twitter",
                "scheduled_at": "2025-05-20T15:00:00Z" // Optional, depending on publishing method
              },
              {
                "id": "account_id_for_linkedin",
                "scheduled_at": "2025-05-20T16:00:00Z" // Optional, depending on publishing method
              }
            ]
          }
        ]
      }
    }
    Headers:
    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve posts with optional filters and pagination.

    Parameter
    Type
    Required
    Description

    state

    string

    No

    Filter by a single post state (see State Values below)

    state[]

    State Values

    Value

    Description

    all

    All posts regardless of state

    scheduled

    All scheduled posts

    scheduled_approved

    Scheduled posts that have been approved

    Type Values

    Value

    Description

    status

    Text-only posts

    link

    Posts with links

    photo

    Photo posts

    • Photo posts scheduled next month containing “launch” GET /posts?state=scheduled&postType=photo&from=2025-06-01&to=2025-06-30&query=launch

    • All failed posts across accounts GET /posts?state=failed&account_ids[]=63c675b54e299e9cf2b667ea&account_ids[]=64d786c54e299e9cf2b667fb

    • Drafts by a workspace member GET /posts?state=draft&member_id=5b1ec026db27977424e8599e

    • Accounts API - List social media accounts

    • Media API - Upload and manage media for posts

    • Create Posts - Post creation endpoints

    Requirements

    GET /api/v1/posts

    Endpoint

    List Posts

    Query Parameters

    Filtering Examples

    Related Resources

    Headers:
    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    1. Submit Request to /posts/schedule or /posts/schedule/publish

    2. Receive { "job_id": "…" }

    3. Poll /job_status/{job_id} until status: "completed"

    4. Handle results or errors

    All create requests share this shape:

    • bulk: batch container

    • state: how to handle content (see Publishing Methods)

    • posts: array of post definitions

    • networks: per-network content config

    • accounts: target profiles with scheduling overrides

    Endpoint

    Purpose

    Result

    /api/v1/posts/schedule

    Schedule posts for future publication including drafts

    Scheduled post or draft

    /api/v1/posts/schedule/publish

    Publish content immediately

    The state parameter determines how your content will be handled:

    State

    Description

    Additional Parameters

    scheduled

    Schedule for specific date/time

    scheduled_at (ISO timestamp)

    draft, draft_private, draft_public

    Save as draft

    The type parameter specifies the content format:

    Type

    Description

    Required Properties

    status

    Text-only post

    text

    photo

    Image post

    Supported platforms and their keys under networks: facebook, instagram, twitter, linkedin, pinterest, youtube, tiktok, google, wordpress_basic (self-hosted wordpress), wordpress_oauth (hosted on wordpress), telegram, mastodon, threads, bluesky.

    Poll your job with:

    Response:

    To customize content for specific platforms:

    Media files must be pre-uploaded and referenced by ID, see Media Handling:

    This overview covers the essential concepts for creating posts with the Publer API. For detailed information about specific features, refer to:

    • Publishing Methods: Complete documentation of all publishing options

    • Content Types: Detailed guide to content formats and requirements

    • Media Handling: Information about uploading and managing media

    • : Platform-specific capabilities and limitations

    Requirements

    Submit Request  →  Receive Job ID  →  Poll Job Status  →  Processing Complete
    {
      "bulk": {
        "state": "[publishing_method]",
        "posts": [
          {
            "networks": {
              "[network_provider]": {
                "type": "[content_type]",
                "text": "Post content",
                // other network-specific fields
              }
            },
            "accounts": [
              { 
                "id": "ACCOUNT_ID"
                // Additional parameters based on publishing method
                }
            ],
            // optional: recycling, recurring, labels, etc.
          }
        ]
      }
    }
    GET /api/v1/job_status/{job_id}
    {
      "status": "working|completed|failed",
      "payload": { /* results or errors */ }
    }
    {
    "networks": {
      "facebook": {
        "type": "status",
        "text": "Facebook simple status update"
      },
      "twitter": {
        "type": "status", 
        "text": "Twitter/X specific content with #hashtags"
      },
      "linkedin": {
        "type": "status",
        "text": "Longer, more professional content for LinkedIn audience"
      }
    },
    "accounts": [
      {
        "id": "66db83154e299efa19a2d8eb",
        "scheduled_at": "2025-05-15T14:30:00Z"
      },
      {
        "id": "66e973ac4e299e531f5dc034",
        "scheduled_at": "2025-05-15T15:00:00Z"
      },
      {
        "id": "66e973ac4e299e531f4hc034",
        "scheduled_at": "2025-05-15T15:00:00Z"
      }
    ]
    }
    "media": [
      {
        "id": "66fba4234e299e531f5dc100",
        "type": "image",
        "alt_text": "Optional accessibility description"
      }
    ]

    Core Concepts

    Asynchronous Workflow

    Common Request Structure

    Endpoints

    Publishing Methods

    Content Types

    Network Providers

    Job Status

    Common Patterns

    Network-Specific Content

    Media References

    Next Steps

    Ideas are created using the same bulk scheduling endpoint, but with an Idea state and no social accounts.
    Header
    Required
    Value

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Publer-Workspace-Id

    Yes

    Workspace ID

    • bulk.state must be draft_public or draft_private

    • Use networks.default

    • Ideas support two input modes:

      1. Rich content mode (recommended): type = "article" with title, content blocks, and optional media

      2. Simple content types: you can also submit status, photo,

    • At least one of title, content, or media must be present (for type: "article")

    When using type: "article", content must be an array of blocks:

    • id: randomly generated string

    • type: one of the supported block types

    • data: object depending on block type

    You can also create an Idea using other content types (for example status, photo, video, link). Publer will convert the payload into the Idea content format automatically (including tags).

    You can attach media to an Idea using networks.default.media.

    Notes

    • media is an array.

    • Multiple attachments are supported for photos only.

    • Supported media types include photo and video (see network/provider specifics).

    To attach media, first fetch/upload media using the Media or Media Handling, then reference the returned media objects in your payload.

    Field
    Type
    Required
    Description

    bulk.state

    string

    Yes

    draft_public or draft_private

    bulk.posts

    Field
    Type
    Required
    Description

    posts[].networks

    object

    Yes

    Must contain default

    posts[].networks.default.type

    For Ideas (draft_public, draft_private):

    • Use default as the network key.

    • You can send either:

      • Rich content: type: "article" with title, content, and optional media, or

      • Simple types (e.g., status, photo, video, link) which are auto-converted into the Idea content format.

    • Save ideas early to avoid losing inspiration.

    • Use draft_public for collaboration and feedback.

    • Use draft_private for personal planning.

    • Content Types

    • Media Handling

    • Publishing Methods

    • Media

    What are Ideas?

    Idea States

    Endpoint

    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "draft_public",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "article",
                "content": [
                  {
                    "id": "YbGFey6MEB",
                    "type": "header",
                    "data": {
                      "text": "Header",
                      "level": 2
                    }
                  },
                  {
                    "id": "zqVkpTFkho",
                    "type": "list",
                    "data": {
                      "style": "ordered",
                      "items": [
                        "list 1",
                        "list 2"
                      ]
                    }
                  },
                  {
                    "id": "QuAHevc2WU",
                    "type": "paragraph",
                    "data": {
                      "text": "<b>bold</b>"
                    }
                  },
                  {
                    "id": "dV4AN6yEA8",
                    "type": "paragraph",
                    "data": {
                      "text": "<i>italic</i>"
                    }
                  },
                  {
                    "id": "tlk38yADuj",
                    "type": "paragraph",
                    "data": {
                      "text": "<a href=\"https://publer.com\" target=\"_blank\">publer.com</a>" // link
                    }
                  },
                  {
                    "id": "hmy78yADuj",
                    "type": "paragraph",
                    "data": {
                      "text": "This is a simple paragraph"
                    }
                  }
                ],
                "title": "Title of the idea",
                "media": [
                  {
                    "id": "69415914c507c632c080d1e4",
                    "name": "",
                    "caption": "photo.by.unsplach:\n\nhttps://unsplash.com/photos/a-decorated-christmas-tree-with-merry-christmas-sign-92PZ2FVPhDE",
                    "favorite": null,
                    "path": "https://cdn.publer.com/uploads/photos/69415914c507c632c080d1e4.jpg",
                    "type": "photo",
                    "created_at": "2025-12-16T14:05:24.095+01:00",
                    "labels": [],
                    "in_library": true,
                    "width": 2000.0,
                    "height": 3000.0,
                    "size": 1384790.0,
                    "source": "unsplash",
                    "folder_id": null,
                    "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_69415914c507c632c080d1e4.jpg"
                  }
                ]
              }
            }
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "draft_public",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "status",
                "text": "A public idea"
              }
            }
          }
        ]
      }
    }

    Request Headers

    Rules / Requirements

    Rich content mode: Content blocks format

    Example: Create an Idea (Public) — Rich Content (article)

    Example: Create an Idea from a Simple Type (Auto-converted)

    Media Attachments (Ideas)

    Parameters

    Bulk

    Post Object (Idea)

    Network Configuration

    Best Practices

    Related Topics

    Yes

    Your workspace identifier

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    Include a recurring object under each post:

    • state: must be "recurring" for recurring posts

    Parameter
    Type
    Description
    Example

    start_date

    string

    ISO 8601 timestamp for the first occurrence

    end_date

    Every other Tuesday and Thursday:

    To create a recurring post, specify the recurrence parameters inside the recurring object:

    • start_date: The date and time for the first occurrence.

    • end_date: The last date and time for recurring posts to be generated.

    • repeat: The repeat interval unit: "daily", "weekly", "monthly" or "yearly".

    • repeat_rate: Frequency of the interval. For example, 1 with "weekly" means every week, 2 means every other week, etc.

    • days_of_week: Which days of the week to post on (e.g., [1, 3] for Tuesday and Thursday).

    Platform

    Recurring Support

    Notes

    Facebook

    Full support

    No special requirements

    Instagram

    Full support

    • Regular reminders (e.g., weekly tips).

    • Monthly newsletters or reports.

    • Annual event notifications (e.g., holidays).

    • Routine promotions or offers.

    • Evergreen Content: Use for timeless messages that benefit from repetition.

    • Stop Conditions: Always set end_date to avoid indefinite runs.

    • Combine Actions: Add follow-up comments or auto-deletion for full lifecycle management.

    • Audience Consideration: Avoid fatigue by spacing posts appropriately.

    • Recurring Posts: Fixed dates/times on a repeating schedule.

    • Recycling Posts: Fills open slots based on your posting calendar.

    • Recycling Posts

    • Scheduled Publishing

    • Auto-Scheduling

    POST /api/v1/posts/schedule

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Endpoint

    Request Headers

    Publer-Workspace-Id

    {
      "bulk": {
        "state": "recurring",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "status",
                "text": "Weekly reminder: Check our latest updates every Monday!"
              }
            },
            "accounts": [
              { "id": "ACCOUNT_ID" }
            ],
            "recurring": {
              "start_date": "2025-06-05T13:29+02:00",
              "end_date": "2025-07-21T13:29+02:00",
              "repeat": "weekly",
              "days_of_week": [
                1,
                4,
                6
              ],
              "repeat_rate": 1
            }
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "recurring",
        "posts": [{
          "networks": {
            "facebook": {
              "type": "status",
              "text": "Weekly reminder: Check our latest updates every Monday!"
            }
          },
          "accounts": [{
            "id": "66f509f7db2797026a37ba76"
          }],
          "recurring": {   
            "start_date": "2025-06-05T13:29+02:00",
              "end_date": "2025-07-21T13:29+02:00",
              "repeat": "weekly",
              "days_of_week": [
                1
              ],
              "repeat_rate": 1
          }
        }]
      }
    }
    {
      "bulk": {
        "state": "recurring",
        "posts": [{
          "networks": {
            "facebook": {
              "type": "status",
              "text": "Biweekly product update: See what's improved!"
            }
          },
          "accounts": [{
            "id": "66f509f7db2797026a37ba76"
          }],
          "recurring": {
            
            "start_date": "2025-06-05T13:29+02:00",
            "end_date": "2025-07-21T13:29+02:00",
            "repeat": "weekly",
            "days_of_week": [
              1,
              3,
            ],
            "repeat_rate": 1
          }
        }]
      }
    }

    Request Body

    Key Fields

    Recurring Parameters

    Examples

    Weekly Recurring Post

    Biweekly Recurring with Limit

    How It Works

    Platform Support

    Use Cases

    Best Practices

    Recurring vs. Recycling

    Related Topics

  • Rich Metadata Attach titles, captions, and custom thumbnail selections.

  • Advanced Scheduling Schedule per time zone or publish immediately; poll job status for completion.

  • Network
    Video Types
    Duration
    Size Limit
    Aspect Ratio
    Additional Features

    Facebook

    Standard, Reels, Story

    Standard: up to 5 h Reels: 3–90 s Stories: ≤60 s

    < 2 GB

    Schedule a video post using the unified scheduling endpoint:

    Field
    Description

    bulk.state

    Must be "scheduled".

    networks.{provider}.type

    Set to "video".

    networks.{provider}.media

    Array of video metadata objects.

    * Optional if you publish immediately via /posts/schedule/publish.

    1. Upload Video Use the Media Handling endpoint to upload your video.

    2. Receive Media ID Note the returned id for referencing in your post payload.

    3. Configure Thumbnails Upload or select thumbnail images and include their IDs/URLs.

    4. Compose & Schedule Build your post object, set state and scheduled_at, then send to /posts/schedule.

    5. Monitor Job Poll /api/v1/job_status/{job_id} until status is completed.

    • Select Engaging Thumbnails Choose a frame or custom image that drives clicks.

    • Provide Clear Titles & Descriptions Improve accessibility and SEO with detailed metadata.

    • Validate Platform Requirements Confirm aspect ratio, encoding, and file format (MP4/H.264 recommended).

    • Media Handling

    • Content Types

    • Publishing Methods

    Overview

    Key Capabilities

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "video",
                "media": [
                  {
                    "id": "67da8532075cdb33821384c4",
                    "thumbnails": [
                      {
                        "id": "67da852b075cdb33821384ba",
                        "small": "https://.../thumb_67da852b075cdb33821384ba.jpg",
                        "real":  "https://.../67da852b075cdb33821384ba.jpg"
                      },
                      ......
                      {
                        "id": "67da852c075cdb33821384bb",
                        "small": "https://.../thumb_67da852c075cdb33821384bb.jpg",
                        "real":  "https://.../67da852c075cdb33821384bb.jpg"
                      }
                    ],
                    "title": "My Video Title",
                    "default_thumbnail": 1
                  }
                ],
                "text": "Optional description or caption"
              }
            },
            "accounts": [
              {
                "id": "YOUR_ACCOUNT_ID",
                "scheduled_at": "2025-05-24T23:07:00+02:00"
              }
            ]
          }
        ]
      }
    }

    Platform Support & Specifications

    Request Structure

    Required Parameters

    Workflow for Creating Video Posts

    Best Practices

    Related Topics

  • Scheduling: Publish immediately or at a specified time

  • Network
    Question Field
    Options
    Duration
    Editable
    Notes

    Twitter/X

    In text

    2–4, ≤25 chars

    Up to 7 days

    Tip: When sending a multi-network poll, adhere to Twitter’s 25-character option limit and common duration (e.g., 1, 3, 7 days).

    Use the unified scheduling endpoint:

    Field
    Type
    Description

    networks.{provider}.type

    string

    Must be "poll".

    networks.{provider}.text

    string

    Caption or question (Twitter/Mastodon).

    • Options live in options array; question must be in text.

    • 2–4 options, ≤25 characters each.

    • Cannot edit after publishing.

    • Uses separate question and text.

    • Options ≤30 characters.

    • Up to 14-day duration.

    • Question goes in text.

    • Options ≤50 characters.

    • Poll can be edited after posting.

    • Keep questions clear and concise.

    • Use unique, contrasting options.

    • Align durations with campaign timelines.

    • Text Posts

    • Platform-Specific Formats

    • Publishing Methods

    Key Features

    POST /api/v1/posts/schedule
    Content-Type: application/json
    Authorization: Bearer YOUR_API_KEY
    
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "twitter": {
              "type": "poll",
              "text": "What’s your favorite season?",
              "options": ["Spring", "Summer", "Autumn", "Winter"],
              "duration": 7
            },
            "linkedin": {
              "type": "poll",
              "question": "What’s your favorite season?",
              "text": "Vote now!",
              "options": ["Spring", "Summer", "Autumn", "Winter"],
              "duration": 7
            },
            "mastodon": {
              "type": "poll",
              "text": "What’s your favorite season?",
              "options": ["Spring", "Summer", "Autumn", "Winter"],
              "duration": 7
            }
          },
          "accounts": [
            { "id": "TW_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" },
            { "id": "LI_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" },
            { "id": "MA_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" }
          ]
        }]
      }
    }

    Supported Platforms & Limits

    Request Structure

    Parameters

    Platform-Specific Notes

    Twitter/X

    LinkedIn

    Mastodon

    Best Practices

    Related Topics

    Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve comprehensive analytics for posts within a workspace or a specific social account. Supports competitor analysis, text search, labels, post types, date ranges, member filtering, and multiple sort options.

    • When :account_id is a specific social account ID, results are limited to that account.

    • When :account_id is omitted, results include all accessible accounts.

    • Enable competitor mode with competitors=true and optionally narrow to a single competitor via competitor_id , see how to fetch competitor ids.

    Parameter
    Type
    Required
    Description

    account_id

    string

    No

    Social account ID to scope results. When used with competitors: true, it will filter all competitor posts related to this account.

    Parameter
    Type
    Required
    Description

    competitors

    string

    No

    For competitor insights. true or false (default false).

    competitor_id

    • Data sources: Metrics come from the official social network APIs. Insights auto‑sync periodically; you can manually sync in the UI for fresher data.

    • Post vs aggregate reach: Post Insights show reach per post. Charts/overview may show total reach across all posts for a time window, so numbers won’t necessarily sum 1:1.

    • Engagement formula: Typically the sum of likes/reactions + comments + shares + saves + post clicks (platform‑dependent).

      • Engagement Rate (%) ≈ engagement / reach * 100

      • Click‑Through Rate (%) ≈ link_clicks / reach * 100

      • Reach Rate (%) ≈ reach / followers * 100 (where available)

    • Platform differences: Not all metrics are available for all networks or account types (e.g., LinkedIn Profiles vs Pages).

    • Pagination: Use page (0‑based). Each page returns 10 posts. Response includes total to compute more pages.

    • Competitors: Requires competitors=true. Use competitor_id to focus on a single competitor’s posts; otherwise data may include multiple competitors (if enabled).

    • Charts — Discover chart IDs and fetch chart data

    • Hashtag Analysis — Track hashtag performance

    • Best Times — Suggested posting time slots

    • — Member (team) analytics

    Requirements

    GET /api/v1/analytics/:account_id/post_insights

    Endpoint

    Get Post Insights

    Description

    URL Parameter

    Query Parameters

    Notes

    Related Resources

    networks.linkedin.type

    string

    Must be "photo"

    networks.linkedin.text

    string

    Post caption (optional)

    networks.linkedin.media[]

    array

    Up to 100 items; each with "id" from Media Upload

    networks.linkedin.details.type

    string

    Must be "document" to enable PDF carousel

    networks.linkedin.title

    string

    Document title (required)

    accounts[].id

    string

    LinkedIn profile or page account ID

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit to publish immediately)

    Feature
    Details

    Max Items

    100 photos/pages

    Supported Formats

    JPEG, PNG, PDF, DOCX, PPTX

    Media Mix

    No GIFs or videos—photos/documents only

    1. Upload Media Use the Media Upload API to upload images or documents and collect their IDs.

    2. Compose Post

      • Set type: "photo", add media IDs.

      • Under details, set "type": "document".

      • Provide a title.

    3. Schedule or Publish

      • Add scheduled_at under accounts to schedule.

      • Omit scheduled_at to publish immediately.

    • Use high-resolution images or properly formatted documents for clarity.

    • Craft a concise title that accurately represents the carousel content.

    • Organize slides in logical order to guide viewers.

    • Platform-Specific Formats

    • Publishing Methods

    • Content Types

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "linkedin": {
                "type": "photo",
                "text": "Description",
                "media": [
                  {
                    "id": "680fa5cc48487c4ccbf8c146",
                    "name": "",
                    "caption": "Photo by KaLisa Veer on Unsplash:\n\nhttps://unsplash.com/photos/the-chrysler-building-is-framed-by-other-buildings-sdU2K71G8TI",
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/680fa5cc48487c4ccbf8c146.jpg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_680fa5cc48487c4ccbf8c146.jpg"
                  },
                  {
                    "id": "66f54e664e299e991eaafaeb",
                    "name": "pexels-christian-heitz-285904-842711.jpg",
                    "caption": null,
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66f54e664e299e991eaafaeb.jpg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66f54e664e299e991eaafaeb.jpg"
                  },
                  {
                    "id": "66f122324e299eb6bcc9af55",
                    "name": "",
                    "caption": "Photo by David Villasana on Unsplash:\n\nhttps://unsplash.com/photos/a-black-car-parked-in-front-of-a-white-building-Pf9KhOIylaM",
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66f122324e299eb6bcc9af55.jpg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66f122324e299eb6bcc9af55.jpg"
                  },
                  {
                    "id": "66df7c954e299e47dae172ac",
                    "name": "Cabin life",
                    "caption": "Photo by Karsten Winegeart on Unsplash:\n\nhttps://unsplash.com/photos/a-house-sitting-on-top-of-a-lush-green-hillside-xUyOWyCjJ_I",
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66df7c954e299e47dae172ac.jpg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66df7c954e299e47dae172ac.jpg"
                  },
                  {
                    "id": "66df7c8d4e299e47dae172ab",
                    "name": "",
                    "caption": "Photo by Edgar.infocus on Unsplash:\n\nhttps://unsplash.com/photos/a-car-driving-on-a-foggy-road-AwRcfU8T4dg",
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66df7c8d4e299e47dae172ab.jpg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66df7c8d4e299e47dae172ab.jpg"
                  },
                  {
                    "id": "66d04c6d4e299e51d9e1f747",
                    "name": "5574042b224543ecaf6989f6725dd555.jpeg",
                    "caption": null,
                    "path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66d04c6d4e299e51d9e1f747.jpeg",
                    "type": "photo",
                    "thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66d04c6d4e299e51d9e1f747.jpeg"
                  }
                ],
                "details": {
                  "type": "document"
                },
                "title": "Title of the document"
              }
            },
            "accounts": [
              {
                "id": "64c90c0d4e299e38dc86a284",
                "scheduled_at": "2025-06-21T14:16+02:00"
              }
            ]
          }
        ]
      }
    }

    Overview

    Request Structure

    Parameters

    Supported Features & Limitations

    Workflow

    Best Practices

    Related Topics

    Supports up to 5 photos or 1 video per Pin
  • Clickable external URL

  • Specify the target board with album_id

  • Optional alt text for accessibility

  • Feature
    Details

    Max Media

    1 video or up to 5 photos

    Supported Formats

    JPEG, PNG, GIF, MP4

    Link URL

    External links only (use url field)

    Field
    Type
    Description

    networks.pinterest.type

    string

    Must be "photo".

    networks.pinterest.text

    string

    Caption or description for the Pin.

    1. Select Account & Board Add your Pinterest account.id and target album_id.

    2. Upload/Reference Media Upload up to 5 photos or 1 video to Publer, then reference each with its id.

    3. Compose Pin

      • Set type: "photo".

      • Provide text, title, and url.

    4. Schedule or Publish

      • To schedule, include scheduled_at.

      • To publish now, call /posts/schedule/publish or omit scheduled_at.

    • Use high-resolution images or video for best display.

    • Keep the title and text concise to encourage clicks.

    • Ensure the URL is valid and leads to valuable content.

    • Organize Pins into relevant Boards for better discoverability.

    • Add alt text for accessibility and SEO benefits.

    • Platform-Specific Formats

    • Publishing Methods

    • Content Types

    Overview

    Key Features

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "pinterest": {
                "type": "photo",
                "text": "Check out our new blog post!",
                "media": [
                  {
                    "id": "external-0",
                    "type": "photo",
                    "path": "https://cdn.example.com/images/post1.jpg",
                    "thumbnail": "https://cdn.example.com/images/post1-thumb.jpg",
                    "caption": "Screenshot of our blog homepage"
                  }
                ],
                "title": "Our Latest Blog Article",
                "url": "https://publer.com/blog"
              }
            },
            "accounts": [
              {
                "id": "YOUR_PINTEREST_ACCOUNT_ID",
                "scheduled_at": "2025-07-05T14:16:00+02:00",
                "album_id": "934145216398624390"
              }
            ]
          }
        ]
      }
    }

    Supported Features & Limits

    Request Structure

    Parameters

    Workflow

    Best Practices

    Related Topics

    accounts[].location

    object

    Location object to tag (see below)

    location.id

    string

    Unique identifier of the location (from search results)

    location.name

    string

    Name of the location

    location.info

    string

    Additional info about the location (optional)

    location.verified

    boolean

    Whether the location is verified (optional)

    location.address

    string

    Physical address (optional)

    location.checkins

    integer

    Number of check-ins (optional)

    albums[].id

    string

    Album or board ID

    albums[].name

    string

    Album or board name

    albums[].type

    string

    "facebook" or "pinterest"

    watermarks

    array

    List of watermark objects

    watermarks[].id

    string

    Watermark ID

    watermarks[].name

    string

    Watermark name

    watermarks[].opacity

    number

    Opacity percentage (0–100)

    watermarks[].size

    number

    Relative size percentage (e.g., 15 = 15%)

    watermarks[].position

    string

    Position on media (e.g., bottom_right)

    watermarks[].default

    boolean

    Whether this is the default watermark

    watermarks[].image

    string

    URL to the watermark image

    string

    No

    Analyze a specific competitor (requires competitors=true).

    from

    date (YYYY-MM-DD)

    Yes

    Start date (inclusive).

    to

    date (YYYY-MM-DD)

    Yes

    End date (inclusive).

    Members

    accounts[].signature

    string

    Signature ID to append (from the fetched signatures for this account)

    networks.{provider}.type

    string

    Post type (e.g., "status", "photo", etc.)

    networks.{provider}.text

    string

    Main post text (the signature is appended to this on publish)

    Link Posts

    Share URLs with rich previews (title, description, image, and call-to-action) across your social networks via the Publer API.

    Overview

    Link posts display a URL preview alongside optional caption text. You control metadata (title, description, images, CTA) to enhance engagement.

    Key Features

    • Rich previews with title, description, and image

    • Custom call-to-action buttons (e.g., LEARN_MORE, SIGN_UP)

    • Platform-specific metadata overrides

    • Schedule or publish immediately

    Network
    Preview Elements
    Notes

    Before scheduling a link post, you can extract rich metadata from any URL using the /posts/links endpoint. This step is optional but highly recommended for accurate previews.

    Use this extracted metadata to build your link post payload.

    Use the unified scheduling endpoint (/posts/schedule) or the immediate-publish endpoint (/posts/schedule/publish):

    Field
    Type
    Description

    Note: You can also include original_title, original_description, and original_images if you pre‐fetch metadata yourself, but only the link.* fields above are required.

    1. Extract Metadata Use /posts/links to fetch title, description, and images from your target URL.

    2. Compose Metadata Define url, title, description, and images in the link object.

    • Provide Complete Metadata: Supply title, description, and images for compelling previews.

    • Optimize Image Dimensions: Match each network’s recommended preview size for best display.

    • Use Clear CTAs: Select a relevant call_to_action to guide user action.

    Recycling Posts

    Automatically re-share a post on a regular cadence. Recycling is ideal for evergreen content, reminders, and promotional campaigns.

    Endpoint

    POST /api/v1/posts/schedule

    Request Headers

    Header
    Required
    Description

    Authorization

    Yes

    Bearer-API YOUR_API_KEY

    Include a recycling object in your payload:

    Field
    Type
    Description

    Recycle every 2 weeks, up to 3 times:

    Recycle monthly until end of year:

    1. Create a post with recycling settings.

    2. Publer queues the post for reuse.

    3. After each gap interval, the post is republished.

    Due to API limitations and anti-spam policies, recycling has some platform-specific constraints:

    • Promote evergreen blog posts or resources.

    • Remind followers of ongoing events or offers.

    • Keep your feed active with minimal manual effort.

    • Vary content slightly using Spintax to avoid spam filters.

    • Choose sensible intervals—don’t recycle too frequently.

    • Always set an expiration (expire_count or expire_date).

    • Recycling fills open slots based on gap and gap_freq—ideal for evergreen content.

    • Recurring publishes at exact times on a fixed repeat schedule (e.g., every Monday at 9 AM).

    Hashtag Analysis

    The Hashtag Analysis endpoints help you understand how hashtags perform across your workspace or a specific account. Use them to rank, filter, and retrieve top posts for any hashtag.

    Requirements

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve aggregated analytics for hashtags used in published posts. Supports filtering by date range, account, member, and search, plus sorting and pagination.

    Returns a paginated list of hashtags with totals for posts, reach, engagement, and related metrics, plus up to 3 recent posts per hashtag and a hashtag performance score.

    Parameter
    Type
    Required
    Description
    Param
    Type
    Required
    Description

    Fields:

    • records[]: One row per hashtag.

      • hashtag: Text without #.

      • posts

    Retrieve up to 6 top posts that used a specific hashtag, with full per‑post analytics.

    Parameter
    Type
    Required
    Description
    Param
    Type
    Required
    Description
    • Time range: Defaults to the workspace’s default range when not provided. “Last X Days” excludes partial data for the current day.

    • Sorting & ranking: Use sort_by and sort_type to rank by Posts, Reach, Reactions (likes), Comments, Shares, or Video Views. UI columns can be reordered client‑side.

    • Data freshness: Insights auto‑refresh every ~24h; you can manually sync in the UI for real‑time updates.

    • — Per‑post performance analytics

    • — Discover chart IDs and fetch chart data

    • — Suggested posting time slots

    Charts

    The Analytics section provide access to social media analytics data for connected accounts in your workspace. These endpoints allow you to retrieve available charts and their corresponding data for various social media platforms.

    The Charts endpoints let you:

    • Discover which analytics charts are available (and their IDs).

    • Fetch time‑series and comparative data for selected charts.

    Use the returned id values from “List Charts” with “Get Chart Data” to build dashboards and reports.

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve chart definitions.

    Returns a list of charts grouped by category (growth, insights, demographics). Different platforms expose different charts.

    Parameter
    Type
    Required
    Description

    Account type values: ig_business, fb_page, twitter, linkedin, youtube, tiktok, google, pin_business, pin_personal, threads, wordpress_oauth, in_profile

    Field
    Description

    Fetch data for one or more charts by ID. Returns current and previous period blocks for comparison.

    Supports growth metrics, post insights, and demographics. Chart IDs must come from the “List Charts” endpoint.

    For better performance and lower latency, request chart data in small logical batches of related chart_ids (e.g., growth first, then insights, then demographics) instead of sending every available chart ID in one call.

    Parameter
    Type
    Required
    Description
    Parameter
    Type
    Required
    Description
    Key
    Description
    • Always fetch chart IDs from /api/v1/analytics/charts; charts can change over time.

    • If account_id is omitted, results are aggregated across accessible accounts (where the metric supports aggregation).

    • The comparison (previous) window automatically matches the current window length.

    • - Manage social media accounts

    • — Track hashtag performance

    • — Suggested posting time slots

    Competitor Analysis

    Use the Competitor Analysis endpoints to list competitor accounts and fetch their high‑level analytics (followers, growth, engagement, reach, and posting mix). Combine with Post Insights and Best Times to build a full competitive benchmarking view.

    Requirements

    Authentication: Bearer API token Scope: analytics Headers:

    • Authorization: Bearer-API YOUR_API_KEY

    • Publer-Workspace-Id: YOUR_WORKSPACE_ID

    Retrieve competitor accounts for the workspace or scoped to a specific social account.

    • Omit :account_id to list all competitors across the workspace.

    • Provide :account_id to list competitors tied to a single social account.

    Parameter
    Type
    Required
    Description

    Fields:

    • provider: Social network (e.g., instagram, facebook, twitter).

    • name: Display name of the competitor account.

    • social_id: Network-unique ID.

    Fetch paginated analytics for competitor accounts with filtering, sorting, and date range selection.

    • Use account_id to focus on competitors relevant to a specific social account.

    • Filter by competitor_id or search by name with query.

    • Sort by followers, reach, engagement, and post mix counts.

    Parameter
    Type
    Required
    Description
    Parameter
    Type
    Required
    Description

    Fields:

    • insights[]: One item per competitor.

      • account: Basic account info and sync status; my_account indicates if it’s your own account.

      • followers

    • Reach availability: reach is not returned for Instagram/Facebook competitor analytics.

    • Best times for competitors: Use endpoint with competitor mode to view competitors’ optimal posting hours:

      • GET /api/v1/analytics/:account_id/best_times?competitors=true&competitor_id=...

    • — Per‑post performance analytics (supports competitor mode)

    • — Suggested posting times (supports competitor mode)

    • — Hashtag performance

    Media Handling

    Manage your media assets before attaching them to posts. Publer’s API supports direct uploads and URL imports, returning media IDs you can reference when creating or updating posts.

    Before including media in your social media posts, you must first upload those files to Publer's servers. The API provides two methods for uploading media:

    1. Direct file upload

    2. Upload from URL

    Once uploaded, you'll receive a media ID that can be referenced in your post requests.

    video
    , or
    link
    payloads; Publer will
    convert them automatically
    into the Idea content format (with tags) behind the scenes

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    array

    Yes

    List of ideas to create

    string

    Yes

    article (rich content) or a simple type like status, photo, video, link (auto-converted)

    posts[].networks.default.title

    string

    Conditional

    Used with type: "article"

    posts[].networks.default.content

    array

    Conditional

    Used with type: "article"

    posts[].networks.default.text

    string

    Conditional

    Used with type: "status" (and other simple types as applicable)

    posts[].networks.default.media

    array

    No

    Media attachments

    Flexible

    Auto-captions, premiere scheduling

    Instagram

    Feed, Reels, Story

    Feed: any Reels: 3 s–15 min Stories: ≤60 s

    < 1 GB

    1.91:1–4:5 (feed) 9:16 (Reels/Stories)

    Location tagging, first comment

    YouTube

    Standard, Shorts

    Standard: up to 12 h Shorts: up to 3 min

    < 2 GB

    16:9 (standard) 9:16 (Shorts)

    Custom thumbnails, tags, categories

    TikTok

    Standard

    3 s–10 min

    < 2 GB

    9:16 (recommended)

    Sound attribution

    LinkedIn

    Standard

    3 s–15 min

    < 2 GB

    1:2.4–2.4:1

    Native profile/page posting

    Pinterest

    Standard

    4 s–15 min

    < 2 GB

    —

    —

    Twitter/X

    Standard

    Up to 10 min

    < 512 MB

    Flexible

    Alt text support

    Telegram

    Standard

    Unlimited

    < 50 MB

    Flexible

    —

    Mastodon

    Standard

    Unlimited

    < 40 MB

    Up to 1920×1200 px

    —

    Threads

    Standard

    Up to 5 min

    < 1 GB

    Flexible

    —

    Bluesky

    Standard

    Up to 3 min

    < 50 MB

    Flexible

    —

    networks.{provider}.media[].id

    ID returned by the Media Upload endpoint.

    networks.{provider}.media[].thumbnails

    Array of thumbnail objects with id, small, and real URLs. To add a custom thumbnail, append an object with small and real. Always fetch the full thumbnails array, either from Listing Media or from Media Upload, when uploading.

    networks.{provider}.media[].default_thumbnail

    0-based index to select default thumbnail.

    networks.{provider}.text

    Optional caption or description.

    accounts[].id

    Target social media account ID.

    accounts[].scheduled_at*

    ISO 8601 timestamp (omit for immediate publishing).

    No

    Options limit applies across all networks

    LinkedIn

    Separate question

    2–4, ≤30 chars

    Up to 14 days

    No

    Mastodon

    In text

    2–4, ≤50 chars

    Up to 7 days

    Yes

    networks.linkedin.question

    string

    Poll question (LinkedIn only).

    networks.{provider}.options

    string[]

    Array of 2–4 unique options.

    networks.{provider}.duration

    integer

    Poll duration in days (platform max limits apply).

    accounts[].id

    string

    Target social account ID.

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit to publish immediately).

    Title Requirement

    title field is mandatory

    File Size

    No explicit size limit for photos; follows Media API rules

    Editing

    Cannot change media type after scheduling

    Optionally add caption.

    Caption

    Optional (media[].caption)

    Board Selection

    Use accounts[].album_id to pick a Pinterest board

    networks.pinterest.media

    array

    List of media objects (1 video or up to 5 photos).

    networks.pinterest.media[].id

    string

    "external-X" or media ID from Publer.

    networks.pinterest.media[].path

    string

    URL to the full-size image or video.

    networks.pinterest.media[].thumbnail

    string

    URL to the thumbnail image.

    networks.pinterest.media[].type

    string

    Must be "photo" or "video".

    networks.pinterest.media[].caption

    string

    Accessible description of the image (optional).

    networks.pinterest.title

    string

    Pin title displayed on hover.

    networks.pinterest.url

    string

    Clickable external link URL.

    accounts[].id

    string

    Pinterest account identifier.

    accounts[].album_id

    string

    Board ID where the Pin will be posted.

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit to publish immediately).

    gap_freq

    string

    Unit of interval: Day, Week, or Month

    start_date

    string

    ISO date when recycling begins (e.g., YYYY-MM-DD)

    expire_count

    number

    Maximum number of reposts

    expire_date

    string

    ISO date to stop recycling (alternative to expire_count)

    Recycling stops when expire_count or expire_date is reached.

    LinkedIn

    Full support

    No special requirements

    Twitter

    Limited

    Requires 10+ variations using Spintax Generator

    Pinterest

    Limited

    Requires 10+ variations using Spintax Generator

    Google Business Profile

    Limited

    Requires 10+ variations using Spintax Generator

    YouTube

    Not supported

    API limitations

    TikTok

    Not supported

    API limitations

    WordPress

    Not supported

    API limitations

    Monitor engagement metrics to adjust recycling strategy.

    Publer-Workspace-Id

    Yes

    Your workspace identifier

    Content-Type

    Yes

    application/json

    Accept

    No

    application/json (default)

    solo

    boolean

    true to recycle this post individually (not grouped)

    gap

    number

    Interval between reposts (e.g., 2 for every 2 units)

    Platform

    Recycling Support

    Notes

    Facebook

    Full support

    No special requirements

    Instagram

    Full support

    Request Body

    Recycling Parameters

    Examples

    Basic Recycling

    Recycling with Expiration Date

    How It Works

    Platform Limitations

    Use Cases

    Best Practices

    Recycling vs. Recurring

    Related Topics

    Recurring Posts

    No special requirements

    string

    ISO 8601 timestamp to stop recurrence (optional)

    repeat

    string

    The interval unit for repetition. Supported values: "daily", "weekly", "monthly", yearly

    "weekly"

    repeat_rate

    integer

    How often to repeat in the chosen interval. For example, 6 with "weekly" means every 6 weeks.

    6

    days_of_week[]

    array

    For weekly repeats, which days to schedule on. Values: [0, 1, 2, 3, 4, 5, 6]

    [0,4]

    No special requirements

    LinkedIn

    Full support

    No special requirements

    Twitter

    Limited

    Requires 10+ variations using Spintax Generator

    Pinterest

    Limited

    Requires 10+ variations using Spintax Generator

    Google Business Profile

    Limited

    Requires 10+ variations using Spintax Generator

    YouTube

    Not supported

    API limitations

    TikTok

    Not supported

    API limitations

    WordPress

    Not supported

    API limitations

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "This content will be recycled multiple times."
              }
            },
            "accounts": [
              { "id": "66f509f7db2797026a37ba76" }
            ],
            "recycling": {
              "solo": true,
              "gap": 2,
              "gap_freq": "Week",
              "start_date": "2025-06-01",
              "expire_count": 3
            }
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "facebook": { "type": "status", "text": "Evergreen reminder!" }
          },
          "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
          "recycling": {
            "gap": 2,
            "gap_freq": "Week",
            "expire_count": 3
          }
        }]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "default": { "type": "status", "text": "Monthly promotion reminder!" }
          },
          "accounts": [{ "id": "66f509f7db2797026a37ba76" }],
          "recycling": {
            "gap": 1,
            "gap_freq": "Month",
            "start_date": "2025-06-01",
            "expire_date": "2025-12-31"
          }
        }]
      }
    }
    2025-07-21T13:29+02:00
    2025-06-05T13:29+02:00

    Twitter/X

    Automatic card preview

    Metadata driven by Twitter Card tags

    Pinterest

    Custom images

    Requires uploaded images in media

    Telegram

    Title, description

    Native link preview

    Mastodon

    Title, description

    Native link preview

    Threads

    Title, description

    Native link preview

    Bluesky

    Title, description

    Native link preview

    networks.{provider}.text

    string

    Caption or message to accompany the link (optional)

    networks.{provider}.link.url

    string

    The target URL

    networks.{provider}.link.title

    string

    Preview title (overrides fetched metadata)

    networks.{provider}.link.description

    string

    Preview description (overrides fetched metadata)

    networks.{provider}.link.images

    array

    Array of image URLs for the preview (overrides fetched metadata)

    networks.{provider}.link.default_image

    integer

    Index (0-based) of the default image in the images array

    networks.{provider}.link.call_to_action

    string

    CTA button type (e.g., LEARN_MORE, SIGN_UP)

    accounts[].id

    string

    Target account identifier

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit to publish immediately)

    Set Caption Add optional text to introduce or contextualize the link.

  • Choose Default Image Use default_image to highlight your preferred preview image.

  • Schedule or Publish

    • For future posts: include scheduled_at under accounts.

    • For immediate posting: call /posts/schedule/publish or omit scheduled_at.

  • Facebook

    Title, description, images, CTA

    Full link card support

    LinkedIn

    Title, description, images, CTA

    Full link card support

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "link",
                "text": "This is the link post type",
                "link": {
                  "url": "http://publer.com",
                  "provider_display": "publer.com",
                  "description": "Boost your social media strategy with Publer’s suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.",
                  "title": "Powerful Social Media Management & Scheduling Tools | Publer",
                  "images": [
                    "https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png",
                    "https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png",
                    "https://framerusercontent.com/images/ShxTAH03BsTSB29AeYZzpPZqi8.jpg",
                    "https://framerusercontent.com/images/iuLpS9a0syZanung3ZFGrbYXTKM.jpg",
                    "https://framerusercontent.com/images/d7Gg6Hvachd0DuRzXGKoB1szAl4.jpg"
                  ],
                  "default_image": 0,
                  "call_to_action": "LEARN_MORE",
                  "phone_number": ""
                }
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-05-24T23:18+02:00"
              }
            ]
          }
        ]
      }
    }

    bulk.state

    string

    scheduled, publish, or a draft state

    networks.{provider}.type

    string

    Must be "link"

    Platform Support

    Step 1: Extract Link Metadata

    Step 2: Create or Schedule a Link Post

    Parameters

    Workflow

    Best Practices

    Related Topics

    Media Handling
    Content Types
    Publishing Methods

    No

    End date (inclusive).

    sort_by

    string

    No

    One of: posts, reach, likes, comments, shares, video_views. Default posts.

    sort_type

    string

    No

    ASC or DESC. Default DESC.

    page

    integer

    No

    Page number (0‑based). Each page contains 10 hashtags. Default 0.

    query

    string

    No

    Case‑insensitive filter by hashtag text.

    member_id

    string

    No

    Filter hashtags by posts authored/managed by a .

    : Number of posts using it.
  • recent_posts[]: Up to 3 recent posts { id, text, scheduled_at }.

  • Totals: reach, likes, comments, shares, engagement, video_views, link_clicks, post_clicks, saves.

  • hashtag_score (%): Relative performance = (total hashtag engagement / total post engagement) × 100.

  • total: Total hashtags matching filters.

  • No

    Start date (inclusive).

    to

    date (YYYY-MM-DD)

    No

    End date (inclusive).

    sort_by

    string

    No

    One of: scheduled_at, reach, engagement, engagement_rate, click_through_rate, reach_rate, postType, likes, video_views, comments, shares, saves

    sort_type

    string

    No

    ASC or DESC. Default DESC.

    member_id

    string

    No

    Filter by post author/manager.

    query

    string

    No

    Text search in post text/title/link info.

    Platform differences: Metrics availability varies by social network/account type; missing fields may be null or omitted.

  • Pagination (insights list): page is 0‑based and returns 10 hashtags per page.

  • Hashtag score: hashtag_score (%) = (total hashtag engagement / total post engagement) × 100.

  • — Member (team) analytics
    GET /api/v1/analytics/:account_id/hashtag_insights

    account_id

    string

    No

    Limit to a single social account. Omit for all workspace accounts.

    from

    date (YYYY-MM-DD)

    No

    Start date (inclusive).

    to

    GET /api/v1/analytics/hashtag_performing_posts

    account_id

    string

    No

    Limit to a single social account. Omit for all workspace accounts.

    hashtag

    string

    Yes

    Hashtag to analyze (with #).

    from

    Endpoints

    1. Get Hashtag Insights

    Description

    URL Parameter

    Query Parameters

    2. Get Hashtag Performing Posts

    URL Parameter

    Query Parameters

    Notes

    Related Resources

    Post Insights
    Charts
    Best Times

    date (YYYY-MM-DD)

    date (YYYY-MM-DD)

    Members
    ,
    in_page
    ,
    mastodon
    ,
    bluesky

    tooltip

    Short explanatory text.

    type

    Suggested visualization: vertical, horizontal, side_by_side.

    last_value

    Show latest value highlight.

    show_percentage

    Indicates client should render as percentage.

    Yes if to used

    Start date (inclusive). Defaults to workspace range if omitted with to.

    to

    string (YYYY-MM-DD)

    Yes if from used

    End date (inclusive). Defaults to workspace range if omitted with from.

    last_value

    Latest cumulative snapshot (growth charts).

    total

    Period aggregate sum (engagement / sum charts).

    Ensure from ≤ to when providing dates.

  • Not all charts are available for every account_type.

  • Apply client‑side caching for chart definitions to reduce requests.

  • — Member (team) analytics
    GET /api/v1/analytics/charts

    account_type

    string

    No

    Filter charts for a specific account type.

    id

    Unique chart identifier (use in chart_ids[]).

    title

    Display title.

    group_id

    Chart group: growth, insights, demographics.

    GET /api/v1/analytics/:account_id/chart_data

    account_id

    string

    No

    When provided, returns data for that account only; when omitted, returns aggregate across the workspace (where supported).

    chart_ids[]

    string[]

    Yes

    One or more chart IDs from /api/v1/analytics/charts. Example: chart_ids[]=followers&chart_ids[]=post_engagement

    from

    current

    Object keyed by chart ID with current period series.

    previous

    Matching structure for the previous (comparison) period.

    data[]

    Array of { date, value } points.

    Requirements

    Endpoints

    1. List Charts

    Description

    Query Parameters

    Field Descriptions

    2. Get Chart Data

    Description

    URL Parameters

    Query Parameters

    Structure

    Usage Notes

    Related Resources

    Accounts API
    Hashtag Analysis
    Best Times

    string (YYYY-MM-DD)

    Members

    picture: Profile avatar URL.

  • type: Account type (user, page, business, etc.).

  • competitor_sync_in_queue: Whether a sync job is queued.

  • username: Handle (available for twitter, instagram, facebook).

  • verified: Whether the account is verified (available for twitter, facebook).

  • No

    Analyze a specific competitor.

    query

    string

    No

    Case‑insensitive search by competitor name.

    from

    date (YYYY-MM-DD)

    No

    Start date (inclusive).

    to

    date (YYYY-MM-DD)

    No

    End date (inclusive).

    page

    integer

    No

    Page number (0‑based). Default 0.

    sort_by

    string

    No

    One of: followers, reach, engagement, posts_count, videos_count, photos_count, links_count, statuses_count. Default followers.

    sort_type

    string

    No

    asc or desc. Default asc.

    : Current follower count.
  • followers_growth: Net growth in the selected period.

  • engagement: Total interactions (definition varies by network).

  • engagement_rate: Percentage (available for Twitter).

  • reach: Total reach (not available for Instagram/Facebook).

  • posts_count, videos_count, photos_count, links_count, statuses_count: Posting mix counts.

  • total: Total competitors matching filters (use with page to paginate).

  • Competitor post insights: Use the Post Insights endpoint in competitor mode:

    • GET /api/v1/analytics/:account_id/post_insights?competitors=true&competitor_id=...

    Charts — Discover chart IDs and fetch chart data
    GET /api/v1/competitors/:account_id

    account_id

    string

    No

    Social account ID to scope competitors.

    GET /api/v1/competitors/:account_id/analytics

    account_id

    string

    No

    Scope analytics to one social account (path variant).

    account_id

    string

    No

    Scope analytics to one social account (query variant).

    competitor_id

    1. List Competitors

    Description

    URL Parameter

    2. Get Competitors Analytics

    Description

    URL Parameter

    Query Parameters

    Notes

    Related Resources

    Best Times
    Post Insights
    Best Times
    Hashtag Analysis

    string

    Use this method when you have local media files that you want to upload directly.
    • Maximum file size for direct uploads: 200MB per file.

    • Requests exceeding 200MB will be rejected (typically with HTTP 413 Payload Too Large). For larger files, use the Upload from URL method.

    This endpoint expects a multipart/form-data request with the file included in the file field.

    Key Response Fields

    Field

    Description

    id

    Unique identifier for the uploaded media (use this in post requests)

    path

    URL path to access the uploaded media

    thumbnail

    URL path to access a thumbnail version of the media

    Use this method when your media is already hosted elsewhere and you want to import it by URL.

    Request Parameters

    Parameter

    Description

    Required

    media[].url

    URL of the media file to download

    Yes

    media[].name

    Custom name for the media file

    Unlike direct uploads, URL uploads are processed asynchronously. Use the returned job_id to check the status of your upload.

    Once you've uploaded media and have the media ID, you can reference it in your post requests:

    • Supported formats: JPG, PNG, GIF, WEBP

    • Recommended dimensions: Varies by platform (see Networks Reference)

    • Maximum file size: Varies by platform, generally 5-10MB

    • Supported formats: MP4, MOV, AVI, WEBM

    • Recommended dimensions: Varies by platform (see Networks Reference)

    • Maximum file size: Varies by platform, generally 512MB-2GB

    • Duration limits: Varies by platform and content type

    • Supported formats: PDF

    • Maximum file size: 100MB

    • Supported networks: LinkedIn only

    The validity object in the media upload response indicates which networks and post types can use the uploaded media. This helps prevent errors when attempting to use incompatible media in your posts.

    For example, if validity.instagram.reel is false, the uploaded media cannot be used for Instagram Reels.

    1. Resolution: Use appropriate image resolutions for each platform

    2. Aspect ratio: Follow recommended aspect ratios to avoid cropping

    3. File size: Optimize images for web to reduce file size

    4. Alt text: Always include descriptive alt text for accessibility

    1. Format: Use MP4 with H.264 encoding for maximum compatibility

    2. Dimensions: Use 1080p (1920x1080) for standard videos

    3. Aspect ratio: 16:9 for horizontal, 9:16 for vertical/stories/reels

    4. Duration: Keep videos under platform limits

    5. Thumbnails: Consider uploading custom thumbnails for videos

    1. Pre-check compatibility: Review the validity object before using media

    2. Error handling: Implement robust error handling for upload failures

    3. Caching: Cache media IDs to avoid unnecessary re-uploads

    • Content Types - Details on different content formats

    • Network Reference - Platform-specific media requirements

    • Publishing Methods - Using media in different post types

    Overview

    Direct File Upload

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "photo",
                "text": "Check out our latest product!",
                "media": [
                  {
                    "id": "6813892b5ec8b1e65235ae9e",
                    "type": "image",
                    "alt_text": "Product on white background"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "66db83154e299efa19a2d8eb",
                "scheduled_at": "2025-05-15T14:30:00Z"
              }
            ]
          }
        ]
      }
    }

    Limitation

    Request Format

    Upload from URL

    Checking Upload Status

    Using Media in Posts

    Supported Media Types

    Images

    Videos

    Documents

    Network Validation

    Best Practices

    Image Optimization

    Video Optimization

    General Tips

    Related Topics

    array

    No

    Filter by multiple post states

    from

    string

    Yes if to used

    ISO date or datetime; include posts on/after this timestamp

    to

    string

    Yes if from used

    ISO date or datetime; include posts on/before this timestamp

    page

    integer

    No

    Page number (default: 0)

    account_ids[]

    array

    No

    List of account IDs to filter by

    query

    string

    No

    Full-text search keyword in post content

    postType

    string

    No

    Filter by post type (see Type Values below)

    member_id

    string

    No

    Filter posts created by a specific workspace member

    scheduled_pending

    Scheduled posts pending approval

    scheduled_declined

    Scheduled posts that were declined

    scheduled_reauth

    Scheduled posts requiring account reauthorization

    scheduled_locked

    Scheduled posts that are locked

    published

    All published posts

    published_posted

    Posts that were successfully published

    published_deleted

    Published posts that were deleted

    published_hidden

    Published posts that were hidden

    draft

    All draft posts

    draft_dated

    Draft posts with a scheduled date

    draft_undated

    Draft posts without a scheduled date

    draft_private

    Private draft posts

    draft_public

    Public draft posts

    failed

    Posts that failed to publish

    recycling

    All recycling posts

    recycling_active

    Active recycling posts

    recycling_paused

    Paused recycling posts

    recycling_expired

    Expired recycling posts

    recycling_failed

    Failed recycling posts

    recycling_pending

    Recycling posts pending approval

    recycling_declined

    Recycling posts that were declined

    recycling_reauth

    Recycling posts requiring account reauthorization

    recycling_locked

    Recycling posts that are locked

    recurring

    Recurring posts

    gif

    GIF posts

    video

    Video posts

    reel

    Instagram or Facebook reels

    story

    Instagram or Facebook stories

    short

    YouTube shorts

    poll

    Poll posts

    document

    Document posts

    carousel

    Multi-image carousel posts

    article

    Article/blog posts

    Published post

    /api/v1/job_status/{job_id}

    Check status of submitted job

    Job status

    None required

    scheduled + auto: true

    Use AI-powered auto-scheduling

    range.start_date, range.end_date

    scheduled + recycling

    Reuse content multiple times

    recycling.gap, recycling.expire_count

    recurring

    Create repeating posts

    recurring.repeat, recurring.days_of_week

    text, media array

    video

    Video post

    text, media array

    link

    Link post with preview

    text, url

    carousel

    Multi-image post

    text, media array

    pdf

    PDF document (LinkedIn)

    text, media array

    Network Reference

    string

    No

    Competitor account ID to analyze (requires competitors=true).

    from

    date (YYYY-MM-DD)

    Yes

    Start date (inclusive). Filters posts scheduled/published on or after this date.

    to

    date (YYYY-MM-DD)

    Yes

    End date (inclusive). Filters posts scheduled/published on or before this date.

    query

    string

    No

    Case-insensitive search across post text, title, link description, video title.

    postType

    string

    No

    Filter by post type. One of: poll, status, link, carousel, photo, gif, video, reel, document, short, article, story.

    sort_by

    string

    No

    Sort field. One of: scheduled_at, reach, engagement, engagement_rate, click_through_rate, reach_rate, postType, likes, video_views, comments, shares, saves, link_clicks, post_clicks. Default scheduled_at.

    sort_type

    string

    No

    Sort direction. ASC or DESC. Default DESC.

    page

    integer

    No

    Page number (0-based). Each page contains 10 posts. Default 0.

    member_id

    string

    No

    Filter by the workspace member who created the post.

    Competitor Analysis
    Members

    Google Business Profiles: Updates, Photos, Events & Offers

    Share updates, photos, events, and special offers on your Google Business Profile via the Publer API. Each post type has its own fields—use the right payload to drive engagement and conversions.

    Request Examples

    1. Update Post

    General news or announcement with an image and a CTA button.

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "google": {
                "type": "photo",
                "text": "Our new feature is live!\npubler.com",
                "title": "LEARN_MORE",
                "media": [
                  {
                    "id": "68133d70f09cb4aa6377d2dc",
                    "path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
                    "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
                    "type": "photo"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "GOOGLE_ACCOUNT_ID",
                "scheduled_at": "2025-05-24T08:46:00-04:00"
              }
            ]
          }
        ]
      }
    }

    2. Photo Post

    Standalone photo update (no special details).

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "google": {
                "type": "photo",
                "details": { "type": "photo" },
                "text": "Our office view today!",
                "title": "PROFILE",
                "media": [
                  {
                    "id": "68133d70f09cb4aa6377d2dc",
                    "path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
                    "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
                    "type": "photo"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "GOOGLE_ACCOUNT_ID",
                "scheduled_at": "2025-05-24T08:50:00-04:00"
              }
            ]
          }
        ]
      }
    }

    3. Event Post

    Promote an upcoming event with start/end times and an optional link.

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "google": {
                "type": "photo",
                "details": {
                  "type": "event",
                  "title": "Summer Workshop",
                  "start": "2025-06-07T12:50:00Z",
                  "end":   "2025-08-03T12:50:00Z"
                },
                "text": "Join our Summer Workshop series!",
                "title": "LEARN_MORE",
                "url": "https://publer.com/events",
                "media": [
                  {
                    "id": "68133d70f09cb4aa6377d2dc",
                    "path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
                    "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
                    "type": "photo"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "GOOGLE_ACCOUNT_ID",
                "scheduled_at": "2025-06-07T08:50:00-04:00"
              }
            ]
          }
        ]
      }
    }

    4. Offer Post

    Advertise discounts or promotions with coupon codes and terms.

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "google": {
                "type": "photo",
                "details": {
                  "type": "offer",
                  "title": "Spring Sale",
                  "start":   "2025-05-28T12:50:00Z",
                  "end":     "2025-10-02T12:50:00Z",
                  "coupon":  "30%OFF",
                  "terms":   "https://publer.com/terms"
                },
                "text": "Enjoy 30% off sitewide!",
                "url": "https://publer.com/sale",
                "media": [
                  {
                    "id": "68133d70f09cb4aa6377d2dc",
                    "path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
                    "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
                    "type": "photo"
                  }
                ]
              }
            },
            "accounts": [
              {
                "id": "GOOGLE_ACCOUNT_ID",
                "scheduled_at": "2025-06-14T08:50:00-04:00"
              }
            ]
          }
        ]
      }
    }

    Parameters

    Field
    Type
    Description
    Feature
    Details
    1. Select Profile Choose the Google Business Profile in accounts[].id.

    2. Choose Post Type

      • Update: general news with image & CTA.

    • Use high-resolution images (≥250×250 pixels).

    • Craft clear CTAs to direct user action.

    • Include complete offer details (coupon & terms).

    External URL (for events/offers).

    networks.google.media[]

    array

    Array of 1 media object with keys: id, path, thumbnail, and type: "photo".

    networks.google.details.type

    string

    One of: "photo", "event", "offer".

    networks.google.details.title

    string

    Event or offer title (required for event/offer).

    networks.google.details.start

    string

    ISO 8601 start date/time (for events/offers).

    networks.google.details.end

    string

    ISO 8601 end date/time (for events/offers).

    networks.google.details.coupon

    string

    Coupon code (offers only).

    networks.google.details.terms

    string

    URL to terms & conditions (offers only).

    accounts[].id

    string

    Google Business Profile account ID.

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit for immediate publish).

    Call-to-Action Buttons

    Supported (LEARN_MORE, PROFILE, etc.)

    Events

    Requires start and end fields

    Offers

    Supports coupon and terms

    Video Support

    Not supported

    Photo: standalone image.

  • Event: include details.type = "event", dates, and optional link.

  • Offer: include details.type = "offer", dates, coupon, and terms URL.

  • Add Media Upload or reference one photo via the Media Upload API.

  • Compose & Schedule Build your JSON, set state and scheduled_at, then POST to /posts/schedule.

  • Set accurate event dates for reliable reminders.

    networks.google.type

    string

    "photo"

    networks.google.text

    string

    Main caption or description.

    networks.google.title

    string

    CTA button label (LEARN_MORE, PROFILE, etc.).

    networks.google.url

    Post Types

    Updates, Photos, Events, Offers

    Max Photo Size

    5 MB

    Min Photo Resolution

    250 × 250 pixels

    Supported Features & Limits

    Workflow

    Best Practices

    Related Topics

    Platform-Specific Formats
    Publishing Methods
    Content Types

    string

    ,
    link_clicks
    ,
    post_clicks
    . Default
    scheduled_at
    .
    member

    validity

    Indicates which networks and post types support this media

    width, height

    Dimensions of the uploaded media in pixels

    type

    Media type (photo, video, document)

    name

    Original filename

    Yes

    media[].caption

    Caption for the media

    No

    media[].source

    Source attribution

    No

    type

    Upload type (single or bulk)

    No

    direct_upload

    Whether to upload directly to our S3 cloud (slower, but required if you need the final media URL)

    (default: false)

    No

    in_library

    Whether to save to media library (default: false)

    No

    Post Callbacks

    Automate follow-up actions when you publish or schedule posts: auto-share to other accounts, post follow-up comments (or thread posts on some networks), or auto-delete/hide content after specified conditions are met.

    Overview

    Post callbacks are automation features you include per-account in the API request when creating posts. Callbacks are configured inside each accounts[] entry. The main callback types:

    • AutoShare — automatically share a published post to other social accounts

    • Follow-up Comments — schedule one or multiple comments (or threaded posts) tied to a post

    • Auto-Delete / Auto-Hide — automatically remove or hide posts after conditions are met

    Conditions are represented with a structured conditions object (relation + clauses) and can combine Time (age), Reach and Engagements checks using AND/OR.

    • Schedule with callbacks: POST /api/v1/posts/schedule

    • Publish now with callbacks: POST /api/v1/posts/schedule/publish

    Callbacks live inside each account object in your request payload.

    • bulk

      • state (e.g., "scheduled")

      • posts[]:

    Use conditions to define when a callback should execute.

    Structure:

    • conditions

      • relation: "AND" | "OR"

      • clauses:

    Notes:

    • age corresponds to "Is older than".

    • engagements and reach use comparison with "gt" (>) or "lt" (<).

    Automatically share the link of the published post to the specified accounts.

    Fields:

    • share.account_ids (string[]) — target account IDs to share to

    • share.text (string) — caption for the share (fallback: original post text where supported)

    • share.conditions (object) — when the share should run (see Conditions object)

    Example:

    Supported networks: Facebook Pages→Groups (when posting as a Page to a Group), Twitter/X, LinkedIn, Pinterest, Mastodon, Threads, BlueSky, TikTok, Telegram, Google Business Profiles.

    • Note: Google Business Profiles require non-empty text to auto-share.

    Schedule comments on the published post (or create follow-up posts/threads on some networks).

    Fields:

    • comments[]:

      • text (string) — comment body (text, hashtags, links, emoji)

      • language (string, optional)

    media is an array of media objects.

    When type is photo

    Each media item uses:

    • id

    • type

    • path

    Photo example

    When type is video

    Each media item uses:

    • id

    • type

    • path

    thumbnails is an array of thumbnail objects containing:

    • id

    • small

    • real

    Video example

    Notes and behavior:

    • On Twitter/X, Mastodon, BlueSky, and Threads the follow-up comment will be posted as a new post in the thread.

    • Supported: Twitter/X, LinkedIn, Facebook Pages, Mastodon, Threads, BlueSky.

    • Not supported (API limitations): Pinterest, TikTok, Facebook Personal Profiles, Google Business Profiles.

    Example:

    Automatically delete or hide a post when conditions are satisfied.

    Fields:

    • delete.conditions (object) — conditions triggering deletion/hide (see Conditions object)

      • Use conditions.clauses.age to set minimum time before deletion

    • delete.hide (boolean) — true to request hide instead of delete (platform-dependent)

    Example:

    Supported / unsupported:

    • Auto-delete supported for most scheduled networks except:

      • Not available for Instagram API (auto-delete not supported)

      • Not available for TikTok accounts

    • Use performance-based conditions to avoid premature callbacks (e.g., only share if the post reached a threshold).

    • Respect audience time zones when scheduling shares and comments.

    • Space out repeated shares across accounts using share.delay to avoid spam signals.

    • Recurring posts: add callbacks during scheduling so each recurrence includes them automatically.

    • Post Presets: configure default follow-up comments, auto-share targets, and default auto-delete/hide rules in Post Presets inside Publer. Presets use the same conditions model.

    • Some networks convert comments into separate posts/threads (Twitter/X, Mastodon, BlueSky, Threads).

    • Follow-up comments are not supported by Pinterest, TikTok, Facebook Personal Profiles, and Google Business Profiles due to API limitations.

    • Auto-delete is not available for Instagram, TikTok, posts published via reminders, or some story formats.

    • - Details on different content formats

    • - Information about scheduling posts

    • - How to publish content immediately

    Facebook Text Posts with Background

    Create and schedule Facebook status updates with vibrant backgrounds to boost engagement and visual appeal.

    Request Body

    Include text_format_preset_id in details under the facebook network:

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "details": {
                  "text_format_preset_id": "1868855943417360"
                },
                "text": "Status update with background color\n\npubler.com"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-06-21T23:18:00+02:00"
              }
            ]
          }
        ]
      }
    }

    Parameters

    Field
    Type
    Description

    Use one of these text_format_preset_id values to select a background:

    • No Other Media: Background posts cannot include images or videos.

    • Facebook Pages Only: Not supported on personal profiles or groups.

    • Links as Plain Text: URLs in your text appear without link previews.

    • Select Complementary Backgrounds: Match your brand palette and message.

    • Keep Copy Concise: Short, punchy text reads best over busy backgrounds.

    • Preview Before Posting: Verify legibility and overall visual balance.

    Reels, Shorts & Stories

    Short-form, immersive content formats for deep engagement. Use Publer’s API to schedule or publish Reels (Instagram & Facebook), Shorts (YouTube), and Stories (Instagram & Facebook) with a single JSON payload.

    Supported Formats & Specs

    Format
    Platform
    Max Duration
    Aspect Ratio
    Max Size
    Notes

    Send to the scheduling endpoint or use /posts/schedule/publish for immediate posting:

    Trial Reels let you publish a Reel as a trial before it’s shown to your followers.

    Set networks.instagram.details.trial_reel when creating an Instagram Reel:

    • MANUALThe Reel remains in trial until you approve sharing it with your followers.

    • SS_PERFORMANCE: Instagram may automatically share the Reel to your followers if it performs well.

    Notes

    • trial_reel is only supported for Instagram Reels (details.type = "reel").

    • trial_reel is optional. If omitted, the Reel is created normally.

    Field
    Type
    Description
    1. Upload: Use to upload vertical video (9:16).

    2. Compose: Set "details.type": "reel", optional audio and feed flags.

    3. (Optional) Trial Reel

    1. Upload: Upload video ≤ 60 sec, 9:16 ratio.

    2. Configure: Set "details.type": "short" and privacy.

    3. Add Title/Text: Populate title

    1. Upload: Add photo or video ≤ 15 sec.

    2. Tag as Story: Use "details.type": "story".

    3. Caption: Add text overlay.

    • Use high-quality, platform-compliant media (9:16 ratio).

    • Rename Reel audio to match branding.

    • Schedule according to audience peak times.

    TikTok Video & Multi-Photo Posts

    Publish or schedule TikTok videos and multi-photo (carousel) posts using the Publer API. This feature supports all TikTok-specific options, including privacy, comments, branded content, and more.

    Publer enables you to directly post or schedule TikTok videos and multi-photo posts (carousels) from your app or workflow.

    • Video posts: Upload and schedule single video posts. Supports cover selection, privacy, comment/duet/stitch toggles, and branded content disclosures.

    • Multi-photo posts (carousels): Upload and schedule up to 35 photos, each with an optional caption, as a single post. Supports music auto-add, privacy, and engagement options.

    191761991491375

    3D hearts, background image

    2193627793985415

    3D heart eyes emojis, background image

    200521337465306

    3D flame emojis, background image

    1821844087883360

    Walking Yellow illustration, background image

    177465482945164

    Light purple 3D cube pattern, background image

    160419724814650

    Orange with Pink illustration, background image

    248623902401250

    3D smiling emoji background, background image

    240401816771706

    3D rose emojis, background image

    1868855943417360

    3D crying laughter emoji, background image

    255989551804163

    Eye Pink illustration, background image

    1792915444087912

    1792915444087912 illustration, background image

    1654916007940525

    Light grey illustration, background image

    1679248482160767

    Light blue illustration, background image

    518948401838663

    Pink heart pattern on pink background, background image

    423339708139719

    Illustration, background image

    204187940028597

    Solid red, background

    621731364695726

    Solid red, background

    518596398537417

    Red illustration, background image

    134273813910336

    Tree Red illustration, background image

    217321755510854

    Pink and purple hearts on a pink background, background image

    323371698179784

    Sunset Red illustration, background image

    901751159967576

    Gradient, dark orange red, background

    552118025129095

    Brown illustration, background image

    263789377694911

    Apple Red illustration, background image

    606643333067842

    Tulip Light orange illustration, background image

    458988134561491

    Cat Dark orange illustration, background image

    548109108916650

    Unicorn Red illustration, background image

    175493843120364

    Pink and yellow gradient, background image

    338976169966519

    Stairs Beige illustration, background image

    206513879997925

    Spiral Beige illustration, background image

    168373304017982

    Cube Beige illustration, background image

    1271157196337260

    Solid red, background

    174496469882866

    Lemon Yellow illustration, background image

    862667370603267

    Egg Light yellow illustration, background image

    127541261450947

    Ball Green illustration, background image

    218067308976029

    218067308976029 Light grey illustration, background image

    688479024672716

    Gradient, teal light green, background

    238863426886624

    Cat Light blue illustration, background image

    301029513638534

    Solid teal, background

    154977255088164

    Solid teal, background

    1941912679424590

    Gradient, grey dark grey, background

    396343990807392

    Flower Teal illustration, background image

    143093446467972

    Blue clouds on a dark blue background, background image

    161409924510923

    Rocket ship makes a heart in the sky, background image

    145893972683590

    Solid dark purple, background

    217761075370932

    Solid blue, background

    931584293685988

    Wave Blue illustration, background image

    148862695775447

    Pink and purple hearts on a purple background, background image

    100114277230063

    Deep Sea Blue illustration, background image

    558836317844129

    Spiral purple illustration, background image

    172497526576609

    Watermelon Light purple illustration, background image

    433967226963128

    Solid purple, background

    197865920864520

    Donut Light purple illustration, background image

    643122496026756

    Pink illustration, background image

    762009070855346

    Ballon Light grey illustration, background image

    228164237768720

    Grey heart pattern on a black background, background image

    146487026137131

    Rain Black illustration, background image

    221828835275596

    Glasses Light grey illustration, background image

    1903718606535395

    Solid red, background

    1881421442117417

    Solid black, background

    249307305544279

    Gradient, red blue, background

    1777259169190672

    Gradient, purple magenta, background

    303063890126415

    Yellow and orange and pink gradient, background image

    122708641613922

    Gradient, dark grey black, background

    319468561816672

    Dark blue illustration, background image

    121945541697934

    121945541697934 Pink illustration, background image

    288211338285858

    Blue illustration, background image

    446330032368780

    Gradient, red, background

    219266485227663

    Solid magenta, background

    1289741387813798

    Solid dark red, background

    1365883126823705

    Solid blue, background

    Editing: You may change—but not remove—a background on published posts.
  • Character Limit: Publer allows unlimited text; Facebook enforces a 130-character cap on background posts.

  • Syncing: Background posts sync back as plain text, not background posts.

  • networks.facebook.type

    string

    Must be "status".

    networks.facebook.details

    object

    Facebook-specific settings.

    networks.facebook.details.text_format_preset_id

    string

    ID of the background preset (see list below).

    networks.facebook.text

    string

    Your post copy.

    ID

    Background Description

    106018623298955

    Solid purple, background

    365653833956649

    Pink tropical plants, background image

    618093735238824

    Brown illustration, background image

    Background Presets

    Key Notes & Limitations

    Best Practices

    Related Topics

    Platform-Specific Formats
    Publishing Methods
    Content Types
    networks: { <network_name>: { type, text, details, ... } }
  • accounts[]:

    • id

    • scheduled_at (optional)

    • share (optional)

    • comments (optional array)

    • delete (optional)

  • age: { duration: number, unit: "Minute" | "Hour" | "Day" | "Week" }
  • engagements: { comparison: "gt" | "lt", value: number }

  • reach: { comparison: "gt" | "lt", value: number }

  • A conditions object can include any subset of clauses; combine them using relation.
    share.account_ids order +
    delay
    determine spacing between shares
    media: (optional array)
  • conditions (object, optional) — when to post the comment (see Conditions object)

  • caption

  • thumbnail

  • caption

  • thumbnails

  • Recurring posts: Configure follow-up comments at scheduling time to have them included for each recurrence.
  • Performance-based conditions (reach/engagements) and time-based (age) commonly apply to the first comment; subsequent comments use time-based age only.

  • Not available for posts published via reminders or some push/published types
  • Some types (e.g., Stories) cannot be auto-deleted

  • Auto-hide only works where supported (e.g., Facebook Page posts (not videos), YouTube)

  • Prefer hiding (when supported) to preserve analytics/history if you may need them later.

  • Test callback behavior on target networks (APIs and behavior differ per platform).

  • Performance-based conditions depend on platform metrics; metrics may arrive with delay.

    Endpoints

    Request structure (top-level)

    Conditions object

    Auto-Sharing

    Follow-up Comments

    Comment media fields

    Auto-Delete / Auto-Hide

    Request Structure

    Full example

    Best practices

    Recurring posts & Post Presets

    Limitations & notes

    Related Topics

    Content Types
    Scheduled Posts
    Immediate Publishing

    networks.youtube.title

    string

    Title for YouTube Shorts

    networks.{provider}.media[]

    array

    Media array (from Media API)

    media[].id

    string

    Publer media identifier

    media[].path

    string

    URL to the video or image

    media[].type

    string

    "video" or "photo"

    media[].thumbnails

    array

    An array of thumbnail objects with id, small, and real URLs (Video only)

    media[].default_thumbnail

    integer

    Index of the thumbnail image (Video only)

    networks.{provider}.details

    object

    Format-specific settings

    details.type

    string

    "reel", "short", or "story"

    details.audio

    string

    Custom audio name for Reels (optional)

    details.feed

    boolean

    true to also post Reel in Feed tab (Instagram only)

    details.trial_reel

    string

    Instagram only. Trial Reel mode: "MANUAL" or "SS_PERFORMANCE".

    details.privacy

    string

    "public", "private", or "unlisted" (Shorts only)

    accounts[].id

    string

    Target account identifier

    accounts[].scheduled_at

    string

    ISO 8601 timestamp for scheduling (omit for immediate publishing)

    : Set
    details.trial_reel
    to
    MANUAL
    or
    SS_PERFORMANCE
    .
  • Schedule: Provide scheduled_at or publish immediately.

  • Verify: Monitor job status and preview in dashboard.

  • and
    text
    .
  • Publish: Schedule or publish immediately.

  • Schedule: Set scheduled_at or publish now.

    Reels

    Instagram, Facebook

    3–90 seconds

    9:16

    1 GB

    Optional audio rename, feed toggle

    Shorts

    YouTube

    ≤ 60 seconds

    9:16

    2 GB

    privacy: public/private/unlisted

    Stories

    Instagram, Facebook

    ≤ 15 seconds

    9:16

    1 GB

    Photo or video, link stickers on IG

    networks.{provider}.type

    string

    "video" for Reels/Shorts/Stories, "photo" for Stories

    networks.{provider}.text

    string

    Caption or overlay text

    Request Structure

    1. Instagram/Facebook Reel

    Instagram Trial Reels (optional)

    trial_reel is only supported for Instagram Reels (details.type: "reel").

    2. YouTube Short

    3. Instagram/Facebook Story

    Common Parameters

    Workflow

    Reels

    Shorts

    Stories

    Best Practices

    Related Topics

    Media API
    Platform-Specific Formats
    Publishing Methods
    Content Types
    "share": {
      "account_ids": ["A_ID_1", "A_ID_2"],
      "text": "Check out our latest blog post!",
      "conditions": {
        "relation": "AND",
        "clauses": {
          "age": { "duration": 1, "unit": "Hour" },
          "engagements": { "comparison": "gt", "value": 10 },
          "reach": { "comparison": "gt", "value": 100 }
        }
      },
      "delay": {
          "duration": 0,
          "unit": "Minute"
        },
    }
    {
      "media": [
        {
          "id": "69de4805ef6eccdc0ca11a15",
          "type": "photo",
          "path": "https://cdn.publer.com/uploads/photos/69de4805ef6eccdc0ca11a15.jpg",
          "caption": null,
          "thumbnail": "https://cdn.publer.com/uploads/photos/thumb_69de4805ef6eccdc0ca11a15.jpg"
        }
      ]
    }
    {
      "media": [
        {
          "id": "6964fee1d6f826ba4a2bc046",
          "type": "video",
          "path": "https://cdn.publer.com/uploads/videos/6964fee1d6f826ba4a2bc046/9bac0de9d7b333032a9789190687171b.mp4",
          "caption": null,
          "thumbnails": [
            {
              "id": "6964fed7d6f826ba4a2bc02e",
              "small": "https://cdn.publer.com/uploads/photos/thumb_6964fed7d6f826ba4a2bc02e.jpg",
              "real": "https://cdn.publer.com/uploads/photos/6964fed7d6f826ba4a2bc02e.jpg"
            }
          ]
        }
      ]
    }
    "comments": [
      {
        "text": "First 100 customers get 10% off!",
        "conditions": {
          "relation": "AND",
          "clauses": {
            "age": { "duration": 2, "unit": "Hour" },
            "engagements": { "comparison": "gt", "value": 10 },
            "reach": { "comparison": "gt", "value": 10 }
          }
        }
      },
      {
        "text": "24 hours left—don’t miss out!",
        "conditions": {
          "relation": "AND",
          "clauses": {
            "age": { "duration": 1, "unit": "Day" }
          }
        },
        "media": {
          "id": "680fa5cc48487c4ccbf8c146",
          "type": "photo",
          "path": ".../photos/680fa5cc48487c4ccbf8c146.jpg",
          "thumbnail": ".../photos/thumb_680fa5cc48487c4ccbf8c146.jpg",
          "caption": "Only one day left!"
        }
      }
    ]
    "delete": {
      "conditions": {
        "clauses": {
          "age": { "duration": 7, "unit": "Day" },
          "engagements": { "comparison": "lt", "value": 10 }
        }
      },
      "hide": false
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Your post content here"
              }
            },
            "accounts": [
              {
                "id": "ACCOUNT_ID",
                "scheduled_at": "2025-05-15T14:30:00Z", // Optional for immediate publishing
                "share":   { /* AutoShare config */ },
                "comments":[ /* Follow-up comments */ ],
                "delete":  { /* Auto-Delete config */ }
              }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Post with callbacks"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-10-31T10:23+01:00",
                "share": {
                  "account_ids": [
                    "63c675b54e299e9cf2b667e8"
                  ],
                  "conditions": {
                    "relation": "AND",
                    "clauses": {
                      "age": {
                        "duration": 10,
                        "unit": "Minute"
                      },
                      "engagements": {
                        "comparison": "gt",
                        "value": 10
                      },
                      "reach": {
                        "comparison": "gt",
                        "value": 100
                      }
                    }
                  },
                  "text": "AUTO SHARE"
                },
                "comments": [
                  {
                    "text": "FOLLOW UP COMMENT",
                    "conditions": {
                      "relation": "AND",
                      "clauses": {
                        "age": {
                          "duration": 10,
                          "unit": "Minute"
                        },
                        "engagements": {
                          "comparison": "gt",
                          "value": 10
                        },
                        "reach": {
                          "comparison": "gt",
                          "value": 100
                        }
                      }
                    }
                  },
                  {
                    "text": "OTHER COMMENT",
                    "conditions": {
                      "relation": "AND",
                      "clauses": {
                        "age": {
                          "duration": 10,
                          "unit": "Minute"
                        }
                      }
                    }
                  }
                ],
                "delete": {
                  "conditions": {
                    "clauses": {
                      "age": {
                        "duration": 1,
                        "unit": "Hour"
                      }
                    }
                  },
                  "hide": false
                }
              }
            ]
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "instagram": {
              "type": "video",
              "text": "Our summer Reel!",
              "media": [{
                "id": "67c9630bedeb539dd87dd23c",
                "path": "https://cdn.publer.com/videos/67c9630b.mp4",
                "type": "video",
                "thumbnails": [
                      {
                        "id": "67da852b075cdb33821384ba",
                        "small": "https://.../thumb_67da852b075cdb33821384ba.jpg",
                        "real":  "https://.../67da852b075cdb33821384ba.jpg"
                      },
                      ......
                      {
                        "id": "67da852c075cdb33821384bb",
                        "small": "https://.../thumb_67da852c075cdb33821384bb.jpg",
                        "real":  "https://.../67da852c075cdb33821384bb.jpg"
                      },
                "default_thumbnail": 1
              }],
              "details": {
                "type": "reel",
                "audio": "Custom audio name",
                "feed": false
              }
            }
          },
          "accounts": [{
            "id": "67d1f5f13d9895bab04393ec",
            "scheduled_at": "2025-07-27T14:16:00+02:00"
          }]
        }]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "instagram": {
              "type": "video",
              "text": "Trial Reel",
              "media": [{
                "id": "67c9630bedeb539dd87dd23c",
                "path": "https://cdn.publer.com/videos/67c9630b.mp4",
                "type": "video",
                "thumbnails": [
                      {
                        "id": "67da852b075cdb33821384ba",
                        "small": "https://.../thumb_67da852b075cdb33821384ba.jpg",
                        "real":  "https://.../67da852b075cdb33821384ba.jpg"
                      },
                      ......
                      {
                        "id": "67da852c075cdb33821384bb",
                        "small": "https://.../thumb_67da852c075cdb33821384bb.jpg",
                        "real":  "https://.../67da852c075cdb33821384bb.jpg"
                      },
                "default_thumbnail": 1
              }],
              "details": {
                "type": "reel",
                "trial_reel": "SS_PERFORMANCE"
              }
            }
          },
          "accounts": [{
            "id": "67b5f97c2540fe322d786026",
            "scheduled_at": "2026-02-21T10:02+01:00"
          }]
        }]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "youtube": {
              "type": "video",
              "title": "Our Latest Short",
              "text": "Quick highlights!",
              "media": [{
                "id": "67c9630bedeb539dd87dd23c",
                "path": "https://cdn.publer.com/videos/67c9630b.mp4",
                "type": "video",
                "thumbnails": [
                      {
                        "id": "67da852b075cdb33821384ba",
                        "small": "https://.../thumb_67da852b075cdb33821384ba.jpg",
                        "real":  "https://.../67da852b075cdb33821384ba.jpg"
                      },
                      .....
                      {
                        "id": "67da852c075cdb33821384bb",
                        "small": "https://.../thumb_67da852c075cdb33821384bb.jpg",
                        "real":  "https://.../67da852c075cdb33821384bb.jpg"
                      }
              }],
              "details": {
                "type": "short",
                "privacy": "public"
              }
            }
          },
          "accounts": [{
            "id": "64abc34d4e299e662bfd6389",
            "scheduled_at": "2025-08-01T14:16:00+02:00"
          }]
        }]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [{
          "networks": {
            "instagram": {
              "type": "photo",
              "text": "Behind the scenes!",
              "media": [{
                "id": "680fa5cc48487c4ccbf8c146",
                "path": "https://cdn.publer.com/photos/680fa5cc.jpg",
                "type": "photo"
              }],
              "details": {
                "type": "story"
              }
            }
          },
          "accounts": [{
            "id": "67d1f5f13d9895bab04393ec",
            "scheduled_at": "2025-08-24T14:16:00+02:00"
          }]
        }]
      }
    }

    When posting a video to TikTok, the API does not immediately return a URL to the published post. TikTok first processes the video after upload and only makes the public link available once processing is complete.

    • After posting a video: The returned response will not contain the TikTok post URL.

    • To obtain the published TikTok video link: Retrieve your post later via the Posts. Once TikTok finishes processing, the link will be included in the post data.

    To schedule or publish a TikTok post, use the Immediate Publishing or Manual Scheduling API endpoint with a networks.tiktok object describing your post.

    • No recurring or recycled videos: TikTok does not allow duplicate content.

    • Watermarks: Not supported due to TikTok API limits.

    • Privacy and engagement: Options are synced from TikTok and may vary by account type, check your account details from Accounts.

    • Thumbnails (Videos): You can select a cover frame when posting automatically.

    Field
    Type
    Required
    Description

    type

    string

    Yes

    Must be "video".

    text

    Field
    Type
    Required
    Description

    type

    string

    Yes

    Must be "photo".

    title

    • No GIF/video mixing: Carousel posts cannot mix photos, GIFs, or videos.

    • Privacy: "Everyone" is only available if the TikTok account is public.

    • Branded content: Cannot be private. Once posted, branded content is permanently labeled.

    • No recurring or recycled posts: TikTok blocks duplicate content.

    • Watermarks: Not supported.

    • Links: Not supported in TikTok posts.

    • Twitter/X Long-Form Posts

    • Content Types Overview

    Overview

    You can only post to one TikTok account at a time—TikTok does not allow duplicate content or posting to multiple accounts simultaneously.

    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "accounts": [
              {
                "id": "tiktok_account_123",
                "scheduled_at": "2025-08-26T12:00:00Z"
              }
            ],
            "networks": {
              "tiktok": {
                "type": "video",
                "text": "Check out our new product launch! #launch #tiktok",
                "media": [
                  {
                    "id": "media_video_001",
                    "path": "https://storage.com/launch-video.mp4",
                    "default_thumbnail": 2,
                    "thumbnails": [
                      {
                        "real": "https://storage.com/thumb1.jpg",
                        "small": "https://storage.com/thumb1_small.jpg"
                      },
                      {
                        "real": "https://storage.com/thumb2.jpg",
                        "small": "https://storage.com/thumb2_small.jpg"
                      },
                      {
                        "real": "https://storage.com/thumb3.jpg",
                        "small": "https://storage.com/thumb3_small.jpg"
                      }
                    ]
                  }
                ],
                "details": {
                  "privacy": "PUBLIC_TO_EVERYONE",
                  "comment": true,
                  "duet": true,
                  "stitch": true,
                  "promotional": false,
                  "paid": false,
                  "reminder": false
                }
              }
            }
          }
        ]
      }
    }
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "accounts": [
              {
                "id": "tiktok_account_123",
                "scheduled_at": "2025-08-26T14:00:00Z"
              }
            ],
            "networks": {
              "tiktok": {
                "type": "photo",
                "title": "Summer Vibes ☀️",
                "text": "Nothing beats a perfect summer day! What's your favorite summer activity? 🏖️ #summer #lifestyle #photography",
                "media": [
                  { "id": "img1", "path": "https://storage.com/summer1.jpg", "caption": "Beach day" },
                  { "id": "img2", "path": "https://storage.com/summer2.jpg", "caption": "Sunset views" },
                  { "id": "img3", "path": "https://storage.com/summer3.jpg", "caption": "Ice cream time" }
                ],
                "details": {
                  "privacy": "PUBLIC_TO_EVERYONE",
                  "auto_add_music": true,
                  "comment": true,
                  "promotional": false,
                  "paid": false,
                  "reminder": false
                }
              }
            }
          }
        ]
      }
    }

    Notice: TikTok Video Publishing & Link Availability

    How It Works

    Key Rules

    Video Post Example

    Multi-Photo Post (Carousel) Example

    TikTok-Specific Parameters

    Video Post Parameters

    Carousel (Multi-Photo) Post Parameters

    Tips & Limitations

    Related Topics

    Publishing Methods

    A concise guide to all content publishing methods available via the Publer API. Choose the method that best fits your workflow, from instant publishing to automated recycling and recurring schedules.

    Available Methods

    Method
    Use Case
    Key Parameters
    Business Value

    Publish content right away

    Send your post to networks right away.

    Endpoint:

    Request example:

    • Omit scheduled_at entirely

    • Content is processed immediately via the schedule/publish endpoint

    • Supports all content types and network-specific options


    Plan posts for future dates and times across multiple networks.

    Endpoint:

    Request example:

    • Include a valid ISO 8601 scheduled_at timestamp

    • Times must be at least 1 minute in the future

    • Supports timezone offsets


    Save work-in-progress content for review or refinement.

    Endpoint:

    Request example (private draft):


    Let Publer pick the best posting times within a date range.

    Endpoint:

    • You need a posting schedule. are account-specific. You can have only one posting schedule per account, however, it can consist of many time slots.

    • If you want the same posting schedule across multiple social accounts, you can do so by .

    Request example:


    Automatically repost content multiple times on a defined cadence.

    Endpoint:

    • First, you need to create a post and a posting schedule. Click to learn how to set up a new time slot for your posts.

    Request example:

    Key recycling parameters:


    Schedule content to repeat on a predefined pattern.

    Endpoint:

    Request example:


    All publishing methods return a job ID for asynchronous processing:

    Always verify success by checking the job status:

    Example success response:

    • Network-specific content: Override content for specific platforms

    • Multi-account publishing: Target multiple accounts in a single request

    string

    Yes

    Video description text (max 2,200 chars).

    media[]

    array

    Yes

    Single video object (see below).

    media[].id

    string

    Yes

    Media ID if using stored media.

    media[].path

    string

    No

    URL to the video file.

    media[].default_thumbnail

    integer

    No

    (Optional) Index of the selected thumbnail (0-based).

    media[].thumbnails[]

    array

    Yes

    Array of thumbnails with real and small URLs.

    media[].thumbnails[].real

    string

    No

    Full-size thumbnail image URL.

    media[].thumbnails[].small

    string

    No

    Small-size thumbnail image URL.

    details

    object

    Yes

    TikTok-specific options (see below).

    details.privacy

    string

    No

    Who can view: "PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY"

    details.comment

    boolean

    No

    Allow comments (default: false).

    details.duet

    boolean

    No

    Allow duets (default: true).

    details.stitch

    boolean

    No

    Allow stitching (default: true).

    details.promotional

    boolean

    No

    Mark as promotional/brand organic content (cannot be private, default: false).

    details.paid

    boolean

    No

    Mark as paid partnership (cannot be private, default: false).

    string

    Yes

    Carousel post title (max 90 chars).

    text

    string

    Yes

    Description text (max 4,000 chars).

    media[]

    array

    Yes

    Up to 35 photo objects (see below).

    media[].id

    string

    Yes

    Media ID if using stored media.

    media[].path

    string

    No

    (Optional) URL to the photo file.

    media[].caption

    string

    No

    (Optional) Caption for each photo.

    details

    object

    Yes

    TikTok-specific options (see below).

    details.privacy

    string

    No

    Who can view: "PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY"

    details.comment

    boolean

    No

    Allow comments (default: false).

    details.auto_add_music

    boolean

    No

    Auto-add music to slideshow (default: false).

    details.promotional

    boolean

    No

    Mark as promotional/brand organic content (cannot be private, default: false).

    details.paid

    boolean

    No

    Mark as paid partnership (cannot be private, default: false).

    details.reminder

    boolean

    No

    Upload-only mode (user must publish manually, default: false).

    Each account can have its own scheduled_at

    string

    Yes

    ISO 8601 timestamp for earliest possible posting time

    range.end_date

    string

    No

    ISO 8601 timestamp for latest possible posting time

    share_next

    boolean

    No

    When true, uses next available optimal slot

    recycling.gap_freq

    string

    Frequency unit (Day, Week, or Month)

    recycling.start_date

    string

    Date to begin recycling (ISO 8601 format)

    recycling.expire_count

    string or number

    Maximum number of times to recycle

    recycling.expire_date

    string

    Date to stop recycling (ISO 8601 format, alternative to count)

    string

    Yes

    First occurrence date (ISO 8601 format)

    recurring.end_date

    string

    No

    Last occurrence date (ISO 8601 format)

    recurring.repeat

    string

    Yes

    Frequency type: daily, weekly, or monthly

    recurring.days_of_week

    array

    For weekly

    Array of weekdays (1=Monday, 7=Sunday)

    recurring.repeat_rate

    number

    No

    How often to repeat (e.g., 1=every week, 2=every other week)

    recurring.time

    string

    No

    Fixed time for posts (format: "HH:MM")

    failed

    Job failed completely

    Check error details and retry

    No scheduled_at

    Time-sensitive announcements, breaking news

    Scheduled

    Publish at specific date/time

    scheduled_at

    Content calendar planning, timed campaigns

    Draft

    Save for later use

    state: draft

    Workspace collaboration, content preparation

    Auto-scheduled

    Automatically scheduling posts

    auto: true

    Engagement optimization, workload reduction

    Recycled

    Reuse content multiple times

    recycling object

    Evergreen content, extended reach

    Recurring

    Create repeating posts

    recurring object

    Regular updates, consistent presence

    State Value

    Description

    Access Control

    draft_private

    Private draft

    Only accessible to the creator

    draft_public or draft

    Workspace-visible draft

    Parameter

    Type

    Required

    Description

    auto

    boolean

    Yes

    Set to true to enable auto-scheduling

    Parameter

    Type

    Description

    recycling.solo

    boolean

    When true, recycles as individual post; otherwise groups with other recycled content

    recycling.gap

    number

    Parameter

    Type

    Required

    Description

    state

    string

    Yes

    Must be set to recurring

    Status

    Description

    Next Action

    working

    Job is still being processed

    Wait and check again

    complete

    Job finished (check failures object for partial failures)

    Immediate Publishing

    Implementation Notes

    Scheduled Publishing

    Implementation Notes

    Draft Posts

    Visibility Options

    Auto-Scheduling

    Before auto-scheduling, you need to keep in mind that:

    Key Auto-Scheduling Parameters

    Recycling Content

    To Recycle a post:

    Recurring Posts

    Response Handling

    Checking Job Status

    Job Status Values

    Advanced Usage Tips

    Learn more about immediate publishing
    Learn more about scheduled publishing
    Learn more about draft posts
    Posting schedules
    Duplicating Settings
    Learn more about auto-scheduling
    here
    Learn more about recycle posts
    Learn more about recurring posts
    Immediate

    Available to all workspace members with appropriate permissions

    range.start_date

    Frequency number (1, 2, 3, etc.)

    recurring.start_date

    Review results

    POST /api/v1/posts/schedule/publish
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Breaking news update!"
              }
            },
            "accounts": [
              {
                "id": "66db83154e299efa19a2d8eb"
                // No scheduled_at parameter
              }
            ]
          }
        ]
      }
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Scheduled announcement for next week!"
              }
            },
            "accounts": [
              {
                "id": "66db83154e299efa19a2d8eb",
                "scheduled_at": "2025-05-15T14:30:00Z"
              }
            ]
          }
        ]
      }
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "draft_private",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Draft post for later review"
              }
            },
            "accounts": [
              {
                "id": "66f509f7db2797026a37ba76"
              }
            ]
          }
        ]
      }
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Autoschedule post"
              }
            },
            "accounts": [
              {
                "id": "66f509f7db2797026a37ba76"
              }
            ],
            "share_next": false,
            "range": {
              "start_date": "2025-05-23T07:45:00.000Z",
              "end_date": "2025-05-31T07:45:00.000Z"
            },
            "auto": true
          }
        ]
      }
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "status",
                "text": "This content will be recycled multiple times"
              }
            },
            "accounts": [
              {
                "id": "66f509f7db2797026a37ba76",
                "labels": [""]
              }
            ],
            "range": {
              "start_date": "2025-05-23T07:45:00.000Z",
              "end_date": null
            },
            "recycling": {
              "solo": true,
              "gap": 2,
              "gap_freq": "Week",
              "start_date": "2025-06-01",
              "expire_count": "3",
              "expire_date": "2025-07-15"
            }
          }
        ]
      }
    }
    POST /api/v1/posts/schedule
    {
      "bulk": {
        "state": "recurring",
        "posts": [
          {
            "networks": {
              "default": {
                "type": "status",
                "text": "Weekly update post"
              }
            },
            "accounts": [
              {
                "id": "66f509f7db2797026a37ba76"
              }
            ],
            "recurring": {
              "start_date": "2025-05-01T03:45-04:00",
              "end_date": "2025-06-01T03:45-04:00",
              "repeat": "weekly",
              "days_of_week": [1, 5],
              "repeat_rate": 1
            }
          }
        ]
      }
    }
    {
       "job_id": "6810dec617eae6d55d7a5e5b"
    }
    GET /api/v1/job_status/6810dec617eae6d55d7a5e5b
    {
        "status": "complete",
        "payload": {
            "failures": {}
        },
        "plan": {
            // Current user's plan details
        }
    }

    Networks

    Detailed platform-specific capabilities, content support, and limitations for all social networks available via the Publer API.

    Supported Networks

    Network

    Provider

    Content Types

    Media Support

    Character Limit

    Facebook

    Provider: facebook

    Content Types:

    • Text posts

    • Text posts with background color

    • Photo posts (single or multiple)

    • Video posts

    Limitations:

    • Text: 10,000 characters

    • Photos: Up to 10 per post

    • Videos: Up to 240 minutes, 10GB max file size

    • Link previews: Automatically generated from URL

    Special Considerations:

    • Page permissions required for business pages

    • Video aspect ratio: 16:9 to 9:16 supported

    • Image aspect ratio: 1.91:1 to 1:1 recommended

    • Hashtags supported but used less frequently than other platforms

    Example:

    Provider: instagram

    Content Types:

    • Photo posts (single or multiple)

    • Video posts

    • Carousel posts

    • Stories

    Limitations:

    • Text (caption): 2,200 characters

    • Photos: Up to 10 per carousel

    • Videos: Up to 60 minutes, 10GB max file size

    • Stories: 15 seconds per segment

    Special Considerations:

    • Business account required for API posting

    • Image aspect ratio: Between 1.91:1 and 4:5 (square 1:1 recommended)

    • Cannot post links in captions (they won't be clickable)

    • First comments can be auto-posted with hashtags

    Example:

    Provider: twitter

    Content Types:

    • Text posts

    • Photo posts (single or multiple)

    • Video posts

    • Link posts

    Limitations:

    • Text: 280 characters (25,000 for premium accounts)

    • Photos: Up to 4 per tweet

    • Videos: Up to 140 seconds for standard users

    • URLs count as 23 characters regardless of length

    Special Considerations:

    • Developer account required for API access

    • Hashtags and @mentions count toward character limit

    • Media attachments no longer count toward the 280 character limit

    • Alt text for images highly recommended

    Example:

    Provider: linkedin

    Content Types:

    • Text posts

    • Photo posts

    • Video posts

    • Link posts

    Limitations:

    • Text: 3,000 characters

    • Photos: Up to 9 per post

    • Videos: Up to 15 minutes, 5GB max file size

    • Documents: PDF format, 100MB max

    Special Considerations:

    • Supports markdown-style formatting (bold, italic, bullets)

    • Company page access requires admin privileges

    • More formal tone typically recommended

    • Professional content performs best

    Example:

    Provider: pinterest

    Content Types:

    • Photo pins

    • Video pins

    Limitations:

    • Description: 500 characters

    • Images: 20MB max, 1000x1500px recommended

    • Videos: 30 seconds minimum, 15 minutes maximum

    Special Considerations:

    • Must include an image or video (no text-only posts)

    • Vertical images (2:3 ratio) perform best

    • Board selection required when posting

    • Alt text important for search optimization

    Example:

    Provider: google

    Content Types:

    • Text posts

    • Photo posts

    • Video posts

    • Link posts

    Limitations:

    • Text: 1,500 characters

    • Photos: Up to 10 per post

    • Videos: Up to 30 seconds

    Special Considerations:

    • Location ID required for multi-location businesses

    • Posts expire after 7 days by default

    • Call-to-action buttons available (Learn more, Book, Order, etc.)

    • Location-specific content recommended

    Example:

    Provider: tiktok

    Content Types:

    • Video posts

    • Single or multi-photo/carousel posts

    Limitations:

    • Caption: 2,200 characters

    • Videos: 3 seconds to 10 minutes

    • File size: 500MB maximum

    • Carousels can be up to 10 photos. At the moment, videos cannot be included in a carousel post.

    Special Considerations:

    • Business account required for API posting

    • Vertical video format (9:16) required

    • Sound/music highly recommended

    • Cannot edit video after posting

    Example:

    Provider: youtube

    Content Types:

    • Video posts

    • Shorts

    Limitations:

    • Title: 100 characters

    • Description: 5,000 characters

    • Tags: Up to 500 characters total

    • Videos: Up to 12 hours, 256GB maximum

    Special Considerations:

    • Channel verification required for longer videos

    • Thumbnail image can be specified

    • Category selection required

    • Privacy setting options (public, private, unlisted)

    Example:

    Provider: telegram

    Content Types:

    • Text posts

    • Photo posts

    • Video posts

    • Link posts

    Limitations:

    • Text: 4,096 characters per message

    • Photos: Up to 10 per post

    • Videos: Up to 2GB per file

    • File attachments: Up to 2GB

    Special Considerations:

    • Bot API token required

    • Channel or group specified by chat ID

    • Markdown and HTML formatting supported

    • Silent posting option available

    Example:

    Provider: mastodon

    Content Types:

    • Text posts

    • Photo posts

    • Video posts

    • Link posts

    Limitations:

    • Text: 500 characters minimum (varies by server)

    • Photos: Up to 4 per post

    • Videos: Format and size limits vary by server

    • GIFs need to be less than 8 MB and have a resolution up to 1280x720 pixels.

    Special Considerations:

    • Instance URL required for posting

    • Content warnings can be specified

    • Visibility options: public, unlisted, private, direct

    • Alt text essential for accessibility

    Example:

    Provider: threads

    Content Types:

    • Text posts

    • Photo posts

    • Video posts

    Limitations:

    • Text: 500 characters

    • Photos: Up to 10 per post

    • Videos: Up to 5 minutes

    Special Considerations:

    • Requires Instagram business account connection

    • Cannot schedule posts for specific times via API

    • No direct link posting (links are non-clickable)

    • Hashtags supported but used differently than Instagram

    Example:

    Provider: bluesky

    Content Types:

    • Text posts

    • Photo posts

    Limitations:

    • Text: 300 characters

    • Photos: Up to 4 per post

    Special Considerations:

    • Decentralized platform in beta stage

    • API access requires developer invitation

    • Custom domains and handles supported

    • Limited media format support

    Example:

    • Cross-Platform Posting

      • Provide network-specific overrides under networks for optimal formatting.

      • Adjust media dimensions to each platform’s specs.

    • - Detailed information about different content formats

    • - Guide to uploading and managing media files

    • - Options for publishing to different networks

    Link posts

  • Carousel posts

  • Stories

  • Reels

    Reels: 3-90 seconds

    Polls

    GIFs limited to 15MB

    Document posts (PDFs)

    Shorts need to be shot vertically and be up to 3 minutes long.

    Gif Posts

    1080x1080px

    1:1 to 4:5

    8MB

    Twitter

    1200x675px

    16:9

    5MB

    LinkedIn

    1200x627px

    1.91:1

    5MB

    Pinterest

    1000x1500px

    2:3

    20MB

    Google Business

    1200x900px

    4:3

    5MB

    Telegram

    1280x720px

    16:9

    10MB

    Mastodon

    1200x900px

    4:3

    Server dependent

    Threads

    1080x1080px

    1:1 to 4:5

    8MB

    Bluesky

    1200x675px

    16:9

    5MB

    Instagram

    1080x1920px

    9:16

    3s - 60m

    650MB

    Twitter

    1280x720px

    16:9

    0.5s - 140s

    512MB

    LinkedIn

    1920x1080px

    16:9

    3s - 15m

    5GB

    Pinterest

    1080x1920px

    9:16

    4s - 15m

    2GB

    TikTok

    1080x1920px

    9:16

    3s - 10m

    500MB

    YouTube

    1920x1080px

    16:9

    No minimum - 12h

    256GB

    Telegram

    1280x720px

    16:9

    No limits

    2GB

    Threads

    1080x1920px

    9:16

    3s - 5m

    650MB

    Tailor text length to char limits.

  • Platform Selection

    • Choose networks based on audience and content type.

    • Leverage visual platforms (Instagram, Pinterest) for images/video-heavy campaigns.

    • Use LinkedIn for professional announcements; Facebook/Instagram for broad reach.

  • Error Prevention

    • Pre-validate media compatibility via upload responses’ validity flags.

    • Poll job status to catch and handle errors early.

  • facebook

    status, photo, video, link, carousel

    Images, videos, links

    10,000

    Instagram

    instagram

    photo, video, carousel, story, reel

    Images, videos

    2,200

    Twitter/X

    twitter

    status, photo, video, link

    Images, videos, links, polls

    280 (25,000 for premium)

    LinkedIn

    linkedin

    status, photo, video, link, document, polls

    Images, videos, documents, links

    3,000

    Pinterest

    pinterest

    photo, video

    Images, videos, links

    500

    Google Business

    google

    status, photo, video, link

    Images, videos, links

    1,500

    TikTok

    tiktok

    video, single or multi-photo/carousel posts

    Videos

    2,200

    YouTube

    youtube

    video, shorts

    Videos

    No fixed limit (100 chars min)

    Telegram

    telegram

    status, photo, video, link

    Images, videos, links

    4,096

    Mastodon

    mastodon

    status, photo, video, link, polls, gif

    Images, videos, links

    500+ (server dependent)

    Threads

    threads

    status, photo, video

    Images, videos

    500

    Bluesky

    bluesky

    status, photo, video

    Images, videos

    300

    Network

    Optimal Dimensions

    Aspect Ratio

    Max File Size

    Facebook

    1200x630px

    1.91:1

    8MB

    Network

    Optimal Dimensions

    Aspect Ratio

    Duration

    Max File Size

    Facebook

    1280x720px

    16:9

    1s - 240m

    Network-Specific Details

    Facebook

    Instagram

    Twitter/X

    LinkedIn

    Pinterest

    Google Business Profile

    TikTok

    YouTube

    Telegram

    Mastodon

    Threads

    Bluesky

    Media Specifications

    Image Requirements

    Video Requirements

    Best Practices

    Related Topics

    Content Types
    Media Handling
    Publishing Methods

    Instagram

    10GB

    "facebook": {
      "type": "status",
      "text": "Facebook-specific content with more detailed formatting"
    }
    "instagram": {
      "type": "carousel",
      "text": "Instagram caption with #hashtags",
      "media": [
        {"id": "media_id_1", "type": "image"},
        {"id": "media_id_2", "type": "image"}
      ]
    }
    "twitter": {
      "type": "status",
      "text": "Concise Twitter post with #hashtags and @mentions"
    }
    "linkedin": {
      "type": "status",
      "text": "**Professional announcement** with formatted text:\n\n• Point one\n• Point two\n• Point three"
    }
    "pinterest": {
      "type": "photo",
      "text": "Pin description with #hashtags",
      "board_id": "board_id_here",
      "media": [{"id": "media_id", "type": "image"}]
    }
    "google": {
      "type": "status",
      "text": "Local business update with important information",
      "location_id": "location_id_here",
      "cta": {
        "type": "LEARN_MORE",
        "url": "https://example.com/details"
      }
    }
    "tiktok": {
      "type": "video",
      "text": "Caption with #hashtags #fyp",
      "media": [{"id": "video_id", "type": "video"}]
    }
    "youtube": {
      "type": "video",
      "text": "Video description with timestamps and links",
      "title": "Video Title Here",
      "media": [{"id": "video_id", "type": "video"}],
      "privacy": "public",
      "category": "22"  // People & Blogs category
    }
    "telegram": {
      "type": "status",
      "text": "Telegram message with *bold* and _italic_ formatting",
      "disable_notification": false
    }
    "mastodon": {
      "type": "status",
      "text": "Mastodon post with #hashtags",
      "visibility": "public",
      "content_warning": "Optional content warning"
    }
    "threads": {
      "type": "status",
      "text": "Threads update with conversational tone"
    }
    "bluesky": {
      "type": "status",
      "text": "Bluesky post with limited characters but #tags",
      "media": [{"id": "image_id", "type": "image"}]
    }

    Get Current User

    get

    Retrieves information about the currently authenticated user.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Unique identifier for the user

    Example: 5b1ec026db27977424e8599e
    emailstring · emailOptional

    Email address of the user

    Example: ervintorra@example.com
    namestringOptional

    Full name of the user

    Example: ervintorra
    first_namestringOptional

    First name of the user

    Example: Ervin
    picturestringOptional

    URL to the profile picture of the user

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/users/me

    List Workspaces

    get

    Retrieves a list of all workspaces that the authenticated user has access to.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Unique identifier for the workspace

    Example: 61a7c2e4f9e8c3b2d1e0f9a8
    idstringOptional

    Unique identifier for the owner

    Example: 5b1ec026db27977424e8599e
    emailstringOptional

    Email address of the owner

    Example: ervintorra@example.com
    namestringOptional

    Username of the owner

    Example: ervintorra
    first_namestringOptional

    First name of the owner

    Example: Ervin
    picturestringOptional

    URL to the owner's profile picture

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png
    namestringOptional

    The workspace's display name

    Example: Marketing Team
    membersobject[]Optional

    List of users with access to the workspace

    planstringOptional

    Subscription plan of the workspace

    Example: business
    picturestringOptional

    URL to the workspace's logo

    Example: https://publer-dev.s3.amazonaws.com/uploads/logos/marketing_team_logo.png
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/workspaces

    List Media

    get

    Retrieves a paginated list of media items from the user's library. The endpoint supports filtering by various parameters and can also retrieve specific media items by their IDs.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Query parameters
    idsstring[]Optional

    Specific media IDs to retrieve. If provided, pagination and other filters are ignored

    pageintegerOptional

    Page number for pagination (0-based)

    itemsstring · enumOptionalPossible values:
    usedboolean[]Required

    Filter by used status

    itemsstring · enumOptionalPossible values:
    searchstringOptional

    Search term to filter media by name or caption

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve media from

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Unique identifier for the media

    Example: 5f5fe854421aa9792e762b70
    typestring · enumOptional

    Type of media

    Example: photoPossible values:
    namestringOptional

    Name of the media

    Example: Beach sunset
    captionstringOptional

    Caption for the media

    Example: Beautiful sunset at the beach
    pathstringOptional

    URL to the full media

    Example: https://cdn.publer.com/uploads/photos/5f5fe854421aa9792e762b70.jpg
    idstringOptional

    Unique identifier for the thumbnail

    Example: 5f6a1234421aa9792e762b71
    smallstringOptional

    URL to the small thumbnail

    realstringOptional

    URL to the real thumbnail

    created_atstring · date-timeOptional

    Creation timestamp

    Example: 2023-05-15T10:30:00Z
    updated_atstring · date-timeOptional

    Last update timestamp

    Example: 2023-05-15T10:30:00Z
    favoritebooleanOptional

    Whether the media is marked as favorite

    Example: true
    in_librarybooleanOptional

    Whether the media is saved in the library

    totalintegerOptional

    Total count of media items matching the query (without pagination)

    Example: 10
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/media

    List Accounts

    get

    Retrieves a list of social media accounts available in the specified workspace.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve accounts from

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Unique identifier for the account

    Example: 63c675b54e299e9cf2b667ea
    providerstring · enumOptional

    The social network provider

    Example: blueskyPossible values:
    namestringOptional

    The display name of the social media account

    Example: Tech News Daily
    social_idstringOptional

    Unique identifier for the account on the social media platform

    Example: at://did:plc:q6gjnaw2blty4crticxkmujt/app.bsky.feed.post/3kje3rifpm22n
    picturestringOptional

    URL to the account's avatar/logo

    Example: https://publer-dev.s3.amazonaws.com/uploads/avatars/bluesky_profile.jpg
    typestring · enumOptional

    Account type

    Example: profilePossible values:
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/accounts

    Delete Multiple Posts

    delete

    Deletes one or multiple posts from the workspace specifying exact post IDs. Authorization rules apply to ensure users can only delete posts they have permission to delete.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Query parameters
    post_idsstring[]Required

    Array of post IDs to delete. Can include both MongoDB ObjectIDs and PostgreSQL IDs.

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace containing the posts

    Responses
    200

    Posts deleted successfully

    application/json
    deleted_idsstring[]Optional

    Array of IDs of successfully deleted posts

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    delete/posts

    Update Post

    put

    Updates an existing post. The behavior differs depending on whether the post is already published or not.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Path parameters
    idstringRequired

    ID of the post to update

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace containing the post

    Body
    textstringRequired

    The main content text of the post

    titlestringOptional

    Title for the post (used in some networks)

    Responses
    200

    Post updated successfully

    application/json
    idstringOptional

    Unique identifier for the post

    Example: 68176f0e8bee9dc9b0ce3427
    textstringOptional

    Post text content

    Example: Check out our new product launch!
    statestringOptional

    Current state of the post

    Example: scheduled
    typestringOptional

    Type of post

    Example: photo
    account_idstringOptional

    ID of the social account

    Example: 63c675b54e299e9cf2b667ea
    idstringOptionalExample: 63c675b54e299e9cf2b667ea
    typestringOptionalExample: facebook_page
    namestringOptionalExample: My Business Page
    picturestringOptionalExample: https://graph.facebook.com/123456789/picture
    idstringOptionalExample: 5b1ec026db27977424e8599e
    namestringOptionalExample: ervintorra
    picturestringOptionalExample: https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png
    scheduled_atstringOptional

    Scheduled publication time

    Example: 2025-05-15T14:30:00.000+02:00
    created_atstringOptional

    Creation timestamp

    Example: 2025-04-28T10:15:23.000+02:00
    updated_atstringOptional

    Last update timestamp

    Example: 2025-04-29T11:30:45.000+02:00
    post_linkstringOptional

    Link to the published post on the social network

    Example: https://facebook.com/post/123456789
    idstringOptionalExample: 66fba4234e299e531f5dc100
    typestringOptionalExample: image
    urlstringOptionalExample: https://publer-media.s3.amazonaws.com/uploads/images/product-launch.jpg
    alt_textstringOptionalExample: Product launch announcement image
    urlstringOptionalExample: https://example.com/product-launch
    titlestringOptionalExample: New Product Launch
    descriptionstringOptionalExample: Check out our latest product innovation
    image_urlstringOptionalExample: https://example.com/images/product.jpg
    idstringOptionalExample: 607c2f9a5e2c3d0789abcdef
    namestringOptionalExample: Product Launch
    colorstringOptionalExample: #FF5733
    autobooleanOptional

    Whether this post was auto-scheduled

    solobooleanOptionalExample: true
    gapintegerOptionalExample: 2
    gap_freqstringOptionalExample: Week
    start_datestringOptionalExample: 2025-06-01
    expire_countintegerOptionalExample: 3
    frequencystringOptionalExample: Week
    repeat_everyintegerOptionalExample: 1
    weekdaysstring[]OptionalExample: ["Monday"]
    start_datestringOptionalExample: 2025-06-02T09:00:00.000Z
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Forbidden - You cannot update a post that has been published with approval

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    422

    Unprocessable Entity - Error message explaining why the post couldn't be updated

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    put/posts/{id}

    Get Analytics Members Data

    get

    Retrieves analytics data for workspace members showing their posting activity and engagement metrics.

    Authorizations
    Query parameters
    fromstring · dateRequired

    Start date for analytics data range (YYYY-MM-DD format). Filters data from this date onwards

    Example: {"value":"2024-01-01"}
    tostring · dateRequired

    End date for analytics data range (YYYY-MM-DD format). Filters data up to this date

    Example: {"value":"2024-12-31"}
    account_idstringOptional

    Optional account ID to filter analytics data for a specific social media account

    Example: {"value":"63c675b54e299e9cf2b667ea"}
    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve members from

    Responses
    200

    Members analytics data with performance metrics

    application/json

    List of members with their analytics data

    engagementsintegerOptional

    Total engagements (likes + comments + shares + post clicks) for the member

    Example: 1250
    postsintegerOptional

    Total number of posts created by the member

    Example: 42
    reachintegerOptional

    Total reach for the member's posts (only included for supported account types)

    Example: 15000
    account_idsstring[]Optional

    List of account IDs the member posted to

    Example: ["63c675b54e299e9cf2b667ea","63c675b54e299e9cf2b667eb"]
    idstringOptional

    User ID

    Example: 5b1ec026db27977424e8599e
    namestringOptional

    User's display name

    Example: John Smith
    picturestringOptional

    URL to user's profile picture

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/members

    Search for Facebook locations

    get

    Search and retrieve Facebook locations based on a query string.

    Authorizations
    Query parameters
    qstringRequired

    Search query for Facebook locations

    Responses
    200

    List of Facebook locations matching the search query

    application/json
    idstringRequired

    Unique identifier of the location

    namestringRequired

    Name of the location

    infostringOptional

    Additional information about the location

    Example: Main office in New York City ⋅ 1,030 follow this
    verifiedbooleanOptional

    Whether the location is verified

    Example: true
    403

    Authentication failure or invalid token

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    422

    Invalid request or Facebook API error

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    get/locations/facebook

    Search for Instagram locations

    get

    Search and retrieve Instagram locations based on a query string.

    Authorizations
    Query parameters
    qstringRequired

    Search query for Instagram locations

    Responses
    200

    List of Instagram locations matching the search query

    application/json
    idstringRequired

    Unique identifier of the location

    namestringRequired

    Name of the location

    infostringOptional

    Additional information about the location

    Example: Main office in New York City ⋅ 1,030 follow this
    verifiedbooleanOptional

    Whether the location is verified

    Example: true
    403

    Authentication failure, invalid token, or no Instagram account with Facebook login

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    422

    Invalid request or Instagram API error

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    get/locations/instagram

    Search for Threads locations

    get

    Search and retrieve Threads locations based on a query string.

    Authorizations
    Query parameters
    qstringRequired

    Search query for Threads locations

    Responses
    200

    List of Threads locations matching the search query

    application/json
    idstringRequired

    Unique identifier of the location

    namestringRequired

    Name of the location

    infostringOptional

    Additional information about the location

    Example: Main office in New York City
    403

    Authentication failure, invalid token, or no Threads account

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    422

    Invalid request or Threads API error

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    get/locations/threads

    Get Signatures for Accounts

    get

    Retrieves signatures associated with specified accounts in a workspace.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Path parameters
    workspace_idstringRequired

    ID of the workspace to retrieve signatures from

    Query parameters
    accountsstring[]Required

    Array of account IDs to filter signatures by

    Responses
    200

    Successful operation

    application/json
    account_idstringOptional

    ID of the account

    idstringOptional

    Unique identifier for the signature

    labelstringOptional

    Label of the signature

    textstringOptional

    Content of the signature

    defaultbooleanOptional

    Whether this is the default signature

    in_photo_captionsbooleanOptional

    Whether this signature is included in photo captions

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/workspaces/{workspace_id}/signatures

    Get Media Options

    get

    Retrieves albums and watermarks for specified accounts in a workspace.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Path parameters
    workspace_idstringRequired

    ID of the workspace to retrieve media options from

    Query parameters
    accountsstring[]Required

    Array of account IDs to filter media options by

    Responses
    200

    Successful operation

    application/json
    idstringOptional
    idstringOptional
    namestringOptional
    typestringOptional
    idstringOptional
    namestringOptional
    opacitynumberOptional
    sizenumberOptional
    positionstringOptional
    defaultbooleanOptional
    imagestring · urlOptional
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/workspaces/{workspace_id}/media_options

    Get Best Times to Post for Account

    get

    Retrieves the optimal posting times for a specific social media account based on historical analytics data. Returns a heatmap of posting performance across days of the week and hours of the day, tailored to the specified account's audience engagement patterns.

    Authorizations
    Path parameters
    account_idstringOptional

    Social media account ID to analyze posting times for. When provided, analysis is specific to this account's performance data

    Query parameters
    competitorsstring · enumOptional

    Include competitor data in best times analysis. Set to 'true' to analyze competitor posting patterns

    Possible values:
    competitor_idstringOptional

    Specific competitor ID to analyze. Used in conjunction with competitors=true parameter

    fromstring · dateRequired

    Start date for analytics data range (YYYY-MM-DD format). Filters data from this date onwards

    Example: {"value":"2024-01-01"}
    tostring · dateRequired

    End date for analytics data range (YYYY-MM-DD format). Filters data up to this date

    Example: {"value":"2024-12-31"}
    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve best times from

    Responses
    200

    Best times to post data organized by day of the week and hour for the specific account

    application/json

    Heatmap data showing optimal posting times with scores for each hour of each day, specific to the account's audience

    Other propertiesnumber[]Optional

    Array of 24 hourly scores (0-23) for each day of the week

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/{account_id}/best_times

    List Posts

    get

    Retrieves a list of posts based on the specified filters.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Query parameters
    statestring · enumOptional

    Filter by post state

    Available options:

    all, scheduled, scheduled_approved, scheduled_pending, scheduled_declined, scheduled_reauth, scheduled_locked, published, published_posted, published_deleted, published_hidden, draft, draft_dated, draft_undated, draft_private, draft_public, failed, recycling, recycling_active, recycling_paused, recycling_expired, recycling_failed, recycling_pending, recycling_declined, recycling_reauth, recycling_locked, recurring

    Possible values:
    fromstring · dateOptional

    Filter posts scheduled/published after this date

    • Example: 2025-05-15

    Required if to is provided

    tostring · dateOptional

    Filter posts scheduled/published before this date

    • Example: 2025-05-15

    Required if from is provided

    pageintegerOptional

    Page number for pagination

    account_idsstring[]Optional

    Filter posts by multiple account IDs

    querystringOptional

    Search query to filter posts by content

    postTypestring · enumOptional

    Filter by post type

    Available options:

    status, link, photo, gif, video, reel, story, short, poll, document, carousel, article

    Possible values:
    member_idstringOptional

    Filter posts by team member ID

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve posts from

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Unique identifier for the post

    Example: 68176f0e8bee9dc9b0ce3427
    textstringOptional

    Post text content

    Example: Check out our new product launch!
    urlstringOptional

    URL for link posts

    Example: https://example.com/product-launch
    statestringOptional

    Current state of the post

    Example: scheduled
    typestringOptional

    Type of post

    Example: status
    account_idstringOptional

    ID of the social account

    Example: 63c675b54e299e9cf2b667ea
    idstringOptionalExample: 5b1ec026db27977424e8599e
    namestringOptionalExample: ervintorra
    picturestringOptionalExample: https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png
    scheduled_atstringOptional

    Scheduled publication time

    Example: 2025-05-15T14:30:00.000+02:00
    post_linkstringOptional

    Link to the published post on the social network

    Example: https://facebook.com/post/123456789
    has_mediabooleanOptional

    Indicates if the post contains media

    Example: true
    networkstringOptional

    Social network for this post

    Example: facebook
    totalintegerOptional

    Total number of posts matching the query

    Example: 42
    pageintegerOptional

    Current page number

    Example: 1
    per_pageintegerOptional

    Number of posts per page

    Example: 20
    total_pagesintegerOptional

    Total number of pages

    Example: 3
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/posts

    Schedule posts

    post

    Schedule one or more posts for publishing. Supports immediate publishing, scheduled publishing, auto-scheduling, recurring posts, and more.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to schedule posts in

    Body
    statestring · enumRequired

    State of the posts

    Possible values:
    typestring · enumRequired

    Content type for Facebook

    Possible values:
    textstringOptional

    Post text content

    Example: Check out our new product launch!
    titlestringOptional

    Video title (for videos, truncated to 255 chars)

    Example: Amazing Product Launch Video
    excerptstringOptional

    Post excerpt

    Example: Short description of the post
    urlstringOptional

    Link URL for link posts

    Example: https://example.com/product
    post_idstringOptional

    Facebook post ID after publishing

    Example: 123456789_987654321
    post_linkstringOptional

    Facebook post URL after publishing

    Example: https://www.facebook.com/123456789_987654321
    questionstringOptional

    Poll question

    Example: What's your favorite feature?
    durationintegerOptional

    Poll duration in hours

    Example: 24
    typestring · enumOptional

    Network-specific content type

    Example: reelPossible values:
    text_format_preset_idstring · enumOptional

    Background color for the post

    Example: 1365883126823705Possible values:
    feedbooleanOptional

    Whether to share the reel to feed

    Example: true
    reminderbooleanOptional

    Use reminder publishing instead of API

    audiostringOptional

    Audio name for the reel

    startstringOptional

    Start time for events

    endstringOptional

    End time for events

    couponstringOptional

    Coupon code

    termsstringOptional

    Terms and conditions

    privacystringOptional

    Privacy setting

    commentbooleanOptional

    Allow comments

    Example: true
    duetbooleanOptional

    Allow duets

    Example: true
    stitchbooleanOptional

    Allow stitch

    Example: true
    promotionalbooleanOptional

    Mark as promotional content

    paidbooleanOptional

    Mark as paid partnership

    languagestringOptional

    Content language

    auto_add_musicbooleanOptional

    Auto add music

    idstringOptional

    Sponsor Facebook ID

    namestringOptional

    Sponsor name

    verifiedbooleanOptional

    Whether sponsor is verified

    boostbooleanOptional

    Whether post can be boosted

    idstringOptional

    Community ID

    namestringOptional

    Community name

    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    urlstringRequired

    URL of the link

    Example: http://publer.com
    provider_displaystringOptional

    Display name of the link provider (typically domain name)

    Example: publer.com
    original_descriptionstringOptional

    Original meta description of the linked webpage

    Example: Boost your social media strategy with Publer's suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.
    original_titlestringOptional

    Original meta title of the linked webpage

    Example: Powerful Social Media Management & Scheduling Tools | Publer
    original_imagesstring · uri[]Optional

    Array of original images found on the linked webpage

    Example: ["https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png","https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png"]
    original_urlstringOptional

    Original URL without protocol

    Example: publer.com
    descriptionstringRequired

    Description to use in the link preview (can be customized)

    Example: Boost your social media strategy with Publer's suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.
    titlestringRequired

    Title to use in the link preview (can be customized)

    Example: Powerful Social Media Management & Scheduling Tools | Publer
    imagesstring · uri[]Required

    Images to use in the link preview (can be customized)

    Example: ["https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png","https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png"]
    default_imageintegerOptional

    Index of the default image to display in the preview (0-based)

    captionstringOptional

    Additional caption for the link

    call_to_actionstring · enumOptional

    Call-to-action button type for the link preview

    Example: NO_BUTTONPossible values:
    phone_numberstringOptional

    Phone number to use with CALL_NOW call-to-action button

    customizedbooleanOptional

    Whether this sublink has been customized from the original link preview

    Example: true
    tagsstring[]Optional

    Post tags

    categoriesstring[]Optional

    Post categories

    pathstringOptional

    Path to featured media

    optionsstring[]Optional

    Poll options

    typestring · enumRequired

    Content type for Instagram

    Possible values:
    textstringOptional

    Caption text

    Example: New product launch! #newproduct #launch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    media_idstringOptional

    Media ID for this slide

    Example: 66fba4234e299e531f5dc100
    alt_textstringOptional

    Accessibility description for this slide

    Example: Product features diagram
    captionstringOptional

    Caption for this specific slide

    Example: Feature highlight: AI integration
    firstCommentstringOptional

    Text for first comment (often used for hashtags)

    Example: #product #innovation #tech #newrelease
    typestring · enumOptional

    Network-specific content type

    Example: reelPossible values:
    // Reel-specific propertiesanyOptional
    audiostringOptional

    Audio name for the reel

    feedbooleanOptional

    Whether to share the reel to feed

    typestring · enumRequired

    Content type for Twitter/X

    Possible values:
    textstringOptional

    Tweet text

    Example: Exciting news! Check out our new product launch 🚀 #ProductLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    // End of Poll-specific propertiesanyOptional
    replySettingsstring · enumOptional

    Who can reply to this tweet

    Example: everyonePossible values:
    typestring · enumOptional

    Specific tweet type for long posts

    Example: long_postPossible values:
    idstringOptional

    Community ID

    Example: 1234567890123456789
    namestringOptional

    Community name

    Example: Product Launch Community
    idstringOptional

    Place ID for geo tagging

    Example: 01a9a39529b27f36
    namestringOptional

    Location name

    Example: San Francisco, CA
    typestring · enumRequired

    Content type for LinkedIn

    Possible values:
    textstringOptional

    Post text content

    Example: We're excited to announce our latest product innovation! #ProductLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    idstringOptional

    Document ID (from upload)

    Example: 66fba4234e299e531f5dc110
    titlestringOptional

    Document title

    Example: Product Launch Presentation
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    questionstringOptional

    Poll question (required for LinkedIn when type='poll')

    Example: What's your opinion on our new product?
    typestring · enumOptional

    PDF document type

    Example: documentPossible values:
    typestring · enumRequired

    Content type for Pinterest

    Possible values:
    textstringOptional

    Pin description

    Example: Check out our new product design! Perfect for modern homes.
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    boardIdstringOptional

    Pinterest board ID to pin to

    Example: 12345678901234567
    titlestringOptional

    Title of the pin

    Example: New Product Design
    typestring · enumRequired

    Content type for Google Business

    Possible values:
    textstringOptional

    Post text content

    Example: Visit our store to check out the new product line!
    titlestringOptional

    Post title

    Example: New Product Line Available
    urlstringOptional

    URL to link to

    Example: https://example.com/new-product
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    typestring · enumOptional

    Content type

    Example: eventPossible values:
    titlestringOptional

    Event title

    Example: Product Launch Event
    startstring · date-timeOptional

    Event start time

    Example: 2025-05-15T14:30:00Z
    endstring · date-timeOptional

    Event end time

    Example: 2025-05-15T16:30:00Z
    // Offer-specific propertiesanyOptional
    couponstringOptional

    Coupon code for the offer

    Example: SAVE20
    termsstringOptional

    Terms and conditions Url for the offer

    Example: https://example.com/terms
    // End of Offer-specific propertiesanyOptional
    typestring · enumRequired

    Content type for YouTube

    Possible values:
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    titlestringOptional

    Video title

    Example: New Product Launch - Full Reveal
    descriptionstringOptional

    Video description

    Example: In this video, we reveal our latest product innovation. Learn about all the features and see it in action! Follow us on social media: Website: https://example.com
    tagsstring[]Optional

    Video tags

    Example: ["product launch","innovation","tech","new release"]
    categorystringOptional

    Video category ID

    Example: 28
    privacystring · enumOptional

    Privacy setting

    Example: publicPossible values:
    isShortbooleanOptional

    Whether this is a YouTube Short

    typestring · enumOptional

    Network-specific content type

    Example: shortPossible values:
    // Youtube Short-specific propertiesanyOptional
    privacystring · enumOptional

    Privacy setting for the short

    Example: publicPossible values:
    typestring · enumRequired

    Content type for TikTok

    Possible values:
    textstringOptional

    Caption text

    Example: Check out our new product! #FYP #ProductLaunch #Innovation
    titlestringOptional

    Video title (for video type)

    Example: Amazing Product Demo
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    media_idstringOptional

    Media ID for this slide

    Example: 66fba4234e299e531f5dc100
    alt_textstringOptional

    Accessibility description for this slide

    Example: Product features diagram
    captionstringOptional

    Caption for this specific slide

    Example: Feature highlight: AI integration
    soundIdstringOptional

    TikTok sound ID to use

    Example: 7021751042242615042
    duetWithstringOptional

    Video ID to duet with

    privacystring · enumOptional

    Privacy level for the post

    Example: PUBLIC_TO_EVERYONEPossible values:
    commentbooleanOptional

    Enable comments (true = enable, false = disable)

    Example: true
    duetbooleanOptional

    Enable duets

    Example: true
    stitchbooleanOptional

    Enable stitch

    Example: true
    promotionalbooleanOptional

    Mark as branded/promotional content

    paidbooleanOptional

    Mark as paid partnership

    auto_add_musicbooleanOptional

    Auto add music to photo posts

    reminderbooleanOptional

    Use reminder publishing instead of direct API

    typestring · enumRequired

    Content type for WordPress

    Example: articlePossible values:
    textstringOptional

    Post text content

    Example: TEST Header 2,3,4 Some description\
    excerptstringOptional

    Short excerpt of the article

    Example: dqwwqdwq
    titlestringOptional

    Article title

    Example: Title
    urlstringOptional

    Article URL slug

    Example: Slug
    post_linkstring · nullableOptional

    Link to published post

    sourcestring · enumOptional

    Source of the post

    Example: schedulePossible values:
    statestring · enumOptional

    Post state

    Example: draftPossible values:
    idstringRequired

    Block unique identifier

    Example: lE2URm6rrf
    typestring · enumRequired

    Block type

    Possible values:
    textstringOptional

    Text content for paragraph, header, quote blocks

    levelintegerOptional

    Header level (1-6)

    stylestring · enumOptional

    List style

    Possible values:
    itemsstring[]Optional

    List items

    urlstringOptional

    Media URL

    typestring · enumOptional

    Media type

    Possible values:
    stretchedbooleanOptional

    Whether media is stretched

    withHeadingsbooleanOptional

    Whether table has headings

    contentstring[]Optional

    Table content

    codestringOptional

    Code content

    htmlstringOptional

    HTML content

    captionstringOptional

    Quote caption/author

    categoriesstring[]Optional

    Article category IDs

    Example: ["44"]
    tagsstring[]Optional

    Article tag IDs

    Example: ["1589"]
    pathstringOptional

    Path to featured media

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/684a8b36912445e019f68384.jpg
    typestring · enumRequired

    Content type for WordPress

    Example: articlePossible values:
    textstringOptional

    Post text content

    Example: TEST Header 2,3,4 Some description\
    excerptstringOptional

    Short excerpt of the article

    Example: dqwwqdwq
    titlestringOptional

    Article title

    Example: Title
    urlstringOptional

    Article URL slug

    Example: Slug
    post_linkstring · nullableOptional

    Link to published post

    sourcestring · enumOptional

    Source of the post

    Example: schedulePossible values:
    statestring · enumOptional

    Post state

    Example: draftPossible values:
    idstringRequired

    Block unique identifier

    Example: lE2URm6rrf
    typestring · enumRequired

    Block type

    Possible values:
    textstringOptional

    Text content for paragraph, header, quote blocks

    levelintegerOptional

    Header level (1-6)

    stylestring · enumOptional

    List style

    Possible values:
    itemsstring[]Optional

    List items

    urlstringOptional

    Media URL

    typestring · enumOptional

    Media type

    Possible values:
    stretchedbooleanOptional

    Whether media is stretched

    withHeadingsbooleanOptional

    Whether table has headings

    contentstring[]Optional

    Table content

    codestringOptional

    Code content

    htmlstringOptional

    HTML content

    captionstringOptional

    Quote caption/author

    categoriesstring[]Optional

    Article category IDs

    Example: ["44"]
    tagsstring[]Optional

    Article tag IDs

    Example: ["1589"]
    pathstringOptional

    Path to featured media

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/684a8b36912445e019f68384.jpg
    typestring · enumRequired

    Content type for Telegram

    Possible values:
    textstringOptional

    Message text

    Example: 🚀 *New Product Announcement* Check out our latest innovation that will transform your workflow!
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    parseModestring · enumOptional

    Message parse mode

    Example: MarkdownPossible values:
    disableNotificationbooleanOptional

    Whether to send the message silently

    disableWebPagePreviewbooleanOptional

    Whether to disable link previews

    typestring · enumRequired

    Content type for Mastodon

    Possible values:
    textstringOptional

    Post text content

    Example: Excited to announce our new product! #ProductLaunch #Innovation
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    // End of Poll-specific propertiesanyOptional
    visibilitystring · enumOptional

    Post visibility

    Example: publicPossible values:
    sensitivebooleanOptional

    Mark media as sensitive

    spoilerTextstringOptional

    Content warning text

    typestring · enumRequired

    Content type for Threads

    Possible values:
    textstringOptional

    Post text content

    Example: Just launched our new product! Check it out 👀 #NewLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    replyTostringOptional

    ID of the thread to reply to

    typestring · enumRequired

    Content type for Bluesky

    Possible values:
    textstringOptional

    Post text content

    Example: Excited to share our latest product innovation! Check it out: https://example.com/product
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    replyTostringOptional

    ID of the post to reply to

    labelsstring[]Optional

    Self-labeled content warnings or categories

    Example: ["product","announcement"]
    idstringRequired

    Account identifier

    Example: 63c675b54e299e9cf2b667ea
    scheduled_atstring · date-timeOptional

    Time to schedule the post

    Example: 2025-05-17T16:19+02:00
    labelsstring[]Optional

    List of labels for the post

    Example: []
    previewed_mediabooleanOptional

    Whether media has been previewed

    Example: true
    textstringOptional

    Custom text for the shared post. If not provided, the original post text will be used.

    account_idsstring[]Optional

    Array of account IDs to share the post with

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    textstringOptional

    The text content of the comment

    languagestringOptional

    The language of the comment

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    typestring · enumOptional

    Type of media (photo, video, gif)

    Possible values:
    pathstringOptional

    Path to the media file

    captionstringOptional

    Caption for the media

    thumbnailstringOptional

    Thumbnail for video media

    realstringOptional

    Full-size thumbnail

    smallstringOptional

    Small thumbnail

    hidebooleanOptional

    If true, the post will be hidden instead of deleted (platform-dependent)

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    solobooleanOptional

    Whether to recycle as a solo post

    Example: true
    gapintegerOptional

    Gap between recycles

    Example: 2
    gap_freqstring · enumOptional

    Frequency of the gap

    Example: WeekPossible values:
    start_datestring · dateOptional

    Start date for recycling

    Example: 2025-05-24
    expire_countstringOptional

    Number of times to recycle

    Example: 1
    expire_datestring · dateOptional

    Date when recycling expires

    Example: 2025-06-14
    start_datestring · date-timeRequired

    Start date for recurring posts

    Example: 2025-05-05T13:29+02:00
    end_datestring · date-timeRequired

    End date for recurring posts

    Example: 2025-06-21T13:29+02:00
    repeatstring · enumRequired

    Recurrence pattern

    Example: weeklyPossible values:
    days_of_weekinteger[]Optional

    Days of the week (0=Monday, 6=Sunday)

    Example: [1,4,6]
    repeat_rateintegerRequired

    Rate of repetition

    Example: 1
    share_nextbooleanOptional

    Whether to share the post next in queue

    start_datestring · date-timeOptional

    Start date of the range

    Example: 2025-05-31T08:43:00.000Z
    end_datestring · nullableOptional

    End date of the range

    Example: 2025-06-08T08:43:00.000Z
    autobooleanOptional

    Whether to use auto scheduling

    Example: true
    Responses
    200

    Posts scheduled successfully

    application/json
    successbooleanOptional

    Whether the job was created successfully

    Example: true
    job_idstringOptional

    ID of the created job

    Example: 6810dec617eae6d55d7a5e5b
    400

    Invalid scheduling parameters

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    post/posts/schedule

    Create post

    post

    Creates a new social media post. Can be scheduled for immediate publishing, future publishing, or saved as a draft.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to create post in

    Body
    statestring · enumRequired

    State of the posts

    Possible values:
    typestring · enumRequired

    Content type for Facebook

    Possible values:
    textstringOptional

    Post text content

    Example: Check out our new product launch!
    titlestringOptional

    Video title (for videos, truncated to 255 chars)

    Example: Amazing Product Launch Video
    excerptstringOptional

    Post excerpt

    Example: Short description of the post
    urlstringOptional

    Link URL for link posts

    Example: https://example.com/product
    post_idstringOptional

    Facebook post ID after publishing

    Example: 123456789_987654321
    post_linkstringOptional

    Facebook post URL after publishing

    Example: https://www.facebook.com/123456789_987654321
    questionstringOptional

    Poll question

    Example: What's your favorite feature?
    durationintegerOptional

    Poll duration in hours

    Example: 24
    typestring · enumOptional

    Network-specific content type

    Example: reelPossible values:
    text_format_preset_idstring · enumOptional

    Background color for the post

    Example: 1365883126823705Possible values:
    feedbooleanOptional

    Whether to share the reel to feed

    Example: true
    reminderbooleanOptional

    Use reminder publishing instead of API

    audiostringOptional

    Audio name for the reel

    startstringOptional

    Start time for events

    endstringOptional

    End time for events

    couponstringOptional

    Coupon code

    termsstringOptional

    Terms and conditions

    privacystringOptional

    Privacy setting

    commentbooleanOptional

    Allow comments

    Example: true
    duetbooleanOptional

    Allow duets

    Example: true
    stitchbooleanOptional

    Allow stitch

    Example: true
    promotionalbooleanOptional

    Mark as promotional content

    paidbooleanOptional

    Mark as paid partnership

    languagestringOptional

    Content language

    auto_add_musicbooleanOptional

    Auto add music

    idstringOptional

    Sponsor Facebook ID

    namestringOptional

    Sponsor name

    verifiedbooleanOptional

    Whether sponsor is verified

    boostbooleanOptional

    Whether post can be boosted

    idstringOptional

    Community ID

    namestringOptional

    Community name

    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    urlstringRequired

    URL of the link

    Example: http://publer.com
    provider_displaystringOptional

    Display name of the link provider (typically domain name)

    Example: publer.com
    original_descriptionstringOptional

    Original meta description of the linked webpage

    Example: Boost your social media strategy with Publer's suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.
    original_titlestringOptional

    Original meta title of the linked webpage

    Example: Powerful Social Media Management & Scheduling Tools | Publer
    original_imagesstring · uri[]Optional

    Array of original images found on the linked webpage

    Example: ["https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png","https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png"]
    original_urlstringOptional

    Original URL without protocol

    Example: publer.com
    descriptionstringRequired

    Description to use in the link preview (can be customized)

    Example: Boost your social media strategy with Publer's suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.
    titlestringRequired

    Title to use in the link preview (can be customized)

    Example: Powerful Social Media Management & Scheduling Tools | Publer
    imagesstring · uri[]Required

    Images to use in the link preview (can be customized)

    Example: ["https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png","https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png"]
    default_imageintegerOptional

    Index of the default image to display in the preview (0-based)

    captionstringOptional

    Additional caption for the link

    call_to_actionstring · enumOptional

    Call-to-action button type for the link preview

    Example: NO_BUTTONPossible values:
    phone_numberstringOptional

    Phone number to use with CALL_NOW call-to-action button

    customizedbooleanOptional

    Whether this sublink has been customized from the original link preview

    Example: true
    tagsstring[]Optional

    Post tags

    categoriesstring[]Optional

    Post categories

    pathstringOptional

    Path to featured media

    optionsstring[]Optional

    Poll options

    typestring · enumRequired

    Content type for Instagram

    Possible values:
    textstringOptional

    Caption text

    Example: New product launch! #newproduct #launch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    media_idstringOptional

    Media ID for this slide

    Example: 66fba4234e299e531f5dc100
    alt_textstringOptional

    Accessibility description for this slide

    Example: Product features diagram
    captionstringOptional

    Caption for this specific slide

    Example: Feature highlight: AI integration
    firstCommentstringOptional

    Text for first comment (often used for hashtags)

    Example: #product #innovation #tech #newrelease
    typestring · enumOptional

    Network-specific content type

    Example: reelPossible values:
    // Reel-specific propertiesanyOptional
    audiostringOptional

    Audio name for the reel

    feedbooleanOptional

    Whether to share the reel to feed

    typestring · enumRequired

    Content type for Twitter/X

    Possible values:
    textstringOptional

    Tweet text

    Example: Exciting news! Check out our new product launch 🚀 #ProductLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    // End of Poll-specific propertiesanyOptional
    replySettingsstring · enumOptional

    Who can reply to this tweet

    Example: everyonePossible values:
    typestring · enumOptional

    Specific tweet type for long posts

    Example: long_postPossible values:
    idstringOptional

    Community ID

    Example: 1234567890123456789
    namestringOptional

    Community name

    Example: Product Launch Community
    idstringOptional

    Place ID for geo tagging

    Example: 01a9a39529b27f36
    namestringOptional

    Location name

    Example: San Francisco, CA
    typestring · enumRequired

    Content type for LinkedIn

    Possible values:
    textstringOptional

    Post text content

    Example: We're excited to announce our latest product innovation! #ProductLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    idstringOptional

    Document ID (from upload)

    Example: 66fba4234e299e531f5dc110
    titlestringOptional

    Document title

    Example: Product Launch Presentation
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    questionstringOptional

    Poll question (required for LinkedIn when type='poll')

    Example: What's your opinion on our new product?
    typestring · enumOptional

    PDF document type

    Example: documentPossible values:
    typestring · enumRequired

    Content type for Pinterest

    Possible values:
    textstringOptional

    Pin description

    Example: Check out our new product design! Perfect for modern homes.
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    boardIdstringOptional

    Pinterest board ID to pin to

    Example: 12345678901234567
    titlestringOptional

    Title of the pin

    Example: New Product Design
    typestring · enumRequired

    Content type for Google Business

    Possible values:
    textstringOptional

    Post text content

    Example: Visit our store to check out the new product line!
    titlestringOptional

    Post title

    Example: New Product Line Available
    urlstringOptional

    URL to link to

    Example: https://example.com/new-product
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    typestring · enumOptional

    Content type

    Example: eventPossible values:
    titlestringOptional

    Event title

    Example: Product Launch Event
    startstring · date-timeOptional

    Event start time

    Example: 2025-05-15T14:30:00Z
    endstring · date-timeOptional

    Event end time

    Example: 2025-05-15T16:30:00Z
    // Offer-specific propertiesanyOptional
    couponstringOptional

    Coupon code for the offer

    Example: SAVE20
    termsstringOptional

    Terms and conditions Url for the offer

    Example: https://example.com/terms
    // End of Offer-specific propertiesanyOptional
    typestring · enumRequired

    Content type for YouTube

    Possible values:
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    titlestringOptional

    Video title

    Example: New Product Launch - Full Reveal
    descriptionstringOptional

    Video description

    Example: In this video, we reveal our latest product innovation. Learn about all the features and see it in action! Follow us on social media: Website: https://example.com
    tagsstring[]Optional

    Video tags

    Example: ["product launch","innovation","tech","new release"]
    categorystringOptional

    Video category ID

    Example: 28
    privacystring · enumOptional

    Privacy setting

    Example: publicPossible values:
    isShortbooleanOptional

    Whether this is a YouTube Short

    typestring · enumOptional

    Network-specific content type

    Example: shortPossible values:
    // Youtube Short-specific propertiesanyOptional
    privacystring · enumOptional

    Privacy setting for the short

    Example: publicPossible values:
    typestring · enumRequired

    Content type for TikTok

    Possible values:
    textstringOptional

    Caption text

    Example: Check out our new product! #FYP #ProductLaunch #Innovation
    titlestringOptional

    Video title (for video type)

    Example: Amazing Product Demo
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    media_idstringOptional

    Media ID for this slide

    Example: 66fba4234e299e531f5dc100
    alt_textstringOptional

    Accessibility description for this slide

    Example: Product features diagram
    captionstringOptional

    Caption for this specific slide

    Example: Feature highlight: AI integration
    soundIdstringOptional

    TikTok sound ID to use

    Example: 7021751042242615042
    duetWithstringOptional

    Video ID to duet with

    privacystring · enumOptional

    Privacy level for the post

    Example: PUBLIC_TO_EVERYONEPossible values:
    commentbooleanOptional

    Enable comments (true = enable, false = disable)

    Example: true
    duetbooleanOptional

    Enable duets

    Example: true
    stitchbooleanOptional

    Enable stitch

    Example: true
    promotionalbooleanOptional

    Mark as branded/promotional content

    paidbooleanOptional

    Mark as paid partnership

    auto_add_musicbooleanOptional

    Auto add music to photo posts

    reminderbooleanOptional

    Use reminder publishing instead of direct API

    typestring · enumRequired

    Content type for WordPress

    Example: articlePossible values:
    textstringOptional

    Post text content

    Example: TEST Header 2,3,4 Some description\
    excerptstringOptional

    Short excerpt of the article

    Example: dqwwqdwq
    titlestringOptional

    Article title

    Example: Title
    urlstringOptional

    Article URL slug

    Example: Slug
    post_linkstring · nullableOptional

    Link to published post

    sourcestring · enumOptional

    Source of the post

    Example: schedulePossible values:
    statestring · enumOptional

    Post state

    Example: draftPossible values:
    idstringRequired

    Block unique identifier

    Example: lE2URm6rrf
    typestring · enumRequired

    Block type

    Possible values:
    textstringOptional

    Text content for paragraph, header, quote blocks

    levelintegerOptional

    Header level (1-6)

    stylestring · enumOptional

    List style

    Possible values:
    itemsstring[]Optional

    List items

    urlstringOptional

    Media URL

    typestring · enumOptional

    Media type

    Possible values:
    stretchedbooleanOptional

    Whether media is stretched

    withHeadingsbooleanOptional

    Whether table has headings

    contentstring[]Optional

    Table content

    codestringOptional

    Code content

    htmlstringOptional

    HTML content

    captionstringOptional

    Quote caption/author

    categoriesstring[]Optional

    Article category IDs

    Example: ["44"]
    tagsstring[]Optional

    Article tag IDs

    Example: ["1589"]
    pathstringOptional

    Path to featured media

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/684a8b36912445e019f68384.jpg
    typestring · enumRequired

    Content type for WordPress

    Example: articlePossible values:
    textstringOptional

    Post text content

    Example: TEST Header 2,3,4 Some description\
    excerptstringOptional

    Short excerpt of the article

    Example: dqwwqdwq
    titlestringOptional

    Article title

    Example: Title
    urlstringOptional

    Article URL slug

    Example: Slug
    post_linkstring · nullableOptional

    Link to published post

    sourcestring · enumOptional

    Source of the post

    Example: schedulePossible values:
    statestring · enumOptional

    Post state

    Example: draftPossible values:
    idstringRequired

    Block unique identifier

    Example: lE2URm6rrf
    typestring · enumRequired

    Block type

    Possible values:
    textstringOptional

    Text content for paragraph, header, quote blocks

    levelintegerOptional

    Header level (1-6)

    stylestring · enumOptional

    List style

    Possible values:
    itemsstring[]Optional

    List items

    urlstringOptional

    Media URL

    typestring · enumOptional

    Media type

    Possible values:
    stretchedbooleanOptional

    Whether media is stretched

    withHeadingsbooleanOptional

    Whether table has headings

    contentstring[]Optional

    Table content

    codestringOptional

    Code content

    htmlstringOptional

    HTML content

    captionstringOptional

    Quote caption/author

    categoriesstring[]Optional

    Article category IDs

    Example: ["44"]
    tagsstring[]Optional

    Article tag IDs

    Example: ["1589"]
    pathstringOptional

    Path to featured media

    Example: https://publer-dev.s3.amazonaws.com/uploads/photos/684a8b36912445e019f68384.jpg
    typestring · enumRequired

    Content type for Telegram

    Possible values:
    textstringOptional

    Message text

    Example: 🚀 *New Product Announcement* Check out our latest innovation that will transform your workflow!
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    parseModestring · enumOptional

    Message parse mode

    Example: MarkdownPossible values:
    disableNotificationbooleanOptional

    Whether to send the message silently

    disableWebPagePreviewbooleanOptional

    Whether to disable link previews

    typestring · enumRequired

    Content type for Mastodon

    Possible values:
    textstringOptional

    Post text content

    Example: Excited to announce our new product! #ProductLaunch #Innovation
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    // Poll-specific propertiesanyOptional
    optionsstring[]Optional

    Options for poll posts (required when type='poll')

    Example: ["Yes","No","Maybe"]
    durationintegerOptional

    Duration of the poll in days (required when type='poll')

    Example: 7
    // End of Poll-specific propertiesanyOptional
    visibilitystring · enumOptional

    Post visibility

    Example: publicPossible values:
    sensitivebooleanOptional

    Mark media as sensitive

    spoilerTextstringOptional

    Content warning text

    typestring · enumRequired

    Content type for Threads

    Possible values:
    textstringOptional

    Post text content

    Example: Just launched our new product! Check it out 👀 #NewLaunch
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    replyTostringOptional

    ID of the thread to reply to

    typestring · enumRequired

    Content type for Bluesky

    Possible values:
    textstringOptional

    Post text content

    Example: Excited to share our latest product innovation! Check it out: https://example.com/product
    idstringOptional

    Media ID (from upload)

    Example: 66fba4234e299e531f5dc100
    typestring · enumOptionalExample: imagePossible values:
    alt_textstringOptional

    Accessibility description for images

    Example: Product image with blue background
    urlstringOptional

    URL to link to

    Example: https://example.com/product-launch
    titlestringOptional

    Title of the link

    Example: New Product Launch
    descriptionstringOptional

    Description of the link

    Example: Check out our latest product innovation
    image_idstringOptional

    ID of the image to use for link preview

    Example: 66fba4234e299e531f5dc102
    replyTostringOptional

    ID of the post to reply to

    labelsstring[]Optional

    Self-labeled content warnings or categories

    Example: ["product","announcement"]
    idstringRequired

    Account identifier

    Example: 63c675b54e299e9cf2b667ea
    scheduled_atstring · date-timeOptional

    Time to schedule the post

    Example: 2025-05-17T16:19+02:00
    labelsstring[]Optional

    List of labels for the post

    Example: []
    previewed_mediabooleanOptional

    Whether media has been previewed

    Example: true
    textstringOptional

    Custom text for the shared post. If not provided, the original post text will be used.

    account_idsstring[]Optional

    Array of account IDs to share the post with

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    textstringOptional

    The text content of the comment

    languagestringOptional

    The language of the comment

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    typestring · enumOptional

    Type of media (photo, video, gif)

    Possible values:
    pathstringOptional

    Path to the media file

    captionstringOptional

    Caption for the media

    thumbnailstringOptional

    Thumbnail for video media

    realstringOptional

    Full-size thumbnail

    smallstringOptional

    Small thumbnail

    hidebooleanOptional

    If true, the post will be hidden instead of deleted (platform-dependent)

    durationnumberOptional

    The duration value

    unitstring · enumOptional

    The time unit (Minute, Hour, Day, Week)

    Possible values:
    solobooleanOptional

    Whether to recycle as a solo post

    Example: true
    gapintegerOptional

    Gap between recycles

    Example: 2
    gap_freqstring · enumOptional

    Frequency of the gap

    Example: WeekPossible values:
    start_datestring · dateOptional

    Start date for recycling

    Example: 2025-05-24
    expire_countstringOptional

    Number of times to recycle

    Example: 1
    expire_datestring · dateOptional

    Date when recycling expires

    Example: 2025-06-14
    start_datestring · date-timeRequired

    Start date for recurring posts

    Example: 2025-05-05T13:29+02:00
    end_datestring · date-timeRequired

    End date for recurring posts

    Example: 2025-06-21T13:29+02:00
    repeatstring · enumRequired

    Recurrence pattern

    Example: weeklyPossible values:
    days_of_weekinteger[]Optional

    Days of the week (0=Monday, 6=Sunday)

    Example: [1,4,6]
    repeat_rateintegerRequired

    Rate of repetition

    Example: 1
    share_nextbooleanOptional

    Whether to share the post next in queue

    start_datestring · date-timeOptional

    Start date of the range

    Example: 2025-05-31T08:43:00.000Z
    end_datestring · nullableOptional

    End date of the range

    Example: 2025-06-08T08:43:00.000Z
    autobooleanOptional

    Whether to use auto scheduling

    Example: true
    Responses
    200

    Post creation job initiated

    application/json
    successbooleanOptional

    Whether the job was created successfully

    Example: true
    job_idstringOptional

    ID of the created job

    Example: 6810dec617eae6d55d7a5e5b
    400

    Invalid post data

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated","You don't have access on this workspace"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    post/posts/schedule/publish

    Get job status

    get

    Check the status of an asynchronous job, including URL media uploads

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Path parameters
    job_idstringRequired

    ID of the job to check

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve posts from

    Responses
    200

    Job status retrieved successfully

    application/json
    successbooleanOptional

    Whether the request was successful

    Example: true
    statusstring · enumOptional

    Current status of the job

    • working: The job is still processing.
    • complete: The job has completed successfully.
    • failed: The job has failed.
    Example: completePossible values:
    statusstring · enumOptional

    Current status of the job

    • working: The job is still processing.
    • complete: The job has completed successfully.
    • failed: The job has failed.
    Possible values:
    failuresobjectOptional

    Any failures that occurred during processing

    Example: {"error":"Failed to upload media","code":500}
    ratestringOptional

    The rate plan of the workspace

    Example: business
    lockedbooleanOptional

    Whether the workspace is locked

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/job_status/{job_id}

    Get Post Post Insights

    get

    Retrieves comprehensive analytics data for published posts with advanced filtering, sorting, and pagination capabilities.

    Authorizations
    Path parameters
    account_idstringOptional

    Filter posts for a specific social media account ID. If omitted, includes all workspace accounts. Used with competitors parameter for competitor-specific analysis

    Query parameters
    competitorsstring · enumOptional

    Include competitor analysis data. Set to 'true' to retrieve competitor post insights

    Possible values:
    competitor_idstringOptional

    Specific competitor account ID to analyze when competitors=true. Works in conjunction with account_id parameter

    fromstring · dateRequired

    Start date for post insights data range (YYYY-MM-DD format). Filters posts scheduled on or after this date

    Example: {"value":"2024-01-01"}
    tostring · dateRequired

    End date for post insights data range (YYYY-MM-DD format). Filters posts scheduled on or before this date

    Example: {"value":"2024-12-31"}
    querystringOptional

    Search query to filter posts by text content, title, link description, or video title using case-insensitive matching

    postTypestring · enumOptional

    Filter posts by specific post type (e.g., image, video, link, text, carousel)

    Possible values:
    sort_bystring · enumOptional

    Field to sort results by. Supports various engagement and performance metrics

    Possible values:
    sort_typestring · enumOptional

    Sort order direction

    Possible values:
    pageintegerOptional

    Page number for pagination (0-based indexing). Each page contains 10 posts

    member_idstringOptional

    Filter posts by specific workspace member/user ID who created or manages the posts

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve insights from

    Responses
    200

    Post insights data with analytics metrics and pagination information

    application/json
    idstringOptional

    Unique identifier for the post

    textstringOptional

    Post content text

    titlestringOptional

    Post title

    scheduled_atstring · date-timeOptional

    Date and time when post was scheduled/published

    post_typestringOptional

    Type of post (image, video, link, etc.)

    account_idstringOptional

    ID of the social media account

    idstringOptional
    namestringOptional
    colorstringOptional
    reachintegerOptional

    Number of unique users who saw the post

    engagementintegerOptional

    Total engagement count (likes + comments + shares + saves + clicks)

    engagement_ratenumber · floatOptional

    Engagement rate as percentage

    likesintegerOptional

    Number of likes/reactions

    commentsintegerOptional

    Number of comments

    sharesintegerOptional

    Number of shares/reposts

    savesintegerOptional

    Number of saves/bookmarks

    video_viewsintegerOptional

    Number of video views (for video posts)

    link_clicksintegerOptional

    Number of link clicks

    post_clicksintegerOptional

    Number of post profile clicks

    click_through_ratenumber · floatOptional

    Click-through rate percentage

    reach_ratenumber · floatOptional

    Reach rate percentage

    totalintegerOptional

    Total number of posts matching the filter criteria (for pagination)

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/{account_id}/post_insights

    Extract Link Metadata

    post

    Extracts metadata from a URL including title, description, images, and more. Useful for previewing links before creating a post.

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Body
    urlstringRequired

    The URL to extract metadata from

    Responses
    200

    Successful operation

    application/json
    titlestringOptional

    Title of the webpage

    descriptionstringOptional

    Meta description of the webpage

    urlstringOptional

    The normalized URL

    original_urlstringOptional

    The URL as provided by the user

    imagesstring[]Optional

    Array of image URLs found on the page

    faviconstringOptional

    URL to the site's favicon

    provider_displaystringOptional

    The hostname of the URL

    typestring · enumOptional

    Type of the response, typically 'link' or 'error' if extraction fails

    Possible values:
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    422

    Unprocessable Entity - Invalid URL

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    post/posts/links

    Get Hashtag Insights

    get

    Retrieves comprehensive analytics data for hashtags used in published posts. Provides metrics like reach, engagement, likes, comments, shares, and video views for each hashtag, along with recent posts using each hashtag and hashtag performance scores.

    Authorizations
    Path parameters
    account_idstringOptional

    Filter hashtags for a specific social media account ID. If omitted, includes all workspace accounts

    Query parameters
    fromstring · dateOptional

    Start date for hashtag insights data range (YYYY-MM-DD format). Filters posts scheduled on or after this date

    Example: {"value":"2024-01-01"}
    tostring · dateOptional

    End date for hashtag insights data range (YYYY-MM-DD format). Filters posts scheduled on or before this date

    Example: {"value":"2024-12-31"}
    sort_bystring · enumOptional

    Field to sort hashtag results by. Supports various engagement and performance metrics

    Possible values:
    sort_typestring · enumOptional

    Sort order direction

    Possible values:
    pageintegerOptional

    Page number for pagination (0-based indexing). Each page contains 10 hashtags

    querystringOptional

    Search query to filter hashtags by name using case-insensitive matching

    member_idstringOptional

    Filter hashtags by specific workspace member ID

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve insights from

    Responses
    200

    Hashtag insights data with analytics metrics and pagination information

    application/json
    hashtagstringOptional

    The hashtag text (without # symbol)

    Example: socialmedia
    postsintegerOptional

    Number of posts using this hashtag

    idstringOptional

    Unique identifier for the post

    textstringOptional

    Post content text

    scheduled_atstring · date-timeOptional

    Date and time when post was scheduled/published

    reachintegerOptional

    Total reach across all posts using this hashtag

    likesintegerOptional

    Total likes across all posts using this hashtag

    commentsintegerOptional

    Total comments across all posts using this hashtag

    sharesintegerOptional

    Total shares across all posts using this hashtag

    engagementintegerOptional

    Total engagement (likes + comments + shares) across all posts using this hashtag

    video_viewsintegerOptional

    Total video views across all video posts using this hashtag

    link_clicksintegerOptional

    Total link clicks across all posts using this hashtag

    post_clicksintegerOptional

    Total post clicks across all posts using this hashtag

    savesintegerOptional

    Total saves across all posts using this hashtag

    hashtag_scorenumber · floatOptional

    Performance score of the hashtag as percentage relative to overall post engagement

    totalintegerOptional

    Total number of hashtags matching the filter criteria (for pagination)

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/{account_id}/hashtag_insights

    Get Hashtag Performing Posts

    get

    Retrieves the top performing posts for a specific hashtag. Returns up to 6 posts that used the hashtag, with comprehensive analytics metrics including engagement, reach, likes, comments, shares, and video views.

    Authorizations
    Path parameters
    account_idstringOptional

    Filter posts for a specific social media account ID. If omitted, includes all workspace accounts

    Query parameters
    hashtagstringRequired

    The hashtag to retrieve performing posts for (with # symbol). This parameter is required to filter posts by the specific hashtag

    Example: {"value":"socialmedia"}
    fromstring · dateOptional

    Start date for posts data range (YYYY-MM-DD format). Filters posts scheduled on or after this date

    Example: {"value":"2024-01-01"}
    tostring · dateOptional

    End date for posts data range (YYYY-MM-DD format). Filters posts scheduled on or before this date

    Example: {"value":"2024-12-31"}
    sort_bystring · enumOptional

    Field to sort post results by. Supports various engagement and performance metrics

    Possible values:
    sort_typestring · enumOptional

    Sort order direction

    Possible values:
    member_idstringOptional

    Filter posts by specific workspace member ID

    querystringOptional

    Search query to filter posts by content text, title, or link information using case-insensitive matching

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve posts from

    Responses
    200

    Hashtag performing posts data with analytics metrics

    application/json

    Array of top performing posts using the specified hashtag (up to 6 posts)

    idstringOptional

    Unique identifier for the post

    textstringOptional

    Post content text

    titlestringOptional

    Post title if available

    scheduled_atstring · date-timeOptional

    Date and time when post was scheduled/published

    account_idstringOptional

    ID of the social media account that published this post

    hashtagsstring[]Optional

    Array of hashtags used in this post

    reachintegerOptional

    Total reach of the post

    likesintegerOptional

    Number of likes received

    commentsintegerOptional

    Number of comments received

    sharesintegerOptional

    Number of shares/reposts

    engagementintegerOptional

    Total engagement (likes + comments + shares)

    engagement_ratenumber · floatOptional

    Engagement rate as percentage

    video_viewsintegerOptional

    Number of video views (for video posts)

    link_clicksintegerOptional

    Number of link clicks

    post_clicksintegerOptional

    Number of post clicks

    savesintegerOptional

    Number of saves/bookmarks

    idstringOptional

    Label ID

    namestringOptional

    Label name

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/{account_id}/hashtag_performing_posts

    Get Available Analytics Charts

    get

    Retrieves a list of available analytics charts filtered by account type and chart type. Charts include growth metrics (followers, connections), insights (engagement, reach), and demographics (countries, ages).

    Authorizations
    Query parameters
    account_typestring · enumOptional

    Social media platform type to filter charts for (e.g., 'ig_business', 'fb_page', 'twitter', 'linkedin', 'youtube', 'tiktok', 'google', 'pin_business')

    Possible values:
    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve charts from

    Responses
    200

    List of available charts with metadata

    application/json
    idstringOptional

    Unique identifier for the chart

    Example: followers
    titlestringOptional

    Display title of the chart

    Example: Followers
    group_idstringOptional

    Group category (growth, insights, demographics)

    Example: growth
    tooltipstringOptional

    Tooltip text explaining the chart

    typestring · enumOptional

    Chart visualization type

    Possible values:
    last_valuebooleanOptional

    Whether to show the most recent value

    show_percentagebooleanOptional

    Whether values should be displayed as percentages

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/charts

    Get Analytics Chart Data

    get

    Retrieves analytics data for specific charts by their IDs. Returns current and previous period data for comparison. Supports growth metrics, post insights, and demographic data.

    Authorizations
    Path parameters
    account_idstringOptional

    Optional account ID to filter analytics data for a specific social media account

    Query parameters
    chart_idsstring[]Required

    Array of chart IDs to retrieve data for. Use chart IDs from the /analytics/charts endpoint

    Example: {"value":["followers","post_engagement","post_reach"]}
    fromstring · dateOptional

    Start date for analytics data (YYYY-MM-DD format)

    tostring · dateOptional

    End date for analytics data (YYYY-MM-DD format)

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve data from

    Responses
    200

    Analytics chart data with current and previous period values

    application/json
    Other propertiesobjectOptional

    Chart-specific data structure with metrics and values

    Other propertiesobjectOptional

    Previous period chart data for trend analysis

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/analytics/chart_data

    List Competitors

    get

    Retrieves a list of competitor accounts for the workspace or for a specific social media account.

    Authorizations
    Path parameters
    account_idstringOptional

    ID of the social media account to retrieve competitors for.

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve competitors from

    Responses
    200

    Successful operation

    application/json
    providerstringOptional

    Social media provider (instagram, facebook, twitter, etc.)

    namestringOptional

    Display name of the competitor account

    social_idstringOptional

    Unique social media ID of the competitor

    picturestringOptional

    Profile picture URL of the competitor

    typestringOptional

    Type of account (user, page, etc.)

    competitor_sync_in_queuebooleanOptional

    Whether competitor sync is currently queued

    usernamestringOptional

    Username of the competitor (available for twitter, instagram, telegram, mastodon)

    verifiedbooleanOptional

    Whether the account is verified (available for twitter, facebook)

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/competitors/{account_id}

    Get Competitors Analytics

    get

    Retrieves analytics data for competitor accounts, including engagement metrics, follower counts, and post performance statistics.

    Authorizations
    Query parameters
    account_idstringOptional

    ID of the social media account to filter competitors analytics for

    competitor_idstringOptional

    Specific competitor account ID to analyze

    querystringOptional

    Search filter for competitor account names

    fromstring · dateOptional

    Start date for analytics data (ISO 8601 format, e.g., 2023-01-01)

    tostring · dateOptional

    End date for analytics data (ISO 8601 format, e.g., 2023-12-31)

    pageintegerOptional

    Page number for pagination (default: 0)

    sort_bystring · enumOptional

    Field to sort results by

    Possible values:
    sort_typestring · enumOptional

    Sort direction

    Possible values:
    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve competitors analytics from

    Responses
    200

    Successful operation

    application/json
    idstringOptional

    Competitor account ID

    namestringOptional

    Competitor account name

    providerstringOptional

    Social media provider

    competitor_sync_in_queuebooleanOptional

    Whether sync is in progress

    picturestringOptional

    Profile picture URL

    my_accountbooleanOptional

    Whether this is the user's own account

    followersintegerOptional

    Current follower count

    followers_growthintegerOptional

    Follower growth during the period

    engagementintegerOptional

    Total engagement count

    engagement_ratenumberOptional

    Engagement rate percentage (for Twitter)

    reachintegerOptional

    Total reach (not available for Instagram/Facebook)

    posts_countintegerOptional

    Total number of posts

    videos_countintegerOptional

    Number of video posts

    photos_countintegerOptional

    Number of photo posts

    links_countintegerOptional

    Number of link posts (not available for Instagram)

    statuses_countintegerOptional

    Number of status posts (not available for Instagram)

    totalintegerOptional

    Total number of competitor accounts

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied - requires analytics access or paying subscription

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    422

    Unprocessable entity - service error

    application/json
    errorsstringOptional

    Error message from the service

    get/competitors/{account_id}/analytics

    Upload a media file directly

    post

    Upload a media file (image, video, or document) to be used in social media posts

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to upload media

    Body
    filestringRequired
    direct_uploadbooleanOptional

    Whether to upload directly to our S3 cloud (slower, but required if you need the final media URL)

    Default: false
    in_librarybooleanOptional

    Whether to save to media library

    Default: false
    Responses
    200

    Media file uploaded successfully

    application/json
    idstringOptional

    Unique identifier for the uploaded media

    Example: 6813892b5ec8b1e65235ae9e
    pathstringOptional

    URL path to access the uploaded media

    Example: https://cdn.publer.io/uploads/tmp/1746110763-128246820936684-0001-1648/mini_magick20250501-29172-ce1rot.png
    thumbnailstringOptional

    URL path to access a thumbnail version of the media

    Example: https://cdn.publer.io/uploads/tmp/1746110763-128246820936684-0001-1648/mini_magick20250501-29172-ce1rot.png
    validityobjectOptional

    Indicates which networks and post types support this media

    widthnumberOptional

    Width of the media in pixels

    Example: 1451
    heightnumberOptional

    Height of the media in pixels

    Example: 1005
    sourcestringOptional

    Source attribution for the media

    typestringOptional

    Media type (photo, video, document)

    Example: photo
    namestringOptional

    Original filename

    Example: 123_1kdw8ry.png
    captionstringOptional

    Caption for the media

    400

    Invalid request parameters

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    413

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    post/media

    Upload media from URL

    post

    Upload media files by providing URLs

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to upload media

    Body
    urlstringRequired

    URL of the media to download

    Example: https://example.com/path/to/image.jpg
    namestringRequired

    Custom name for the media file

    Example: instagram: @auchynnikau
    captionstringOptional

    Caption for the media

    Example: Photo by Slava Auchynnikau on Unsplash
    sourcestringOptional

    Source attribution for the media

    Example: unsplash
    typestring · enumRequired

    Upload type

    Example: singlePossible values:
    direct_uploadbooleanOptional

    Whether to upload directly to our S3 cloud (slower, but required if you need the final media URL)

    Default: false
    in_librarybooleanOptional

    Whether to save to media library

    Default: false
    Responses
    200

    Media upload job created successfully

    application/json
    job_idstringOptional

    ID of the created job

    Example: 68138a295ec8b1e65235aea0
    400

    Invalid request parameters

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Invalid parameter value"]
    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Please wait until your other download media from URL jobs have finished","You don't have permission to access this specific endpoint."]
    post/media/from-url

    Get job status

    get

    Check the status of an asynchronous job, including URL media uploads

    Authorizations
    AuthorizationstringRequired

    API key authentication. Format: "Bearer-API YOUR_API_KEY"

    Path parameters
    job_idstringRequired

    ID of the job to check

    Header parameters
    Publer-Workspace-IdstringRequired

    ID of the workspace to retrieve posts from

    Responses
    200

    Job status retrieved successfully

    application/json
    successbooleanOptional

    Whether the request was successful

    Example: true
    statusstring · enumOptional

    Current status of the job

    • working: The job is still processing.
    • complete: The job has completed successfully.
    • failed: The job has failed.
    Example: completePossible values:
    statusstring · enumOptional

    Current status of the job

    • working: The job is still processing.
    • complete: The job has completed successfully.
    • failed: The job has failed.
    Possible values:
    failuresobjectOptional

    Any failures that occurred during processing

    Example: {"error":"Failed to upload media","code":500}
    ratestringOptional

    The rate plan of the workspace

    Example: business
    lockedbooleanOptional

    Whether the workspace is locked

    401

    Unauthorized

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["Not authenticated"]
    403

    Permission denied or missing required scope

    application/json
    errorsstring[]Optional

    List of error messages

    Example: ["You don't have permission to access this specific endpoint."]
    get/job_status/{job_id}
    GET /api/v1/users/me HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Accept: */*
    
    {
      "id": "5b1ec026db27977424e8599e",
      "email": "ervintorra@example.com",
      "name": "ervintorra",
      "first_name": "Ervin",
      "picture": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
    }
    GET /api/v1/workspaces HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Accept: */*
    
    [
      {
        "id": "61a7c2e4f9e8c3b2d1e0f9a8",
        "owner": {
          "id": "5b1ec026db27977424e8599e",
          "email": "ervintorra@example.com",
          "name": "ervintorra",
          "first_name": "Ervin",
          "picture": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
        },
        "name": "Marketing Team",
        "members": [
          {}
        ],
        "plan": "business",
        "picture": "https://publer-dev.s3.amazonaws.com/uploads/logos/marketing_team_logo.png"
      }
    ]
    {
      "media": [
        {
          "id": "5f5fe854421aa9792e762b70",
          "type": "photo",
          "name": "Beach sunset",
          "caption": "Beautiful sunset at the beach",
          "path": "https://cdn.publer.com/uploads/photos/5f5fe854421aa9792e762b70.jpg",
          "thumbnails": [
            {
              "id": "5f6a1234421aa9792e762b71",
              "small": "text",
              "real": "text"
            }
          ],
          "created_at": "2023-05-15T10:30:00Z",
          "updated_at": "2023-05-15T10:30:00Z",
          "favorite": true,
          "in_library": false
        }
      ],
      "total": 10
    }
    GET /api/v1/media?types=photo&used=true HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    GET /api/v1/accounts HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    [
      {
        "id": "63c675b54e299e9cf2b667ea",
        "provider": "bluesky",
        "name": "Tech News Daily",
        "social_id": "at://did:plc:q6gjnaw2blty4crticxkmujt/app.bsky.feed.post/3kje3rifpm22n",
        "picture": "https://publer-dev.s3.amazonaws.com/uploads/avatars/bluesky_profile.jpg",
        "type": "profile"
      }
    ]
    {
      "deleted_ids": [
        "text"
      ]
    }
    DELETE /api/v1/posts?post_ids=text HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "id": "68176f0e8bee9dc9b0ce3427",
      "text": "Check out our new product launch!",
      "state": "scheduled",
      "type": "photo",
      "account_id": "63c675b54e299e9cf2b667ea",
      "account": {
        "id": "63c675b54e299e9cf2b667ea",
        "type": "facebook_page",
        "name": "My Business Page",
        "picture": "https://graph.facebook.com/123456789/picture"
      },
      "user": {
        "id": "5b1ec026db27977424e8599e",
        "name": "ervintorra",
        "picture": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
      },
      "scheduled_at": "2025-05-15T14:30:00.000+02:00",
      "created_at": "2025-04-28T10:15:23.000+02:00",
      "updated_at": "2025-04-29T11:30:45.000+02:00",
      "post_link": "https://facebook.com/post/123456789",
      "media": [
        {
          "id": "66fba4234e299e531f5dc100",
          "type": "image",
          "url": "https://publer-media.s3.amazonaws.com/uploads/images/product-launch.jpg",
          "alt_text": "Product launch announcement image"
        }
      ],
      "link": {
        "url": "https://example.com/product-launch",
        "title": "New Product Launch",
        "description": "Check out our latest product innovation",
        "image_url": "https://example.com/images/product.jpg"
      },
      "labels": [
        {
          "id": "607c2f9a5e2c3d0789abcdef",
          "name": "Product Launch",
          "color": "#FF5733"
        }
      ],
      "auto": false,
      "recycling": {
        "solo": true,
        "gap": 2,
        "gap_freq": "Week",
        "start_date": "2025-06-01",
        "expire_count": 3
      },
      "recurring": {
        "frequency": "Week",
        "repeat_every": 1,
        "weekdays": [
          "Monday"
        ],
        "start_date": "2025-06-02T09:00:00.000Z"
      }
    }
    PUT /api/v1/posts/{id} HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Content-Type: application/json
    Accept: */*
    Content-Length: 39
    
    {
      "post": {
        "text": "text",
        "title": "text"
      }
    }
    [
      {
        "engagements": 1250,
        "posts": 42,
        "reach": 15000,
        "account_ids": [
          "63c675b54e299e9cf2b667ea",
          "63c675b54e299e9cf2b667eb"
        ],
        "user": {
          "id": "5b1ec026db27977424e8599e",
          "name": "John Smith",
          "picture": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
        }
      }
    ]
    GET /api/v1/analytics/members?from=2026-07-26&to=2026-07-26 HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    GET /api/v1/locations/facebook?q=text HTTP/1.1
    Host: app.publer.com
    Accept: */*
    
    [
      {
        "id": "text",
        "name": "text",
        "info": "Main office in New York City ⋅ 1,030 follow this",
        "verified": true
      }
    ]
    GET /api/v1/locations/instagram?q=text HTTP/1.1
    Host: app.publer.com
    Accept: */*
    
    [
      {
        "id": "text",
        "name": "text",
        "info": "Main office in New York City ⋅ 1,030 follow this",
        "verified": true
      }
    ]
    GET /api/v1/locations/threads?q=text HTTP/1.1
    Host: app.publer.com
    Accept: */*
    
    [
      {
        "id": "text",
        "name": "text",
        "info": "Main office in New York City"
      }
    ]
    {
      "success": true,
      "data": {
        "job_id": "6810dec617eae6d55d7a5e5b"
      }
    }
    {
      "success": true,
      "data": {
        "job_id": "6810dec617eae6d55d7a5e5b"
      }
    }
    POST /api/v1/posts/schedule HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Content-Type: application/json
    Accept: */*
    Content-Length: 1029
    
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Check out our new product launch!"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-05-17T16:19+02:00",
                "labels": [],
                "previewed_media": true,
                "share": {
                  "text": "text",
                  "account_ids": [
                    "text"
                  ],
                  "after": {
                    "duration": 1,
                    "unit": "Minute"
                  },
                  "delay": {
                    "duration": 1,
                    "unit": "Minute"
                  }
                },
                "comments": [
                  {
                    "text": "text",
                    "language": "text",
                    "delay": {
                      "duration": 1,
                      "unit": "Minute"
                    },
                    "media": {
                      "type": "photo",
                      "path": "text",
                      "caption": "text",
                      "thumbnail": "text",
                      "thumbnails": {
                        "real": "text",
                        "small": "text"
                      }
                    }
                  }
                ],
                "delete": {
                  "hide": true,
                  "delay": {
                    "duration": 1,
                    "unit": "Minute"
                  }
                }
              }
            ],
            "recycling": {
              "solo": true,
              "gap": 2,
              "gap_freq": "Week",
              "start_date": "2025-05-24",
              "expire_count": "1",
              "expire_date": "2025-06-14"
            },
            "recurring": {
              "start_date": "2025-05-05T13:29+02:00",
              "end_date": "2025-06-21T13:29+02:00",
              "repeat": "weekly",
              "days_of_week": [
                1,
                4,
                6
              ],
              "repeat_rate": 1
            },
            "share_next": false,
            "range": {
              "start_date": "2025-05-31T08:43:00.000Z",
              "end_date": "2025-06-08T08:43:00.000Z"
            },
            "auto": true
          }
        ]
      }
    }
    POST /api/v1/posts/schedule/publish HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Content-Type: application/json
    Accept: */*
    Content-Length: 1029
    
    {
      "bulk": {
        "state": "scheduled",
        "posts": [
          {
            "networks": {
              "facebook": {
                "type": "status",
                "text": "Check out our new product launch!"
              }
            },
            "accounts": [
              {
                "id": "63c675b54e299e9cf2b667ea",
                "scheduled_at": "2025-05-17T16:19+02:00",
                "labels": [],
                "previewed_media": true,
                "share": {
                  "text": "text",
                  "account_ids": [
                    "text"
                  ],
                  "after": {
                    "duration": 1,
                    "unit": "Minute"
                  },
                  "delay": {
                    "duration": 1,
                    "unit": "Minute"
                  }
                },
                "comments": [
                  {
                    "text": "text",
                    "language": "text",
                    "delay": {
                      "duration": 1,
                      "unit": "Minute"
                    },
                    "media": {
                      "type": "photo",
                      "path": "text",
                      "caption": "text",
                      "thumbnail": "text",
                      "thumbnails": {
                        "real": "text",
                        "small": "text"
                      }
                    }
                  }
                ],
                "delete": {
                  "hide": true,
                  "delay": {
                    "duration": 1,
                    "unit": "Minute"
                  }
                }
              }
            ],
            "recycling": {
              "solo": true,
              "gap": 2,
              "gap_freq": "Week",
              "start_date": "2025-05-24",
              "expire_count": "1",
              "expire_date": "2025-06-14"
            },
            "recurring": {
              "start_date": "2025-05-05T13:29+02:00",
              "end_date": "2025-06-21T13:29+02:00",
              "repeat": "weekly",
              "days_of_week": [
                1,
                4,
                6
              ],
              "repeat_rate": 1
            },
            "share_next": false,
            "range": {
              "start_date": "2025-05-31T08:43:00.000Z",
              "end_date": "2025-06-08T08:43:00.000Z"
            },
            "auto": true
          }
        ]
      }
    }
    GET /api/v1/job_status/{job_id} HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "success": true,
      "data": {
        "status": "complete",
        "result": {
          "status": "working",
          "payload": {
            "failures": {
              "error": "Failed to upload media",
              "code": 500
            }
          },
          "plan": {
            "rate": "business",
            "locked": false
          }
        }
      }
    }
    {
      "link": {
        "title": "text",
        "description": "text",
        "url": "text",
        "original_url": "text",
        "images": [
          "text"
        ],
        "favicon": "text",
        "provider_display": "text",
        "type": "link"
      }
    }
    POST /api/v1/posts/links HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Content-Type: application/x-www-form-urlencoded
    Accept: */*
    Content-Length: 14
    
    "url='text'"
    [
      {
        "id": "followers",
        "title": "Followers",
        "group_id": "growth",
        "tooltip": "text",
        "type": "vertical",
        "last_value": true,
        "show_percentage": true
      }
    ]
    {
      "current": {
        "ANY_ADDITIONAL_PROPERTY": {}
      },
      "previous": {
        "ANY_ADDITIONAL_PROPERTY": {}
      }
    }
    GET /api/v1/analytics/charts HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    GET /api/v1/analytics/chart_data?chart_ids=text HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "id": "6813892b5ec8b1e65235ae9e",
      "path": "https://cdn.publer.io/uploads/tmp/1746110763-128246820936684-0001-1648/mini_magick20250501-29172-ce1rot.png",
      "thumbnail": "https://cdn.publer.io/uploads/tmp/1746110763-128246820936684-0001-1648/mini_magick20250501-29172-ce1rot.png",
      "validity": {},
      "width": 1451,
      "height": 1005,
      "source": null,
      "type": "photo",
      "name": "123_1kdw8ry.png",
      "caption": null
    }
    {
      "job_id": "68138a295ec8b1e65235aea0"
    }
    POST /api/v1/media HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Content-Type: multipart/form-data
    Accept: */*
    Content-Length: 56
    
    {
      "file": "text",
      "direct_upload": false,
      "in_library": false
    }
    POST /api/v1/media/from-url HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Content-Type: application/json
    Accept: */*
    Content-Length: 220
    
    {
      "media": [
        {
          "url": "https://example.com/path/to/image.jpg",
          "name": "instagram: @auchynnikau",
          "caption": "Photo by Slava Auchynnikau on Unsplash",
          "source": "unsplash"
        }
      ],
      "type": "single",
      "direct_upload": false,
      "in_library": false
    }
    GET /api/v1/job_status/{job_id} HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "success": true,
      "data": {
        "status": "complete",
        "result": {
          "status": "working",
          "payload": {
            "failures": {
              "error": "Failed to upload media",
              "code": 500
            }
          },
          "plan": {
            "rate": "business",
            "locked": false
          }
        }
      }
    }
    GET /api/v1/workspaces/{workspace_id}/signatures?accounts=text HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Accept: */*
    
    [
      {
        "account_id": "text",
        "signatures": [
          {
            "id": "text",
            "label": "text",
            "text": "text",
            "default": true,
            "in_photo_captions": true
          }
        ]
      }
    ]
    GET /api/v1/workspaces/{workspace_id}/media_options?accounts=text HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Accept: */*
    
    [
      {
        "id": "text",
        "albums": [
          {
            "id": "text",
            "name": "text",
            "type": "text"
          }
        ],
        "watermarks": [
          {
            "id": "text",
            "name": "text",
            "opacity": 1,
            "size": 1,
            "position": "text",
            "default": true,
            "image": "text"
          }
        ]
      }
    ]
    {
      "Monday": [
        0,
        0,
        0,
        0,
        0,
        0,
        5,
        12,
        18,
        25,
        22,
        15,
        8,
        10,
        16,
        20,
        18,
        14,
        12,
        8,
        5,
        3,
        1,
        0
      ],
      "Tuesday": [
        0,
        0,
        0,
        0,
        0,
        0,
        6,
        15,
        20,
        28,
        25,
        18,
        10,
        12,
        18,
        22,
        20,
        16,
        14,
        10,
        6,
        4,
        2,
        0
      ],
      "Wednesday": [
        0,
        0,
        0,
        0,
        0,
        0,
        7,
        16,
        22,
        30,
        27,
        20,
        12,
        14,
        20,
        24,
        22,
        18,
        16,
        12,
        8,
        5,
        3,
        0
      ]
    }
    GET /api/v1/analytics/{account_id}/best_times?from=2026-07-26&to=2026-07-26 HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "posts": [
        {
          "id": "68176f0e8bee9dc9b0ce3427",
          "text": "Check out our new product launch!",
          "url": "https://example.com/product-launch",
          "state": "scheduled",
          "type": "status",
          "account_id": "63c675b54e299e9cf2b667ea",
          "user": {
            "id": "5b1ec026db27977424e8599e",
            "name": "ervintorra",
            "picture": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_mini_magick20250123-28707-otuw0w.png"
          },
          "scheduled_at": "2025-05-15T14:30:00.000+02:00",
          "post_link": "https://facebook.com/post/123456789",
          "has_media": true,
          "network": "facebook"
        }
      ],
      "total": 42,
      "page": 1,
      "per_page": 20,
      "total_pages": 3
    }
    GET /api/v1/posts HTTP/1.1
    Host: app.publer.com
    Authorization: YOUR_API_KEY
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "posts": [
        {
          "id": "text",
          "text": "text",
          "title": "text",
          "scheduled_at": "2026-07-26T11:12:51.374Z",
          "post_type": "text",
          "account_id": "text",
          "details": {
            "labels": [
              {
                "id": "text",
                "name": "text",
                "color": "text"
              }
            ]
          },
          "analytics": {
            "reach": 1,
            "engagement": 1,
            "engagement_rate": 1,
            "likes": 1,
            "comments": 1,
            "shares": 1,
            "saves": 1,
            "video_views": 1,
            "link_clicks": 1,
            "post_clicks": 1,
            "click_through_rate": 1,
            "reach_rate": 1
          }
        }
      ],
      "total": 1
    }
    GET /api/v1/analytics/{account_id}/post_insights?from=2026-07-26&to=2026-07-26 HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "records": [
        {
          "hashtag": "socialmedia",
          "posts": 1,
          "recent_posts": [
            {
              "id": "text",
              "text": "text",
              "scheduled_at": "2026-07-26T11:12:51.374Z"
            }
          ],
          "reach": 1,
          "likes": 1,
          "comments": 1,
          "shares": 1,
          "engagement": 1,
          "video_views": 1,
          "link_clicks": 1,
          "post_clicks": 1,
          "saves": 1,
          "hashtag_score": 1
        }
      ],
      "total": 1
    }
    [
      {
        "id": "text",
        "text": "text",
        "title": "text",
        "scheduled_at": "2026-07-26T11:12:51.374Z",
        "account_id": "text",
        "hashtags": [
          "text"
        ],
        "analytics": {
          "reach": 1,
          "likes": 1,
          "comments": 1,
          "shares": 1,
          "engagement": 1,
          "engagement_rate": 1,
          "video_views": 1,
          "link_clicks": 1,
          "post_clicks": 1,
          "saves": 1
        },
        "details": {
          "labels": [
            {
              "id": "text",
              "name": "text"
            }
          ]
        }
      }
    ]
    GET /api/v1/analytics/{account_id}/hashtag_insights HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    GET /api/v1/analytics/{account_id}/hashtag_performing_posts?hashtag=text HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    {
      "insights": [
        {
          "account": {
            "id": "text",
            "name": "text",
            "provider": "text",
            "competitor_sync_in_queue": true,
            "picture": "text",
            "my_account": true
          },
          "followers": 1,
          "followers_growth": 1,
          "engagement": 1,
          "engagement_rate": 1,
          "reach": 1,
          "posts_count": 1,
          "videos_count": 1,
          "photos_count": 1,
          "links_count": 1,
          "statuses_count": 1
        }
      ],
      "total": 1
    }
    GET /api/v1/competitors/{account_id} HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    GET /api/v1/competitors/{account_id}/analytics HTTP/1.1
    Host: app.publer.com
    Publer-Workspace-Id: text
    Accept: */*
    
    [
      {
        "provider": "text",
        "name": "text",
        "social_id": "text",
        "picture": "text",
        "type": "text",
        "competitor_sync_in_queue": true,
        "username": "text",
        "verified": true
      }
    ]