Create post
Create and optionally publish a post. Immediate posts (publishNow: true) include platformPostUrl in the response. Content is optional when media is attached, all platforms have customContent, every platform entry is an X Article (platformSpecificData.article), or every platform entry is a LinkedIn text-free reshare (platformSpecificData.reshareUrl with no text). See each platform's schema for media constraints.
Idempotency
Two layers of duplicate-protection apply, so safe-to-retry callers (network blips, n8n / Zapier retries, etc.) don't accidentally double-post.
1. Same-request idempotency (5-minute window). Pass an x-request-id header to mark a logical request. If a second request arrives with the same x-request-id while the first is in-flight (or within ~5 minutes of completion), we return HTTP 200 with the original post in the existingPost field — no new post is created. The official Zernio SDKs auto-generate a unique x-request-id per call. If you're using a generic HTTP client (curl, n8n's HTTP node, Zapier, custom code), either:
- Set a unique x-request-id per logical call (recommended — UUIDv4 is fine)
- Or simply omit the header — we'll treat each request as new
Common pitfall: if your workflow tool uses a single execution-level request ID and reuses it across multiple HTTP nodes (e.g. one ID for the whole run, shared across 6 different platform calls), every call after the first will look like a retry of the first and return its post. Generate a fresh ID per node.
2. Content-hash dedup (24-hour window). Independently, we hash (platform, accountId, content + media URLs) and reject duplicates within 24 hours with HTTP 409. This catches genuine "same content posted twice to the same account" cases regardless of x-request-id. Returns error, accountId, platform, and existingPostId so you can find the original. To intentionally re-post identical content within 24h, change something (the caption, the media, the account) — the dedup is keyed on the full content fingerprint.
Order: same-x-request-id retries (200) are checked first; if no idempotency match, the content-hash dedup (409) runs.
Headers
Optional client-generated request identifier for safe retry (idempotency). When two requests carry the same value, the second is treated as a retry of the first and returns the original post (HTTP 200) instead of creating a duplicate. Window is ~5 minutes from the first request. Generate a UUID per logical call. SDKs do this automatically; HTTP clients should set it themselves or omit it. See the operation description for the full idempotency contract.
Request body
Response
Post created
Example response
{
"post": {
"platforms": [
{
"platform": "twitter",
"status": "pending",
"platformPostId": "1234567890123456789",
"platformPostUrl": "https://twitter.com/acmecorp/status/1234567890123456789"
}
]
}
}Changes
Changed in 9 of the 26 revisions of this API.3517
- ▲
the
post/platforms/items/platformSpecificDataresponse's property type/format changed from/toobject/for status201response-property-type-changed
- ○
removed
TwitterPlatformDataThreadsPlatformDataFacebookPlatformDataInstagramPlatformDataLinkedInPlatformDataPinterestPlatformDataYouTubePlatformDataGoogleBusinessPlatformDataTikTokPlatformDataTelegramPlatformDataSnapchatPlatformDataRedditPlatformDataBlueskyPlatformDataDiscordPlatformDataSlackPlatformDatafrom thepost/platforms/items/platformSpecificDataresponse propertyoneOflist for the response status201response-property-one-of-removed
- ▲
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[InstagramPlatformData]/muteAudionew-optional-request-property
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[PinterestPlatformData]/boardSectionIdnew-optional-request-property
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[PinterestPlatformData]/isAiGeneratednew-optional-request-property
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[ThreadsPlatformData]/firstCommentnew-optional-request-property
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[InstagramPlatformData]/muteAudioto the response with the201statusresponse-optional-property-added
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[PinterestPlatformData]/boardSectionIdto the response with the201statusresponse-optional-property-added
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[PinterestPlatformData]/isAiGeneratedto the response with the201statusresponse-optional-property-added
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[ThreadsPlatformData]/firstCommentto the response with the201statusresponse-optional-property-added
- ○
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[TwitterPlatformData]/articlenew-optional-request-property
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[TwitterPlatformData]/articleto the response with the201statusresponse-optional-property-added
- ○
- ▲
the response property
post/platforms/items/platformPostUrlbecame nullable for the status201response-property-became-nullable
- ▲
the
post/platforms/items/platformPostUrlresponse's property type/format changed fromstring/uritostringnull/for status201response-property-type-changed
- ▲
- ●
added the new
platform_rate_limitenum value to thepost/platforms/items/errorCategoryresponse property for the response status201response-property-enum-value-added
- ●
added the new
quota_exhaustedenum value to thepost/platforms/items/errorCategoryresponse property for the response status201response-property-enum-value-added
- ●
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[BlueskyPlatformData]/langsnew-optional-request-property
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[BlueskyPlatformData]/langsto the response with the201statusresponse-optional-property-added
- ○
- ●
added the new
phoneenum value to thepost/platforms/items/accountId/oneOf[SocialAccount]/platformresponse property for the response status201response-property-enum-value-added
- ●
added the new
rcsenum value to thepost/platforms/items/accountId/oneOf[SocialAccount]/platformresponse property for the response status201response-property-enum-value-added
- ●
added the new
smsenum value to thepost/platforms/items/accountId/oneOf[SocialAccount]/platformresponse property for the response status201response-property-enum-value-added
- ●
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[LinkedInPlatformData]/pollnew-optional-request-property
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[LinkedInPlatformData]/pollto the response with the201statusresponse-optional-property-added
- ○
- ○
added the new optional request property
platforms/items/platformSpecificData/oneOf[InstagramPlatformData]/audioConfigurationnew-optional-request-property
- ○
added the optional property
post/platforms/items/platformSpecificData/oneOf[InstagramPlatformData]/audioConfigurationto the response with the201statusresponse-optional-property-added
- ○