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...
Loading...
Loading...
Loading...
Loading...
Loading...
Welcome to the Publer Public 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.
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.
Create, schedule, and publish posts (text, images, videos, links, polls, carousels, PDFs)
Upload, organize, and reuse media assets (images, videos, GIFs, documents)
Automate workspace, account, and permission management
Retrieve post
Build custom integrations, dashboards, or bots
Base URL
https://app.publer.com/api/v1
Format
JSON
Auth Method
Bearer-API Token
Version
v1 (semantic versioning MAJOR.MINOR.PATCH)
Rate Limits
60 requests/minute per token
Include your API token in every request header:
Manage and regenerate tokens in Dashboard → Settings → API Keys.
Generate an API key in your Publer Dashboard.
Validate your credentials:
If you need assistance with the API:
Retrieve profile, subscription, and application settings for the currently authenticated user. Use this endpoint to adapt your integration to user preferences and entitlements.
Authentication: Bearer API token
Scope: users
Headers:
Authorization: Bearer-API YOUR_API_KEY
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.
Authentication: Bearer API token
Scope: workspaces
Headers:
Authorization: Bearer-API YOUR_API_KEY
Retrieve all workspaces accessible by the authenticated user.
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.
Many endpoints require you to specify which workspace you’re operating in. Include the Publer-Workspace-Id
header:
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 sliding-window algorithm.
When you reach the rate limits, every API response includes these headers so you can monitor your rate limit status:
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
.
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.
Monitor headers and throttle your client.
Implement exponential backoff when you approach or hit the limit.
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
Access & Availability The Publer Public API is available exclusively to Top Publer Ambassadors and Enterprise customers. • •
Follow our to make your first API request
Explore the full for detailed endpoint docs.
Review our for basic concepts
Check the for detailed endpoint information
Contact for technical issues
- Managing API keys and scopes
- Access workspace information
- Understanding API usage limits
- Access user profile information
- Access social accounts within workspaces
— Create, schedule, and manage content
Note: If you need higher throughput for your integration, see below.
Email:
Quickstart
Get up and running with the API in minutes
Authentication
Learn how to authenticate your API requests
API Reference
Explore detailed endpoint documentation
2-minute sliding
100 requests
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)
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
Headers:
Authorization: Bearer-API YOUR_API_KEY
Publer-Workspace-Id: YOUR_WORKSPACE_ID
Deletes one or more posts based on the provided IDs.
Parameter
Type
Required
Description
post_ids
array
Yes
Array of post IDs to delete
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
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.
Each social network offers unique post formats. Publer’s API supports these specialized types—click a format to dive into its implementation details:
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.
Test & Iterate Experiment across formats to discover what resonates best with your audience.
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.
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
Submit your request → 202 Accepted + {"job_id": "…"}
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.
For implementation examples, see the Quickstart Guide and sections on creating content, media handling, and network-specific formats.
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
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:
Create, manage, and publish draft posts that aren’t sent immediately. Drafts can be private (only you) or shared with your workspace for review and scheduling.
Use the same scheduling endpoint—with a draft state—to save work-in-progress content without publishing.
Set the state
to one of the following:
Save Often: Persist drafts early to avoid data loss.
Collaborate: Use draft_public
for workspace feedback and approvals.
- Retrieve and filter posts
- Modify existing posts
Current version: v1 (in the URL path). We follow . Breaking changes only occur on MAJOR version bumps; you will be notified in advance.
- Manage organizational units
- Create and publish content to accounts
- Upload media files for posting
Provider
Description
Supported Account Types
facebook
page
, group
, profile
instagram
business
twitter
Twitter/X
profile
linkedin
page
, profile
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
Private Draft
draft_private
Only you
Workspace Draft
draft_public
All workspace members
Default Workspace
draft
Same as draft_public
Every Publer API request must include a valid API key. This guide shows you how to obtain, use, and manage your keys securely.
Navigate to Settings → Access & Login → API Keys.
Click Create API Key.
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
users
Manage users and user settings
/users/me
posts
Create and read posts
/posts
media
Upload and manage media assets
/media
workspaces
Retrieve user's workspaces
/workspaces
accounts
Retrieve user's accounts of selected workspace
/accounts
job_status
Retrieve submitted post/media request status
/job_status
locations
Search Facebook/Instagram locations.
/locations
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:
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:
Confirm your key is active and not expired.
Verify you have the correct header names and values.
Double-check that your key has the required scopes.
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, labels, and search terms.
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.
ids[]
string[]
No
Specific media IDs (pagination and other filters ignored when set)
page
integer
No
Page number (0-based). Default: 0
types[]
string[]
Yes
Filter by media type: photo
, video
, gif
used[]
boolean[]
Yes
Filter by usage status
labels[]
string[]
No
Filter by label IDs
source[]
string[]
No
Filter by source: canva
, vista
, postnitro
, contentdrips
, openai
, favorites
, upload
search
string
No
Full-text search on name or caption
embedded
boolean
No
Set true
when calling from an embedded view
Free trial users see placeholder data unless they supply specific query filters.
Paid accounts have full library access.
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:
accounts[].id
string
Target account ID
accounts[].scheduled_at
string
ISO 8601 timestamp for scheduling (omit for immediate publishing)
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)
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.
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.
Network
Supported Content Types
status
, photo
, video
, link
, carousel
, story
, reel
, gif
photo
, video
, carousel
, story
, reel
Twitter/X
status
, photo
, video
, link
, gif
, poll
status
, photo
, video
, link
, document
, poll
, gif
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.
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 Top Publer Ambassador or Enterprise account
Basic familiarity with HTTP/JSON APIs
A command-line tool (curl) or API client (Postman, Insomnia)
Sign in to Publer and verify you have Ambassador or Enterprise access.
Go to Settings → Access & Login → API Keys.
Click Create API Key.
Enter a descriptive name, then select scopes:
workspaces
posts
accounts
users
media
job_status
locations
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:
Generate an API key
List workspaces → pick a workspace ID
List accounts → pick account IDs
Submit a post creation request
Poll job status until completed
Fetch posts to verify
This async pattern scales across multiple workspaces, accounts, and post types.
Publish content to social networks instantly using the Publer API. This method skips scheduling and sends posts for immediate delivery.
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.)
accounts
: list of target account IDs (no scheduled_at
timestamp)
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.
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.
Schedule posts for future publication across one or more social networks using the Publer API.
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.
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:
Organize your Facebook photos into albums.
Pin to specific Pinterest boards.
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.
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.
Sign in to your (Ambassador or Enterprise plan).
Contact for assistance.
— Manage connected social accounts
— Create and schedule posts
— Upload new media files
- Detailed guide for uploading and managing media
- Platform-specific capabilities and limitations
- Ways to publish different content types
Explore (photos, videos, links, polls)
Dive into and upload workflows
Learn about (drafts, recurring posts)
Review for platform-specific limits
For full API details, see the . For assistance, contact .
- Details on different content formats
- Information about uploading and managing media
- Platform-specific capabilities and limitations
- Details on different content formats
- Advanced AI-based scheduling options
- Setting up repeating content
- Platform-specific scheduling limitations
Authorization
Yes
Bearer-API YOUR_API_KEY
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
Processing delays
For media posts, allow extra time for media processing
Authorization
Yes
Bearer-API YOUR_API_KEY
Publer-Workspace-Id
Yes
Workspace ID for scheduling posts
Content-Type
Yes
application/json
Accept
No
application/json
(default)
Plan
Maximum Advance Scheduling
Free
7 days in advance
Professional
1 year in advance
Business
5 years in advance
id
string
Account ID
albums
array
List of albums (Facebook) or boards (Pinterest)
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
Simple yet powerful status updates without media attachments. Text posts are widely supported, versatile, and often drive high engagement.
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.
Flexible Scheduling Instant publish, scheduled posts, or auto-optimized time slots.
Network
Character Limit
Notes
10,000
Full text supported with formatting
Twitter/X
280
25,000 for premium accounts
3,000
Supports formatting like bold, italic
2,200
For feed post captions
Google Business
1,500
For business updates
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
Below is an example showing a text post scheduled for multiple platforms:
networks.{provider}.type
Must be set to "status"
networks.{provider}.text
Your post copy string
accounts[].id
Target social account ID
accounts[].scheduled_at
ISO 8601 timestamp (for scheduling)
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.
Include Clear CTAs Encourage engagement with direct calls-to-action.
A/B Test Variations Schedule multiple text variants to measure which resonates best.
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
Thumbnail Preview
Immediate or Scheduled Posting
4 MB
—
Twitter/X
15 MB
4×4 to 2048×2048 px resolution
Unlimited
Native GIF support
Telegram
50 MB
—
Mastodon
8 MB
Supports JPEG, PNG, WEBP, and GIF
Unlimited
—
Send to the scheduling endpoint (/posts/schedule
) or immediate‐publish (/posts/schedule/publish
):
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
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)
Build your post object with "type": "gif"
.
(Optional) Add "thumbnail"
and "name"
for preview.
Call /posts/schedule
or /posts/schedule/publish
.
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.
Tag your posts with a real-world location to increase engagement and reach more local audiences. Publer supports location tagging for Facebook Pages and Instagram Business accounts.
Location tagging attaches a physical place (such as a city, office, or venue) to your Facebook or Instagram 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:
accounts[].id
string
Target account ID
accounts[].scheduled_at
string
ISO 8601 timestamp for scheduling (omit for immediate publish)
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)
Supported Networks: Location tagging is supported for Facebook Pages and Instagram Business 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
Protect your creative content and reinforce your brand by automatically applying watermarks to photos and videos you share across your social accounts.
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.
Response Example:
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:
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.
Media Orientation: Watermarks are applied consistently regardless of image/video orientation.
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
Scheduling: Publish immediately or at a specified time
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:
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.
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.
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).
Syncing: Published carousel posts can only sync back as regular link posts (no carousel structure).
Select Page
Choose a Facebook Page account in the accounts
array.
Define Sublinks
Provide url
, title
, description
, and images
for each card.
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
.
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.
A/B Test CTAs
Experiment with LEARN_MORE
, SIGN_UP
, and other button types.
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.
Multi-Platform Publishing Post images simultaneously to all supported networks.
Multiple Image Support Single photos or carousels (up to platform limits).
Advanced Customization Captions, alt text, and location tags where available.
Resolution Optimization Automatic resizing and format handling per network.
Below is an example showing a photo post scheduled for multiple platforms.
Omit scheduled_at
for immediate posts.
* Omit scheduled_at
when publishing immediately.
Receive IDs: Note each media object’s id
.
Compose Post: Reference those IDs in your media
array.
Publish/Schedule: Send the payload to the posts endpoint.
Optimize Quality: Compress and resize images to platform specs.
Descriptive Alt Text: Enhance accessibility and SEO.
Tailor Captions: Adjust tone and length per network.
Experiment Carousels: Test image order to boost engagement.
Consistent Branding: Use uniform styles and watermarks.
Reference or upload your GIF via the .
Use the to get all saved watermarks for your account(s):
Upload Images: Use the to upload files.
accounts[].id
string
Target account ID
accounts[].scheduled_at
string
ISO 8601 timestamp for scheduling (omit for immediate publish)
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)
Twitter/X
In text
2–4, ≤25 chars
Up to 7 days
No
Options limit applies across all networks
Separate question
2–4, ≤30 chars
Up to 14 days
No
Mastodon
In text
2–4, ≤50 chars
Up to 7 days
Yes
networks.{provider}.type
string
Must be "poll"
.
networks.{provider}.text
string
Caption or question (Twitter/Mastodon).
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).
type
string
Must be "carousel"
.
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.
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.
Unlimited
No restriction
Yes
Supports alt text, no restrictions on photo size.
10
8 MB
Yes
Minimum resolution: 320x320 px, automatically cropped.
TikTok
35
No restriction
No
Cannot mix photos with GIFs or videos.
Threads
20
8 MB
No
Cannot mix photos with GIFs or videos.
4
5 MB
No
Supports only up to 4 photos per post.
20
No restriction
No
Photos and GIFs are supported, cannot mix with videos.
Telegram
10
10 MB
No
Cannot mix photos with GIFs or videos.
Mastodon
4
8 MB
No
Supports JPEG, PNG, or WEBP formats.
networks.{provider}.type
Must be "photo"
.
networks.{provider}.media
Array of { id, type, alt_text? }
objects.
accounts[].id
Target social account ID.
accounts[].scheduled_at
*
ISO 8601 timestamp for scheduling (optional).
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.
Authorization
Yes
Bearer-API YOUR_API_KEY
Publer-Workspace-Id
Yes
Workspace ID
Content-Type
Yes
application/json
Accept
No
application/json
(default)
Set auto: true
and define range
to enable auto-scheduling:
auto
boolean
Set to true
to enable auto-scheduling
range.start_date
string
Earliest ISO 8601 timestamp for posting (inclusive)
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
Omit end_date
and set share_next
to schedule at the next open slot:
Analyze Schedule: Publer looks at your existing posting queue and calendar.
Identify Slots: Finds open time slots based on your account’s posting schedule.
Optimize: Uses audience engagement data to pick a high-impact time within your range.
Schedule: Creates the post at the selected time.
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.
Hands-Off Workflow: Let Publer handle timing so you focus on content.
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.
Monitor Jobs: Poll /api/v1/job_status/{job_id}
to confirm success.
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.
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…
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
Max Media
1 video or up to 5 photos
Supported Formats
JPEG, PNG, GIF, MP4
Link URL
External links only (use url
field)
Alt Text
Optional (media[].alt_text
)
Board Selection
Use accounts[].album_id
to pick a Pinterest board
networks.pinterest.type
string
Must be "photo"
.
networks.pinterest.text
string
Caption or description for the Pin.
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[].alt_text
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).
Select Account & Board
Add your Pinterest account.id
and target album_id
.
Upload/Reference Media
Upload up to 5 photos or 1 video to Publer, then reference each with its id
.
Compose Pin
Set type: "photo"
.
Provide text
, title
, and url
.
Optionally add alt_text
.
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.
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, job_status, media, locations
Headers:
Authorization: Bearer-API YOUR_API_KEY
Publer-Workspace-Id: YOUR_WORKSPACE_ID
Submit Request to /posts/schedule
or /posts/schedule/publish
Receive { "job_id": "…" }
Poll /job_status/{job_id}
until status: "completed"
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
The state
parameter determines how your content will be handled:
The type
parameter specifies the content format:
Supported platforms and their keys under networks
:
facebook
, instagram
, twitter
, linkedin
, pinterest
, youtube
, tiktok
, google
, wordpress
, telegram
, mastodon
, threads
, bluesky
.
Poll your job with:
Response:
To customize content for specific platforms:
This overview covers the essential concepts for creating posts with the Publer API. For detailed information about specific features, refer to:
Automatically re-share a post on a regular cadence. Recycling is ideal for evergreen content, reminders, and promotional campaigns.
Include a recycling
object in your payload:
Recycle every 2 weeks, up to 3 times:
Recycle monthly until end of year:
Create a post with recycling
settings.
Publer queues the post for reuse.
After each gap
interval, the post is republished.
Recycling stops when expire_count
or expire_date
is reached.
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
).
Monitor engagement metrics to adjust recycling strategy.
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).
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:
Direct file upload
Upload from URL
Once uploaded, you'll receive a media ID that can be referenced in your post requests.
Use this method when you have local media files that you want to upload directly.
This endpoint expects a multipart/form-data
request with the file included in the file
field.
Key Response Fields
Use this method when your media is already hosted elsewhere and you want to import it by URL.
Request Parameters
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
Maximum file size: Varies by platform, generally 5-10MB
Supported formats: MP4, MOV, AVI, WEBM
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.
Resolution: Use appropriate image resolutions for each platform
Aspect ratio: Follow recommended aspect ratios to avoid cropping
File size: Optimize images for web to reduce file size
Alt text: Always include descriptive alt text for accessibility
Format: Use MP4 with H.264 encoding for maximum compatibility
Dimensions: Use 1080p (1920x1080) for standard videos
Aspect ratio: 16:9 for horizontal, 9:16 for vertical/stories/reels
Duration: Keep videos under platform limits
Thumbnails: Consider uploading custom thumbnails for videos
Pre-check compatibility: Review the validity
object before using media
Error handling: Implement robust error handling for upload failures
Caching: Cache media IDs to avoid unnecessary re-uploads
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.
Compose Post
Set type: "photo"
, add media
IDs.
Under details
, set "type": "document"
.
Provide a title
.
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.
Media files must be pre-uploaded and referenced by ID, see :
: Complete documentation of all publishing options
: Detailed guide to content formats and requirements
: Information about uploading and managing media
: Platform-specific capabilities and limitations
: Complete workflow examples
Recommended dimensions: Varies by platform (see )
Recommended dimensions: Varies by platform (see )
- Details on different content formats
- Platform-specific media requirements
- Using media in different post types
Upload Media Use the to upload images or documents and collect their IDs.
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
Published post
/api/v1/job_status/{job_id}
Check status of submitted job
Job status
State
Description
Additional Parameters
scheduled
Schedule for specific date/time
scheduled_at
(ISO timestamp)
draft
, draft_private
, draft_public
Save as draft
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
Type
Description
Required Properties
status
Text-only post
text
photo
Image post
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
Authorization
Yes
Bearer-API YOUR_API_KEY
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)
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
)
Platform
Recycling Support
Notes
Full support
No special requirements
Full support
No special requirements
Full support
No special requirements
Limited
Requires 10+ variations using Spintax Generator
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
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
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
Parameter
Description
Required
media[].url
URL of the media file to download
Yes
media[].name
Custom name for the media file
Yes
media[].caption
Caption for the media
No
media[].source
Source attribution
No
type
Upload type (single
or multiple
)
No
directUpload
Whether to skip processing (default: false
)
No
inLibrary
Whether to save to media library (default: false
)
No
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)
Max Items
100 photos/pages
Supported Formats
JPEG, PNG, PDF, DOCX, PPTX
Media Mix
No GIFs or videos—photos/documents only
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
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
Headers:
Authorization: Bearer-API YOUR_API_KEY
Publer-Workspace-Id: YOUR_WORKSPACE_ID
Retrieve posts with optional filters and pagination.
state
string
No
Filter by a single post state (see State Values below)
state[]
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
State Values
Value
Description
all
All posts regardless of state
scheduled
All scheduled posts
scheduled_approved
Scheduled posts that have been approved
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
Type Values
Value
Description
status
Text-only posts
link
Posts with links
photo
Photo 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
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
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.
Rich Metadata Attach titles, captions, and custom thumbnail selections.
Advanced Scheduling Schedule per time zone or publish immediately; poll job status for completion.
Standard, Reels, Story
Standard: up to 5 h Reels: 3–90 s Stories: ≤60 s
< 2 GB
Flexible
Auto-captions, premiere scheduling
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
Standard
3 s–15 min
< 2 GB
1:2.4–2.4:1
Native profile/page posting
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
—
Schedule a video post using the unified scheduling endpoint:
bulk.state
Must be "scheduled"
.
networks.{provider}.type
Set to "video"
.
networks.{provider}.media
Array of video metadata objects.
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.
networks.{provider}.media[].default_thumbnail
1-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).
* Optional if you publish immediately via /posts/schedule/publish
.
Receive Media ID
Note the returned id
for referencing in your post payload.
Configure Thumbnails Upload or select thumbnail images and include their IDs/URLs.
Compose & Schedule
Build your post object, set state
and scheduled_at
, then send to /posts/schedule
.
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).
Automatically publish the same post at regular intervals, indefinitely or until a specified stop condition.
Authorization
Yes
Bearer-API YOUR_API_KEY
Publer-Workspace-Id
Yes
Your workspace identifier
Content-Type
Yes
application/json
Accept
No
application/json
(default)
Include a recurring
object under each post:
frequency
string
Unit of recurrence: Day
, Week
, Month
, or Year
repeat_every
integer
Interval between posts (e.g., 1
for every week, 2
for every 2 weeks)
start_date
string
ISO 8601 timestamp for the first occurrence
weekdays
array
Days of week for weekly recurrence (e.g., ["Monday", "Wednesday"]
)
days
array
Days of month for monthly/yearly recurrence (e.g., [1, 15, 28]
)
end_date
string
ISO 8601 timestamp to stop recurrence (optional)
occurrences
integer
Maximum number of total occurrences (optional)
Every Monday at 9:00 AM:
Every other Tuesday and Thursday, for 10 occurrences:
Create a post with recurring
settings.
Schedule first occurrence at start_date
.
Generate subsequent posts at each interval (repeat_every
+ frequency
).
Stop when reaching occurrences
count or passing end_date
.
Platform
Recurring Support
Notes
Full support
No special requirements
Full support
No special requirements
Full support
No special requirements
Limited
Requires 10+ variations using Spintax Generator
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
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
or occurrences
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.
Share URLs with rich previews (title, description, image, and call-to-action) across your social networks via the Publer API.
Link posts display a URL preview alongside optional caption text. You control metadata (title, description, images, CTA) to enhance engagement.
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
Title, description, images, CTA
Full link card support
Title, description, images, CTA
Full link card support
Twitter/X
Automatic card preview
Metadata driven by Twitter Card tags
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
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
):
bulk.state
string
scheduled
, publish
, or a draft state
networks.{provider}.type
string
Must be "link"
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)
Note: You can also include
original_title
,original_description
, andoriginal_images
if you pre‐fetch metadata yourself, but only thelink.*
fields above are required.
Extract Metadata
Use /posts/links
to fetch title, description, and images from your target URL.
Compose Metadata
Define url
, title
, description
, and images
in the link
object.
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
.
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.
- Manage social media accounts
- Upload and manage media for posts
- Post creation endpoints
Upload Video Use the endpoint to upload your video.
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.
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
Send to the scheduling endpoint or use /posts/schedule/publish
for immediate posting:
networks.{provider}.type
string
"video"
for Reels/Shorts, "photo"
for Stories
networks.{provider}.text
string
Caption or overlay text
networks.youtube.title
string
Title for YouTube Shorts
networks.{provider}.media[]
array
Media array (IDs 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[].default_thumbnail
integer
Index of the thumbnail image (Reels 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.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)
Compose: Set "details.type": "reel"
, optional audio
and feed
flags.
Schedule: Provide scheduled_at
or publish immediately.
Verify: Monitor job status and preview in dashboard.
Upload: Upload video ≤ 60 sec, 9:16 ratio.
Configure: Set "details.type": "short"
and privacy
.
Add Title/Text: Populate title
and text
.
Publish: Schedule or publish immediately.
Upload: Add photo or video ≤ 15 sec.
Tag as Story: Use "details.type": "story"
.
Caption: Add text
overlay.
Schedule: Set scheduled_at
or publish now.
Use high-quality, platform-compliant media (9:16 ratio).
Rename Reel audio to match branding.
Schedule according to audience peak times.
Automate follow-up actions when you publish or schedule posts: auto-share to other accounts, post delayed comments, or auto-delete content after a set time.
Post callbacks are powerful automation features that can be configured within your API requests when creating posts. They allow you to:
AutoShare: Automatically share published posts to other social accounts
Follow-up Comments: Schedule comments to be posted after the original post is published
Auto-Delete: Automatically remove posts after a specified time period on the specified networks
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.
Automatically share your published post to other accounts.
share.text
string
Custom caption for the shared post (defaults to original text).
share.account_ids
string[]
Target account IDs for auto-sharing.
share.after.duration
number
Delay value before first share.
share.after.unit
string
Time unit: Minute
, Hour
, Day
, Week
.
share.delay.duration
number
Delay between shares to multiple accounts.
share.delay.unit
string
Time unit for delay: Minute
, Hour
, Day
, Week
.
Facebook Pages→Groups, Twitter/X, LinkedIn, Pinterest, Mastodon, Threads, BlueSky, TikTok, Telegram, Google Business.
Note: Google Business Profiles require non-empty
text
. Push-notification posts cannot be auto-shared.
Schedule comments on your own post at specified delays.
comments[].text
string
Comment text.
comments[].language
string
Language code (optional).
comments[].delay.duration
number
Delay value after original post.
comments[].delay.unit
string
Minute
, Hour
, Day
, or Week
.
comments[].media
object
Optional media to include in the comment.
comments[].media.type
string
photo
, video
, or gif
.
comments[].media.path
string
File path or URL for the media.
comments[].media.caption
string
Caption for the attached media (optional).
comments[].media.thumbnail
string
Thumbnail URL for video media (optional).
Twitter/X, LinkedIn, Facebook Pages→Groups (when posting as a Page to a Group), Mastodon, Threads, BlueSky.
For Twitter/X, Mastodon, BlueSky, and Threads, comments become new posts in a thread. Recurring posts carry their comments each time; drafts and re-schedules require manual comment setup.
Automatically hide or delete a post after a set time.
delete.hide
boolean
true
to hide instead of delete (platform-dependent).
delete.delay.duration
number
Delay value after original post.
delete.delay.unit
string
Time unit: Minute
, Hour
, Day
, or Week
.
All scheduled networks except Instagram and story formats on Facebook/Instagram.
Instagram API does not support auto-delete. Certain post types (e.g., Stories) cannot be auto-deleted.
AutoShare: Provide custom text, respect audience time zones, and space out shares.
Comments: Keep them relevant, varied (text/media), and well-timed to maintain engagement.
Auto-Delete: Use for time-sensitive offers; prefer hiding to preserve history.
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.
General news or announcement with an image and a CTA button.
Standalone photo update (no special details).
Promote an upcoming event with start/end times and an optional link.
Advertise discounts or promotions with coupon codes and terms.
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
string
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).
Post Types
Updates, Photos, Events, Offers
Max Photo Size
5 MB
Min Photo Resolution
250 × 250 pixels
Call-to-Action Buttons
Supported (LEARN_MORE
, PROFILE
, etc.)
Events
Requires start
and end
fields
Offers
Supports coupon
and terms
Video Support
Not supported
Select Profile
Choose the Google Business Profile in accounts[].id
.
Choose Post Type
Update: general news with image & CTA.
Photo: standalone image.
Event: include details.type = "event"
, dates, and optional link.
Offer: include details.type = "offer"
, dates, coupon, and terms URL.
Compose & Schedule
Build your JSON, set state
and scheduled_at
, then POST to /posts/schedule
.
Use high-resolution images (≥250×250 pixels).
Craft clear CTAs to direct user action.
Include complete offer details (coupon & terms).
Set accurate event dates for reliable reminders.
Upload: Use to upload vertical video (9:16).
- Details on different content formats
- Information about scheduling posts
- How to publish content immediately
Add Media Upload or reference one photo via the .
Create and schedule Facebook status updates with vibrant backgrounds to boost engagement and visual appeal.
Include text_format_preset_id
in details
under the facebook
network:
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.
Use one of these text_format_preset_id
values to select a background:
ID
Background Description
106018623298955
Solid purple, background
365653833956649
Pink tropical plants, background image
618093735238824
Brown illustration, background image
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
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.
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.
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.
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.
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.
Each media object can include:
id
(string): Media ID
path
(string): Path to the media file
title
(string): Title of the media
caption
(string): Caption for the media
in_library
(boolean): Whether to save the media in the library
default_thumbnail
(string): Default thumbnail for videos
thumbnails
(object): Thumbnail information with real
and small
sizes
user_tags
(array): User tags in the media with position coordinates
collaborator_tags
(array): Collaborator tags in the media with position coordinates
product_tags
(array): Product tags in the media with position coordinates
The link object can include:
url
(string): URL of the link
call_to_action
(string): Call to action text
phone_number
(string): Phone number for call to action
provider_display
(string): Provider display information
original_description
(string): Original description from the link
original_title
(string): Original title from the link
description
(string): Custom description for the link
title
(string): Custom title for the link
default_image
(string): Default image for the link
images
(array): Images for the link
original_images
(array): Original images from the link
The details object can include:
type
(string): Type of post details (e.g., 'story')
feed
(boolean): Whether to share to feed (for Instagram reels)
reminder
(boolean): Whether the post is a reminder
title
(string): Title for event posts
start
(string): Start time for event posts
end
(string): End time for event posts
coupon
(string): Coupon code for offer posts
terms
(string): Terms for offer posts
audio
(string): Audio information
privacy
(string): Privacy setting
comment
(boolean): Whether to allow comments
duet
(boolean): Whether to allow duets (TikTok)
stitch
(boolean): Whether to allow stitches (TikTok)
promotional
(boolean): Whether the post is promotional
paid
(boolean): Whether the post is paid
language
(string): Language of the post
auto_add_music
(boolean): Whether to automatically add music
text_format_preset_id
(string): Text format preset ID
boost
(boolean): Whether to boost the post
The recycling object can include:
solo
(boolean): Whether to recycle as solo
gap
(integer): Gap between recycling
gap_freq
(string): Frequency of the gap (e.g., 'days', 'weeks')
label
(string): Label for recycling
start_date
(string): Start date for recycling
expire_date
(string): Expiration date for recycling
expire_count
(integer): Number of times to recycle before expiring
The recurring object can include:
start_date
(string): Start date for recurring posts
end_date
(string): End date for recurring posts
repeat
(string): Repeat frequency (e.g., 'daily', 'weekly')
repeat_rate
(integer): Rate of repetition
days_of_week
(array): Days of the week for weekly recurring posts
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)
Threads
Bluesky
For scheduled posts, all fields can be updated regardless of the target social network.
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).
Check the status of an asynchronous job, including URL media uploads
ID of the job to check
- Retrieve and filter posts
- Manage social media accounts
- Upload and manage media for posts
Parameter
Type
Required
Description
type
string
No
The type of post (e.g., 'text', 'photo', 'video', 'link', etc.)
text
string
No
The main content text of the post
url
string
No
URL for link posts
title
string
No
Title for the post (used in some networks)
excerpt
string
No
Excerpt for the post (used in some networks)
question
string
No
Question for poll posts
duration
integer
No
Duration for poll posts
Parameter
Type
Required
Description
featured_media
object
No
Featured media information with path to the media file
media
array
No
Media files attached to the post
Parameter
Type
Required
Description
link
object
No
Link information
Parameter
Type
Required
Description
details
object
No
Additional details for the post
Parameter
Type
Required
Description
recycling
object
No
Recycling settings
Parameter
Type
Required
Description
recurring
object
No
Recurring settings
Parameter
Type
Required
Description
content
array
No
Content blocks for rich text posts
location
object
No
Location information with id and name
labels
array
No
Labels for the post with name and color
options
array
No
Options for poll posts
categories
array
No
Categories for the post
sublinks
array
No
Sub-links for the post (same structure as link)
Network
Updatable Fields
• Text content
• Labels
YouTube
• Title (limited to 100 characters)
• Text/description (limited to 5000 characters)
• Labels
Google Business
• Text content (called "summary" in Google's API, limited to 1500 characters)
• Labels
• Text content (both description and message fields)
• Title (only for video posts, in the name field)
• Text format preset ID
• Labels
WordPress
• Title
• Content (HTML converted)
• Excerpt
• URL (slug)
• Featured media
• Categories
• Tags
• Labels
Telegram
• For status updates and links: Text content
• For other post types: Caption
• Labels
Mastodon
• Text content
• Title
• Language
• Poll attributes (options, duration)
• Labels
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.
Publish content right away
No scheduled_at
Time-sensitive announcements, breaking news
Publish at specific date/time
scheduled_at
Content calendar planning, timed campaigns
Save for later use
state: draft
Workspace collaboration, content preparation
Automatically scheduling posts
auto: true
Engagement optimization, workload reduction
Reuse content multiple times
recycling
object
Evergreen content, extended reach
Create repeating posts
recurring
object
Regular updates, consistent presence
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
Each account can have its own scheduled_at
Save work-in-progress content for review or refinement.
Endpoint:
Request example (private draft):
State Value
Description
Access Control
draft_private
Private draft
Only accessible to the creator
draft_public
or draft
Workspace-visible draft
Available to all workspace members with appropriate permissions
Let Publer pick the best posting times within a date range.
Endpoint:
Request example:
Parameter
Type
Required
Description
auto
boolean
Yes
Set to true
to enable auto-scheduling
range.start_date
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
Automatically repost content multiple times on a defined cadence.
Endpoint:
Request example:
Key recycling parameters:
Parameter
Type
Description
recycling.solo
boolean
When true
, recycles as individual post; otherwise groups with other recycled content
recycling.gap
number
Frequency number (1, 2, 3, etc.)
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)
Schedule content to repeat on a predefined pattern.
Endpoint:
Request example:
Parameter
Type
Required
Description
state
string
Yes
Must be set to recurring
recurring.start_date
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")
All publishing methods return a job ID for asynchronous processing:
Always verify success by checking the job status:
Example success response:
Status
Description
Next Action
working
Job is still being processed
Wait and check again
complete
Job finished (check failures object for partial failures)
Review results
failed
Job failed completely
Check error details and retry
Network-specific content: Override content for specific platforms
Multi-account publishing: Target multiple accounts in a single request
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 .
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.
Detailed platform-specific capabilities, content support, and limitations for all social networks available via the Publer API.
Network
Provider
Content Types
Media Support
Character Limit
facebook
status, photo, video, link, carousel
Images, videos, links
10,000
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
status, photo, video, link, document, polls
Images, videos, documents, links
3,000
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
Provider: facebook
Content Types:
Text posts
Text posts with background color
Photo posts (single or multiple)
Video posts
Link posts
Carousel posts
Stories
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
Reels
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
Reels: 3-90 seconds
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
Polls
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
GIFs limited to 15MB
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
Document posts (PDFs)
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
Shorts need to be shot vertically and be up to 3 minutes long.
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
Gif 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:
Network
Optimal Dimensions
Aspect Ratio
Max File Size
1200x630px
1.91:1
8MB
1080x1080px
1:1 to 4:5
8MB
1200x675px
16:9
5MB
1200x627px
1.91:1
5MB
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
Network
Optimal Dimensions
Aspect Ratio
Duration
Max File Size
1280x720px
16:9
1s - 240m
10GB
1080x1920px
9:16
3s - 60m
650MB
1280x720px
16:9
0.5s - 140s
512MB
1920x1080px
16:9
3s - 15m
5GB
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
Cross-Platform Posting
Provide network-specific overrides under networks
for optimal formatting.
Adjust media dimensions to each platform’s specs.
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.
- Detailed information about different content formats
- Guide to uploading and managing media files
- Options for publishing to different networks
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.
Array of post IDs to delete. Can include both MongoDB ObjectIDs and PostgreSQL IDs.
ID of the workspace containing the posts
Retrieves a list of social media accounts available in the specified workspace.
ID of the workspace to retrieve accounts from
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.
Specific media IDs to retrieve. If provided, pagination and other filters are ignored
Page number for pagination (0-based)
Filter by media types
Filter by used status
Filter by label IDs
Filter by source
Search term to filter media by name or caption
Indicates if the request is from an embedded view
ID of the workspace to retrieve media from
Retrieves signatures associated with specified accounts in a workspace.
ID of the workspace to retrieve signatures from
Array of account IDs to filter signatures by
Retrieves albums and watermarks for specified accounts in a workspace.
ID of the workspace to retrieve media options from
Array of account IDs to filter media options by
Search and retrieve Facebook locations based on a query string.
Search query for Facebook locations
Search and retrieve Instagram locations based on a query string.
Search query for Instagram locations
Schedule one or more posts for publishing. Supports immediate publishing, scheduled publishing, auto-scheduling, recurring posts, and more.
ID of the workspace to schedule posts in
Creates a new social media post. Can be scheduled for immediate publishing, future publishing, or saved as a draft.
ID of the workspace to create post in
Check the status of an asynchronous job, including URL media uploads
ID of the job to check
ID of the workspace to retrieve posts from
Upload a media file (image, video, or document) to be used in social media posts
The media file to upload
Supported formats:
Image: jpg, jpeg, png, gif
Video: mp4, mov, avi
Document: pdf, doc, docx, ppt, pptx
Upload media files by providing URLs
Upload type
single
Possible values: Whether to skip processing
false
Whether to save to media library
false
Retrieves a list of posts based on the specified filters.
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
Filter posts scheduled/published after this date
Required if to
is provided
Filter posts scheduled/published before this date
Required if from
is provided
Page number for pagination
Filter posts by multiple account IDs
Search query to filter posts by content
Filter by post type
Available options:
status
, link
, photo
, gif
, video
, reel
, story
, short
, poll
, document
, carousel
, article
Filter posts by team member ID
ID of the workspace to retrieve posts from
Extracts metadata from a URL including title, description, images, and more. Useful for previewing links before creating a post.
The URL to extract metadata from
Updates an existing post. The behavior differs depending on whether the post is already published or not.
ID of the post to update
ID of the workspace containing the post