v1Resources/Posts/postCreate a post
Create a post
Creates a post for a location or client and submits it to the selected platforms. This publishes real content: unless scheduledFor is set or draft is true, the post goes live on its target platforms immediately. A requested platform with no active connection, or a post missing a field required to go live, never fails the call — the content is saved as a draft instead; see the response schema for how that's reported.
post
posts:write/api/v1/postsRequest body
locationIdstringoptional
The location to post to. Provide this or clientId.
clientIdstringoptional
The client to post to at brand level. Provide this or locationId.
namestringrequired
Internal name/label for the post. Required, non-empty.
postTypestring (announcement | event | offer)required
Post type. event and offer are Google-only.
platformsarray of string (google | facebook | instagram | x | linkedin | pinterest | mastodon | bluesky | threads | tiktok)required
Target platforms. At least one is required.
connectionIdsarray of stringoptional
Explicit connection ids to publish through, instead of resolving platforms to connections.
messageGooglestringoptional
Caption for Google. Required when google is selected, unless draft.
messageFacebookstringoptional
Shared social caption for every non-Google selected platform. Required unless draft.
ctaTypestring (learn_more | sign_up | order_online | book | buy | call_now)optional
Call-to-action type.
ctaUrlstringoptional
Call-to-action destination URL.
mediaUrlsarray of objectoptional
Media to attach, one entry per platform attachment.
urlstringoptional
platformstringoptional
typestring (image | video)optional
eventTitlestringoptional
Event or offer title. Required for a Google event/offer, unless draft.
eventStartAtstringoptional
Event or offer start time, as an ISO 8601 timestamp. Required for a Google event/offer, unless draft.
eventEndAtstringoptional
Event or offer end time, as an ISO 8601 timestamp. Must be after the start.
offerTermsstringoptional
Offer terms.
offerCouponCodestringoptional
Offer coupon code.
offerRedeemUrlstringoptional
Offer redemption URL.
scheduledForstringoptional
Publish at this future ISO 8601 timestamp instead of immediately.
draftbooleanoptional
Save without publishing. Skips required-field checks; structural checks (limits, media rules) still apply.
Response
dataobjectoptional
A requested platform with no active connection, or a required field the post needs before it can go live, never fails this call — the post is still saved. When either gap exists, status is "no_connection" or "incomplete" and the post rides underneath as post.{id,status}; on a clean publish the top-level id/status describe the post directly.
idstringoptional
Unique identifier for the post.
statusstringoptional
Lifecycle status of the post: draft, scheduled, active, or error.
missingFieldsarray of stringoptional
Fields still needed before this post can go live, if any.
missingPlatformsarray of stringoptional
Requested platforms with no active connection, if any.
scopestring (location | client)optional
Whether the connection/field gap applies at the location or client level.
postobjectoptional
The post that was created or updated.
idstringoptional
Unique identifier for the post.
statusstringoptional
Lifecycle status of the post: draft, scheduled, active, or error.
Errors
400The request is missing a required parameter or is otherwise malformed.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
422The request is missing a required parameter or is otherwise malformed.
429Too many requests. Retry after the number of seconds in the Retry-After header.
post/api/v1/posts
Your API key
Request body*
{
"data": {
"id": "cm_post_abc123",
"status": "scheduled"
}
}