Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
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.
Media Handling - Detailed guide for uploading and managing media
Network Reference - Platform-specific capabilities and limitations
Publishing Methods - Ways to publish different content types
Unlock the ability to schedule and publish long-form posts (up to 25,000 characters) to Twitter/X using the Publer API—exclusively for accounts with an X Premium subscription.
Twitter/X supports long-form posts (sometimes called "long posts" or "extended tweets") for users with an X Premium (formerly Twitter Blue) subscription, even at the Basic tier. These posts can contain up to 25,000 characters, far exceeding the standard 280-character limit.
With Publer, you can programmatically schedule and publish long-form posts via the API. Publer automatically detects your account’s eligibility and switches to the appropriate post type.
Accounts with X Premium: You can create and schedule long-form posts up to 25,000 characters.
Accounts without X Premium: Your post text will be truncated to the standard 280-character limit, and the long-form post type will be disabled.
Tip: Validate the post length in your integration to avoid surprises when publishing.
Long-form posts are not the same as Twitter threads. Threads are multiple connected posts; long-form posts are a single post with expanded character count.
Scheduling long-form posts is not possible directly on X/Twitter—use Publer’s API or platform to achieve this functionality.
To schedule a Twitter/X long-form post, set the network type to "long_post"
inside the details
object for the "twitter"
network:
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"twitter": {
"type": "status",
"details": {
"type": "long_post"
},
"text": "This is a twitter long post"
}
},
"accounts": [
{
"id": "66e011b94e299eb49376c715",
"scheduled_at": "2025-09-24T14:16+02:00"
}
]
}
]
}
}
networks.twitter.details.type
string
Must be "long_post"
for long-form posts
networks.twitter.text
string
Content of your long-form post (max 25,000 characters with X Premium)
X Premium Required: Only X Premium accounts can publish long-form posts. For other accounts, posts will be truncated to 280 characters.
Not for Threads: Use this format for single extended posts, not for multi-part threads.
API Detection: Publer automatically detects account eligibility for long-form posting.
Scheduling Limitation: Twitter/X doesn’t natively support scheduling long-form posts; this is enabled via Publer’s platform and API.
Check your account’s X Premium status before relying on long-form functionality.
Always validate post length to ensure your content is not unintentionally truncated.
Use long-form posts for in-depth announcements, articles, or detailed updates—threads remain better for sequential storytelling.
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:
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"text": "Exciting news! We're launching our new product line next week. #NewLaunch #ProductAnnouncement"
},
"twitter": {
"type": "status",
"text": "Big announcement coming next week! Our new product line is almost here 🚀 #NewLaunch #ProductAnnouncement"
},
"linkedin": {
"type": "status",
"text": "We're thrilled to announce our new product line launching next week. Stay tuned for more details! #NewLaunch #ProductAnnouncement"
}
},
"accounts": [
{
"id": "account_id_for_facebook",
"scheduled_at": "2025-05-20T14:30:00Z" // Optional, depending on publishing method
},
{
"id": "account_id_for_twitter",
"scheduled_at": "2025-05-20T15:00:00Z" // Optional, depending on publishing method
},
{
"id": "account_id_for_linkedin",
"scheduled_at": "2025-05-20T16:00:00Z" // Optional, depending on publishing method
}
]
}
]
}
}
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.
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:
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.
Publish posts directly to Twitter/X Communities using the Publer API. This feature enables you to reach targeted audiences and participate in focused discussions within X Communities—right from your own app or workflow.
Twitter/X Communities are spaces for people to connect, share, and discuss specific topics. Posts made in a Community are visible to anyone on X, but only Community members can engage (like, reply, etc.) with them.
You can only post to Communities you have joined.
Community posts help foster deeper engagement on niche topics or interests.
To publish a post inside a Twitter/X Community via the API, you need:
The Community ID (found in the X Community URL: https://x.com/i/communities/{COMMUNITY_ID}
)
The Community Name (for reference and clarity)
Whether to share the post with followers or not
Set the community
object inside the details
for the twitter
network configuration:
Go to the Community on X.
Look at the URL:
https://x.com/i/communities/1492410432069451776
The number at the end is your COMMUNITY_ID
.
Membership Required: You must be a member of the Community to post.
Engagement: Only members can engage with Community posts, but all users can view them.
Visibility: Community posts are public, but participation is limited to members.
Scheduling: You can schedule Community posts just like any other X post using Publer.
Join Relevant Communities: Ensure your X account has joined the Communities you wish to post in.
Use for Focused Engagement: Target posts to specific Communities for more relevant discussions.
Check Community Guidelines: Each Community may have its own moderation and content rules.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"twitter": {
"type": "status",
"details": {
"community": {
"id": "1508851391443484686",
"share_with_followers": true,
"name": "ALBANIANS"
}
},
"text": "Post to X communities"
}
},
"accounts": [
{
"id": "66e011b94e299eb49376c715",
"scheduled_at": "2025-07-03T10:28+02:00"
}
]
}
]
}
}
networks.twitter.details.community.id
string
Community ID (from the Community URL)
networks.twitter.details.community.name
string
Name of the Community (optional, for clarity in requests/logs)
networks.twitter.details.community.share_with_followers
boolean
Whether to share the post with followers or not (defaulted to true)
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
):
POST /api/v1/posts/schedule
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "gif",
"text": "Check out this fun GIF!",
"media": [
{
"id": "external",
"type": "gif",
"url": "https://media.giphy.com/media/xyz/giphy.gif",
"path": "https://media.giphy.com/media/xyz/giphy.gif",
"thumbnail": "https://media.giphy.com/media/xyz/200w.webp",
"name": "Fun Reaction GIF"
}
]
}
},
"accounts": [
{
"id": "ACCOUNT_ID",
"scheduled_at": "2025-08-02T23:18:00+02:00"
}
]
}
]
}
}
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)
Reference or upload your GIF via the Media Handling API.
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.
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.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"text": "Check out our latest news!"
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-06-13T10:16:00+02:00",
"signature": "680fa73ebd7195d33da6630b"
}
]
}
]
}
}
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)
Tag your posts with a real-world location to increase engagement and reach more local audiences. Publer supports location tagging for Facebook Pages, Instagram Business accounts and Threads accounts.
Location tagging attaches a physical place (such as a city, office, or venue) to your Facebook, Instagram or Threads post. This is especially helpful for businesses, events, and local marketing.
Use Publer’s dedicated endpoints to search and select the correct location for your post:
Location Object Example:
{
"id": "308281375929281",
"name": "Tirana",
"info": "Tirana, Albania ⋅ 590 follow this",
"verified": true
}
When creating or scheduling a post, use the location
object inside the relevant accounts
array:
Example Request:
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"text": "Facebook location"
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-06-14T10:21:00+02:00",
"location": {
"id": "308281375929281",
"name": "Tirana",
"info": "Tirana, Albania ⋅ 590 follow this",
"verified": null,
"address": "Tirana, Albania",
"checkins": "590"
}
}
]
}
]
}
}
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, Instagram Business and Threads accounts only.
Media Types Restrictions: You cannot add locations to Facebook regular videos, GIFs, Stories, or Reels scheduled via reminders.
Other Networks: Twitter/X no longer supports location tagging via API.
Search Required: Always search and select the correct location using the endpoints above before scheduling your post.
Always verify the location by name and address before tagging.
Tagging your business or event location can boost local discovery and engagement.
Use location tags for promotions, events, or posts relevant to specific regions
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.
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.
Below is an example showing a photo post scheduled for multiple platforms.
Omit scheduled_at
for immediate posts.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "photo",
"text": "Our new office is complete! #OfficeLife",
"media": [
{
"id": "asset123456",
"type": "photo",
"alt_text": "Modern office with open layout"
},
{
"id": "asset123457",
"type": "photo",
"alt_text": "Collaborative meeting area"
}
]
},
"instagram": {
"type": "photo",
"text": "We’ve moved into our new HQ! 🏢✨",
"media": [
{ "id": "asset123456", "type": "photo", "alt_text": "Modern office space" },
{ "id": "asset123457", "type": "photo", "alt_text": "Meeting area" }
]
}
},
"accounts": [
{ "id": "FB_ACCOUNT_ID", "scheduled_at": "2025-05-20T14:30:00Z" },
{ "id": "IG_ACCOUNT_ID", "scheduled_at": "2025-05-20T15:00:00Z" }
]
}
]
}
}
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).
* Omit scheduled_at
when publishing immediately.
Upload Images: Use the Media Handling API to upload files.
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.
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.
Use the Media Options endpoint to get all saved watermarks for your account(s):
Response Example:
[
{
"id": "63c675b54e299e9cf2b667ea",
"albums": [],
"watermarks": [
{
"id": "680fa7bebd7195d33da6630d",
"name": "Brand Logo",
"opacity": 80,
"size": 6,
"position": "bottom_right",
"default": true,
"image": "https://cdn.example.com/watermarks/logo.png"
}
]
}
]
Each watermark is account-specific.
You can create and manage multiple watermarks per account in Publer.
When creating or scheduling a post, specify the full watermark
object in the relevant accounts
array. The watermark settings will be applied to all attached media.
Example Request:
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "video",
"text": "Watermark posts",
"media": [
{
"id": "67da8532075cdb33821384c4",
"name": "Follow your dreams.mp4",
"path": "https://cdn.example.com/videos/67da8532075cdb33821384c4.mp4",
"type": "video"
}
],
"details": {
"type": "reel"
}
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-08-02T10:16:00+02:00",
"watermark": {
"id": "680fa7bebd7195d33da6630d",
"name": "Brand Logo",
"opacity": 80,
"size": 6,
"position": "bottom_right",
"default": true,
"image": "https://cdn.example.com/watermarks/logo.png"
}
}
]
}
]
}
}
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)
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 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.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "carousel",
"text": "Explore our top features!",
"sublinks": [
{
"url": "https://publer.com",
"title": "Publer Dashboard",
"description": "Manage all your social accounts in one place.",
"images": [
"https://cdn.publer.com/images/dashboard1.jpg",
"https://cdn.publer.com/images/dashboard2.jpg"
],
"default_image": 0,
"call_to_action": "LEARN_MORE"
},
{
"url": "https://publer.com/pricing",
"title": "Pricing Plans",
"description": "Find the right plan for your team.",
"images": [
"https://cdn.publer.com/images/pricing.jpg"
],
"default_image": 0,
"call_to_action": "SIGN_UP"
}
]
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-07-06T23:18:00Z"
}
]
}
]
}
}
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.
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.
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
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.
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.
Upload Media Use the to upload images or documents and collect their IDs.
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.
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
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
):
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.
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.
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
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"pinterest": {
"type": "photo",
"text": "Check out our new blog post!",
"media": [
{
"id": "external-0",
"type": "photo",
"path": "https://cdn.example.com/images/post1.jpg",
"thumbnail": "https://cdn.example.com/images/post1-thumb.jpg",
"alt_text": "Screenshot of our blog homepage"
}
],
"title": "Our Latest Blog Article",
"url": "https://publer.com/blog"
}
},
"accounts": [
{
"id": "YOUR_PINTEREST_ACCOUNT_ID",
"scheduled_at": "2025-07-05T14:16:00+02:00",
"album_id": "934145216398624390"
}
]
}
]
}
}
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).
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"linkedin": {
"type": "photo",
"text": "Description",
"media": [
{
"id": "680fa5cc48487c4ccbf8c146",
"name": "",
"caption": "Photo by KaLisa Veer on Unsplash:\n\nhttps://unsplash.com/photos/the-chrysler-building-is-framed-by-other-buildings-sdU2K71G8TI",
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/680fa5cc48487c4ccbf8c146.jpg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_680fa5cc48487c4ccbf8c146.jpg"
},
{
"id": "66f54e664e299e991eaafaeb",
"name": "pexels-christian-heitz-285904-842711.jpg",
"caption": null,
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66f54e664e299e991eaafaeb.jpg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66f54e664e299e991eaafaeb.jpg"
},
{
"id": "66f122324e299eb6bcc9af55",
"name": "",
"caption": "Photo by David Villasana on Unsplash:\n\nhttps://unsplash.com/photos/a-black-car-parked-in-front-of-a-white-building-Pf9KhOIylaM",
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66f122324e299eb6bcc9af55.jpg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66f122324e299eb6bcc9af55.jpg"
},
{
"id": "66df7c954e299e47dae172ac",
"name": "Cabin life",
"caption": "Photo by Karsten Winegeart on Unsplash:\n\nhttps://unsplash.com/photos/a-house-sitting-on-top-of-a-lush-green-hillside-xUyOWyCjJ_I",
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66df7c954e299e47dae172ac.jpg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66df7c954e299e47dae172ac.jpg"
},
{
"id": "66df7c8d4e299e47dae172ab",
"name": "",
"caption": "Photo by Edgar.infocus on Unsplash:\n\nhttps://unsplash.com/photos/a-car-driving-on-a-foggy-road-AwRcfU8T4dg",
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66df7c8d4e299e47dae172ab.jpg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66df7c8d4e299e47dae172ab.jpg"
},
{
"id": "66d04c6d4e299e51d9e1f747",
"name": "5574042b224543ecaf6989f6725dd555.jpeg",
"caption": null,
"path": "https://publer-dev.s3.amazonaws.com/uploads/photos/66d04c6d4e299e51d9e1f747.jpeg",
"type": "photo",
"thumbnail": "https://publer-dev.s3.amazonaws.com/uploads/photos/thumb_66d04c6d4e299e51d9e1f747.jpeg"
}
],
"details": {
"type": "document"
},
"title": "Title of the document"
}
},
"accounts": [
{
"id": "64c90c0d4e299e38dc86a284",
"scheduled_at": "2025-06-21T14:16+02:00"
}
]
}
]
}
}
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
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
POST /api/v1/posts/schedule
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"bulk": {
"state": "scheduled",
"posts": [{
"networks": {
"twitter": {
"type": "poll",
"text": "What’s your favorite season?",
"options": ["Spring", "Summer", "Autumn", "Winter"],
"duration": 7
},
"linkedin": {
"type": "poll",
"question": "What’s your favorite season?",
"text": "Vote now!",
"options": ["Spring", "Summer", "Autumn", "Winter"],
"duration": 7
},
"mastodon": {
"type": "poll",
"text": "What’s your favorite season?",
"options": ["Spring", "Summer", "Autumn", "Winter"],
"duration": 7
}
},
"accounts": [
{ "id": "TW_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" },
{ "id": "LI_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" },
{ "id": "MA_ACCOUNT_ID", "scheduled_at": "2025-06-10T09:00:00Z" }
]
}]
}
}
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).
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": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "video",
"media": [
{
"id": "67da8532075cdb33821384c4",
"thumbnails": [
{
"id": "67da852b075cdb33821384ba",
"small": "https://.../thumb_67da852b075cdb33821384ba.jpg",
"real": "https://.../67da852b075cdb33821384ba.jpg"
},
{
"id": "67da852c075cdb33821384bb",
"small": "https://.../thumb_67da852c075cdb33821384bb.jpg",
"real": "https://.../67da852c075cdb33821384bb.jpg"
}
],
"title": "My Video Title",
"default_thumbnail": 1
}
],
"text": "Optional description or caption"
}
},
"accounts": [
{
"id": "YOUR_ACCOUNT_ID",
"scheduled_at": "2025-05-24T23:07:00+02:00"
}
]
}
]
}
}
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
.
Upload Video Use the Media Handling endpoint to upload your video.
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).
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.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"text": "Your post content here"
}
},
"accounts": [
{
"id": "ACCOUNT_ID",
"scheduled_at": "2025-05-15T14:30:00Z", // Optional for immediate publishing
"share": { /* AutoShare config */ },
"comments":[ /* Follow-up comments */ ],
"delete": { /* Auto-Delete config */ }
}
]
}
]
}
}
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
.
"share": {
"text": "Check out our latest blog post!",
"account_ids": ["A_ID_1", "A_ID_2"],
"after": { "duration": 1, "unit": "Hour" },
"delay": { "duration": 15, "unit": "Minute" }
}
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).
"comments": [
{
"text": "First 100 customers get 10% off!",
"delay": { "duration": 2, "unit": "Hour" }
},
{
"text": "24 hours left—don’t miss out!",
"delay": { "duration": 1, "unit": "Day" },
"media": {
"type": "photo",
"path": "/path/to/countdown.jpg",
"caption": "Only one day left!"
}
}
]
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
.
"delete": {
"hide": false,
"delay": { "duration": 7, "unit": "Day" }
}
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.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"text": "Annual sale starts tomorrow—50% off sitewide!"
}
},
"accounts": [
{
"id": "A_ID_MAIN",
"scheduled_at": "2025-05-15T14:30:00Z",
"share": {
"text": "Don't miss our HUGE sale!",
"account_ids": ["A_ID_2", "A_ID_3"],
"after": { "duration": 1, "unit": "Hour" },
"delay": { "duration": 15, "unit": "Minute" }
},
"comments": [
{
"text": "Extra 10% off for first 100 buyers!",
"delay": { "duration": 2, "unit": "Hour" }
}
],
"delete": {
"hide": false,
"delay": { "duration": 2, "unit": "Day" }
}
}
]
}
]
}
}
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.
Content Types - Details on different content formats
Scheduled Posts - Information about scheduling posts
Immediate Publishing - How to publish content 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
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "link",
"text": "This is the link post type",
"link": {
"url": "http://publer.com",
"provider_display": "publer.com",
"description": "Boost your social media strategy with Publer’s suite of tools. Manage multiple accounts, schedule posts, collaborate with your team, and analyze performance—all in one place.",
"title": "Powerful Social Media Management & Scheduling Tools | Publer",
"images": [
"https://framerusercontent.com/assets/20xDElBhD9Xg3L7Cx7jVMwL56FU.png",
"https://framerusercontent.com/images/OVMI4DbyRxf9neKFkqKesfnSlHE.png",
"https://framerusercontent.com/images/ShxTAH03BsTSB29AeYZzpPZqi8.jpg",
"https://framerusercontent.com/images/iuLpS9a0syZanung3ZFGrbYXTKM.jpg",
"https://framerusercontent.com/images/d7Gg6Hvachd0DuRzXGKoB1szAl4.jpg"
],
"default_image": 0,
"call_to_action": "LEARN_MORE",
"phone_number": ""
}
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-05-24T23:18+02:00"
}
]
}
]
}
}
bulk.state
string
scheduled
, publish
, or a draft state
networks.{provider}.type
string
Must be "link"
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)
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:
{
"bulk": {
"state": "scheduled",
"posts": [{
"networks": {
"instagram": {
"type": "video",
"text": "Our summer Reel!",
"media": [{
"id": "67c9630bedeb539dd87dd23c",
"path": "https://cdn.publer.com/videos/67c9630b.mp4",
"type": "video",
"default_thumbnail": 1
}],
"details": {
"type": "reel",
"audio": "Custom audio name",
"feed": false
}
}
},
"accounts": [{
"id": "67d1f5f13d9895bab04393ec",
"scheduled_at": "2025-07-27T14:16:00+02:00"
}]
}]
}
}
{
"bulk": {
"state": "scheduled",
"posts": [{
"networks": {
"youtube": {
"type": "video",
"title": "Our Latest Short",
"text": "Quick highlights!",
"media": [{
"id": "67c9630bedeb539dd87dd23c",
"path": "https://cdn.publer.com/videos/67c9630b.mp4",
"type": "video"
}],
"details": {
"type": "short",
"privacy": "public"
}
}
},
"accounts": [{
"id": "64abc34d4e299e662bfd6389",
"scheduled_at": "2025-08-01T14:16:00+02:00"
}]
}]
}
}
{
"bulk": {
"state": "scheduled",
"posts": [{
"networks": {
"instagram": {
"type": "photo",
"text": "Behind the scenes!",
"media": [{
"id": "680fa5cc48487c4ccbf8c146",
"path": "https://cdn.publer.com/photos/680fa5cc.jpg",
"type": "photo"
}],
"details": {
"type": "story"
}
}
},
"accounts": [{
"id": "67d1f5f13d9895bab04393ec",
"scheduled_at": "2025-08-24T14:16:00+02:00"
}]
}]
}
}
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)
Upload: Use Media API to upload vertical video (9:16).
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.
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.
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.
Add Media Upload or reference one photo via the .
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.
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"google": {
"type": "photo",
"text": "Our new feature is live!\npubler.com",
"title": "LEARN_MORE",
"media": [
{
"id": "68133d70f09cb4aa6377d2dc",
"path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
"thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
"type": "photo"
}
]
}
},
"accounts": [
{
"id": "GOOGLE_ACCOUNT_ID",
"scheduled_at": "2025-05-24T08:46:00-04:00"
}
]
}
]
}
}
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"google": {
"type": "photo",
"details": { "type": "photo" },
"text": "Our office view today!",
"title": "PROFILE",
"media": [
{
"id": "68133d70f09cb4aa6377d2dc",
"path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
"thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
"type": "photo"
}
]
}
},
"accounts": [
{
"id": "GOOGLE_ACCOUNT_ID",
"scheduled_at": "2025-05-24T08:50:00-04:00"
}
]
}
]
}
}
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"google": {
"type": "photo",
"details": {
"type": "event",
"title": "Summer Workshop",
"start": "2025-06-07T12:50:00Z",
"end": "2025-08-03T12:50:00Z"
},
"text": "Join our Summer Workshop series!",
"title": "LEARN_MORE",
"url": "https://publer.com/events",
"media": [
{
"id": "68133d70f09cb4aa6377d2dc",
"path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
"thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
"type": "photo"
}
]
}
},
"accounts": [
{
"id": "GOOGLE_ACCOUNT_ID",
"scheduled_at": "2025-06-07T08:50:00-04:00"
}
]
}
]
}
}
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"google": {
"type": "photo",
"details": {
"type": "offer",
"title": "Spring Sale",
"start": "2025-05-28T12:50:00Z",
"end": "2025-10-02T12:50:00Z",
"coupon": "30%OFF",
"terms": "https://publer.com/terms"
},
"text": "Enjoy 30% off sitewide!",
"url": "https://publer.com/sale",
"media": [
{
"id": "68133d70f09cb4aa6377d2dc",
"path": "https://cdn.publer.com/uploads/photos/68133d70f09cb4aa6377d2dc.png",
"thumbnail": "https://cdn.publer.com/uploads/photos/thumb_68133d70f09cb4aa6377d2dc.png",
"type": "photo"
}
]
}
},
"accounts": [
{
"id": "GOOGLE_ACCOUNT_ID",
"scheduled_at": "2025-06-14T08:50:00-04:00"
}
]
}
]
}
}
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
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:
{
"bulk": {
"state": "scheduled",
"posts": [
{
"networks": {
"facebook": {
"type": "status",
"details": {
"text_format_preset_id": "1868855943417360"
},
"text": "Status update with background color\n\npubler.com"
}
},
"accounts": [
{
"id": "63c675b54e299e9cf2b667ea",
"scheduled_at": "2025-06-21T23:18:00+02:00"
}
]
}
]
}
}
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.
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
GET /api/v1/workspaces/{workspace_id}/signatures HTTP/1.1
Host: app.publer.com
Authorization: YOUR_API_KEY
Accept: */*
[
{
"account_id": "text",
"signatures": [
{
"id": "text",
"label": "text",
"text": "text",
"default": true,
"in_photo_captions": true
}
]
}
]
Search and retrieve Facebook locations based on a query string.
Search query for Facebook locations
GET /api/v1/locations/facebook HTTP/1.1
Host: app.publer.com
Accept: */*
[
{
"id": "text",
"name": "text",
"info": "Main office in New York City ⋅ 1,030 follow this",
"verified": true
}
]
Search and retrieve Instagram locations based on a query string.
Search query for Instagram locations
GET /api/v1/locations/instagram HTTP/1.1
Host: app.publer.com
Accept: */*
[
{
"id": "text",
"name": "text",
"info": "Main office in New York City ⋅ 1,030 follow this",
"verified": true
}
]
Search and retrieve Threads locations based on a query string.
Search query for Threads locations
GET /api/v1/locations/threads HTTP/1.1
Host: app.publer.com
Accept: */*
[
{
"id": "text",
"name": "text",
"info": "Main office in New York City"
}
]
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
POST /api/v1/posts/links HTTP/1.1
Host: app.publer.com
Authorization: YOUR_API_KEY
Content-Type: application/x-www-form-urlencoded
Accept: */*
Content-Length: 14
"url='text'"
{
"link": {
"title": "text",
"description": "text",
"url": "text",
"original_url": "text",
"images": [
"text"
],
"favicon": "text",
"provider_display": "text",
"type": "link"
}
}