Posts
Create, read, and publish social and Google Business Profile posts.
Returns posts for one location, most recently created first, with per-platform submission state and aggregate stats.
List posts
/api/v1/posts{
"data": {
"rows": [
{
"id": "cm_post_abc123",
"name": "Fall Special Announcement",
"type": "announcement",
"status": "scheduled",
"postDate": "2026-02-10T15:00:00.000Z",
"platforms": [
"google",
"facebook"
],
"firstMediaUrl": "https://cdn.synup.com/uploads/a1/promo.jpg",
"firstMediaType": "image",
"submissions": [
{
"platform": "google",
"status": "pending",
"postLink": null,
"reviewState": null,
"errorMessage": null
},
{
"platform": "facebook",
"status": "pending",
"postLink": null,
"reviewState": null,
"errorMessage": null
}
],
"messagePreview": "Join us this weekend for our fall special — 20% off all services!",
"views": null,
"clicks": null,
"errorMsg": null,
"deletedOn": null
}
],
"total": 1,
"stats": {
"totalPosts": 12,
"totalViews": 4300,
"totalClicks": 210,
"totalEngagement": 96
}
}
}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.
Create a post
/api/v1/posts{
"data": {
"id": "cm_post_abc123",
"status": "scheduled"
}
}Returns an engagement analytics rollup — summary totals, a per-platform breakdown, trend series, and top posts — across a client's brand-level platform connections.
Get post analytics
/api/v1/posts/analytics{
"data": {
"summary": {
"totalPosts": 18,
"totalViews": 5400,
"totalReactions": 320,
"totalShares": 44,
"totalComments": 61,
"periodDays": 30
},
"prevSummary": {
"totalPosts": 14,
"totalViews": 4100,
"totalReactions": 260,
"totalShares": 30,
"totalComments": 48
},
"byPlatform": [
{
"platform": "facebook",
"label": "Facebook",
"totalPosts": 10,
"totalViews": 3200,
"totalReactions": 210,
"totalShares": 30,
"totalComments": 40
},
{
"platform": "instagram",
"label": "Instagram",
"totalPosts": 8,
"totalViews": 2200,
"totalReactions": 110,
"totalShares": 14,
"totalComments": 21
}
],
"prevByPlatform": [
{
"platform": "facebook",
"label": "Facebook",
"totalPosts": 8,
"totalViews": 2500,
"totalReactions": 170,
"totalShares": 20,
"totalComments": 32
}
],
"trend": {
"dates": [
"2026-01-15",
"2026-01-16"
],
"series": [
{
"platform": "facebook",
"label": "Facebook",
"values": [
4,
6
]
}
]
},
"engagementTrend": {
"dates": [
"2026-01-15",
"2026-01-16"
],
"series": [
{
"platform": "facebook",
"label": "Facebook",
"views": [
180,
210
],
"reactions": [
12,
15
],
"shares": [
2,
3
],
"comments": [
4,
5
],
"reach": [
900,
1100
]
}
]
},
"postsTrend": {
"dates": [
"2026-01-15",
"2026-01-16"
],
"series": [
{
"platform": "facebook",
"label": "Facebook",
"values": [
1,
2
]
}
]
},
"allPosts": [
{
"submissionId": "cm_sub_xyz789",
"platform": "facebook",
"platformPostId": "1234567890",
"postLink": "https://www.facebook.com/1234567890",
"publishedAt": "2026-01-16T14:00:00.000Z",
"contentPreview": "Join us this weekend for our fall special — 20% off all services!",
"totalViews": 890,
"totalReactions": 42,
"totalShares": 6,
"totalComments": 9,
"totalReach": 1450,
"engRate": 0.064
}
]
}
}Returns a single post, including its per-platform submission performance.
Get a post
/api/v1/posts/{id}{
"data": {
"id": "cm_post_abc123",
"name": "Fall Special Announcement",
"type": "announcement",
"status": "scheduled",
"postType": "announcement",
"clientId": "cm_client_1",
"locationId": "cm_loc_1",
"locationName": "Acme Dental — Downtown",
"clientName": "Acme Dental",
"platforms": [
"google",
"facebook"
],
"messageGoogle": "Join us this weekend for our fall special — 20% off all services!",
"messageFacebook": "Join us this weekend for our fall special — 20% off all services!",
"ctaType": "learn_more",
"ctaUrl": "https://acmedental.example.com/fall-special",
"ctaUrlFacebook": null,
"xThread": false,
"ctaJson": {
"ctaType": "learn_more",
"ctaUrl": "https://acmedental.example.com/fall-special",
"ctaUrlFacebook": null,
"xThread": false
},
"mediaUrls": [
{
"url": "https://cdn.synup.com/uploads/a1/promo.jpg",
"platform": "facebook",
"type": "image"
}
],
"eventTitle": null,
"eventStartAt": null,
"eventEndAt": null,
"offerTerms": null,
"offerCouponCode": null,
"offerRedeemUrl": null,
"scheduledFor": "2026-02-10T15:00:00.000Z",
"createdAt": "2026-01-20T09:12:00.000Z",
"performance": [
{
"submissionId": "cm_sub_xyz789",
"connectionId": "cm_conn_1",
"site": "facebook",
"views": 890,
"clicks": null,
"reactions": 42,
"shares": 6,
"comments": 9,
"status": "active",
"platformPostId": "1234567890",
"postLink": "https://www.facebook.com/1234567890",
"reviewState": null,
"errorMessage": null
}
]
}
}Updates an editable post (draft, scheduled, error, or active) and reconciles its platform submissions to match. If the post is not scheduled and not saved as a draft, this can publish or change what's already live on its platforms.
Update a post
/api/v1/posts/{id}{
"data": {
"id": "cm_post_abc123",
"name": "Fall Special Announcement (updated)",
"type": "announcement",
"status": "scheduled",
"postType": "announcement",
"clientId": "cm_client_1",
"locationId": "cm_loc_1",
"platforms": [
"google",
"facebook"
],
"messageGoogle": "Join us this weekend — now 25% off all services!",
"messageFacebook": "Join us this weekend — now 25% off all services!",
"ctaType": "learn_more",
"ctaUrl": "https://acmedental.example.com/fall-special",
"ctaUrlFacebook": null,
"xThread": false,
"ctaJson": {
"ctaType": "learn_more",
"ctaUrl": "https://acmedental.example.com/fall-special",
"ctaUrlFacebook": null,
"xThread": false
},
"mediaUrls": [
{
"url": "https://cdn.synup.com/uploads/a1/promo.jpg",
"platform": "facebook",
"type": "image"
}
],
"eventTitle": null,
"eventStartAt": null,
"eventEndAt": null,
"offerTerms": null,
"offerCouponCode": null,
"offerRedeemUrl": null,
"scheduledFor": "2026-02-10T15:00:00.000Z",
"createdAt": "2026-01-20T09:12:00.000Z",
"performance": []
}
}Unpublishes a post from every platform it was submitted to — a real, immediate action that can't be undone. Only once every platform unpublish succeeds does the post also disappear from this API; if any platform fails, nothing is archived and the post stays visible so the failure can be retried. This API never permanently deletes the post record.
Unpublish and delete a post
/api/v1/posts/{id}{
"data": {
"id": "cm_post_abc123",
"ok": true,
"deleted": 2,
"failed": []
}
}Force-submits a draft or errored post immediately, retrying any pending or failed platform submissions. This sends real content to the post's connected platforms right now.
Publish a post now
/api/v1/posts/{id}/publish{
"data": {
"retrying": 2
}
}