Skip to content

Social Planner

Social Planner schedules and manages social media posts across the accounts connected to your SMBcrm account/location. Use it to list connected accounts, search or fetch existing posts, and create, update, or delete scheduled posts.

Base URL: https://services.smbcrm.com · Version header: v3 · Scopes: socialplanner/account.readonly, socialplanner/post.readonly, socialplanner/post.write, socialplanner/category.readonly. A few endpoints below require only a valid token — no additional scope. See Scopes.

GET/social-media-posting/{locationId}/accounts

List the social accounts connected to your SMBcrm account/location.

scope socialplanner/account.readonlyauth Location token or PIT
Terminal window
curl https://services.smbcrm.com/social-media-posting/<location_id>/accounts \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"success": true,
"statusCode": 200,
"message": "Accounts fetched successfully",
"results": {
"accounts": [
{
"id": "<social_account_id>",
"platform": "facebook",
"name": "Acme Roofing",
"avatar": "https://cdn.example.com/avatar-1.png",
"isActive": true
},
{
"id": "<social_account_id>",
"platform": "instagram",
"name": "@acmeroofing",
"avatar": "https://cdn.example.com/avatar-2.png",
"isActive": true
}
]
}
}

Use the id values from this response as accountIds when creating a post.

POST/social-media-posting/{locationId}/posts/list

Search scheduled and published posts with filters and paging. This is the recommended way to list posts.

scope socialplanner/post.readonlyauth Location token or PIT

skip, limit, fromDate, toDate, and includeUsers are required — and sent as strings, not numbers or booleans. Add accounts to filter to specific connected accounts. See Pagination.

Terminal window
curl -X POST https://services.smbcrm.com/social-media-posting/<location_id>/posts/list \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"accounts": "<social_account_id>",
"skip": "0",
"limit": "20",
"fromDate": "2026-07-01T00:00:00.000Z",
"toDate": "2026-07-31T23:59:59.999Z",
"includeUsers": "false"
}'
200 OK
{
"success": true,
"statusCode": 200,
"message": "Posts fetched successfully",
"results": {
"posts": [
{
"id": "<post_id>",
"accountIds": ["<social_account_id>"],
"type": "post",
"summary": "Fall is here — 10% off roof inspections this week.",
"status": "scheduled",
"scheduleDate": "2026-07-15T14:00:00.000Z"
}
],
"count": 1
}
}
GET/social-media-posting/{locationId}/posts/{postId}

Fetch a single post by ID.

auth Location token or PIT

This endpoint needs only a valid token — no additional scope.

Terminal window
curl https://services.smbcrm.com/social-media-posting/<location_id>/posts/<post_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"success": true,
"statusCode": 200,
"message": "Post fetched successfully",
"results": {
"post": {
"id": "<post_id>",
"accountIds": ["<social_account_id>"],
"type": "post",
"summary": "Fall is here — 10% off roof inspections this week.",
"media": [{ "url": "https://cdn.example.com/fall-promo.jpg", "type": "image/jpeg" }],
"status": "scheduled",
"scheduleDate": "2026-07-15T14:00:00.000Z"
}
}
}
POST/social-media-posting/{locationId}/posts

Create and schedule a post to one or more connected accounts.

scope socialplanner/post.writeauth Location token or PIT

accountIds, type, and userId (the SMBcrm user creating the post) are required. type is the post format — post, story, or reel. Each media item needs a url and a type, which is its MIME type (image/jpeg, image/png, video/mp4, and so on).

Terminal window
curl -X POST https://services.smbcrm.com/social-media-posting/<location_id>/posts \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"accountIds": ["<social_account_id>"],
"type": "post",
"userId": "<user_id>",
"summary": "Fall is here — 10% off roof inspections this week.",
"media": [{ "url": "https://cdn.example.com/fall-promo.jpg", "type": "image/jpeg" }],
"scheduleDate": "2026-07-15T14:00:00.000Z"
}'
201 Created
{
"success": true,
"statusCode": 201,
"message": "Post created successfully",
"results": {
"post": {
"id": "<post_id>",
"accountIds": ["<social_account_id>"],
"type": "post",
"summary": "Fall is here — 10% off roof inspections this week.",
"status": "scheduled",
"scheduleDate": "2026-07-15T14:00:00.000Z"
}
}
}

Platform-specific detail objects — facebookPostDetails, instagramPostDetails, youtubePostDetails, tiktokPostDetails, linkedinPostDetails, pinterestPostDetails, and gmbPostDetails — carry per-platform options (privacy level, comments, boards, and so on) for whichever accounts in accountIds belong to that platform.

Both endpoints below need only a valid token — no additional scope.

PUT/social-media-posting/{locationId}/posts/{postId}

Update fields on an existing post.

auth Location token or PIT

Send the full post payload — accountIds, type, and userId are required, same as creating a post.

Terminal window
curl -X PUT https://services.smbcrm.com/social-media-posting/<location_id>/posts/<post_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"accountIds": ["<social_account_id>"],
"type": "post",
"userId": "<user_id>",
"summary": "Fall is here — 15% off roof inspections this week.",
"scheduleDate": "2026-07-16T14:00:00.000Z"
}'
200 OK
{ "success": true, "statusCode": 200, "message": "Post updated successfully" }
DELETE/social-media-posting/{locationId}/posts/{postId}

Permanently delete a post.

auth Location token or PIT
Terminal window
curl -X DELETE https://services.smbcrm.com/social-media-posting/<location_id>/posts/<post_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"success": true,
"statusCode": 200,
"message": "Post deleted successfully",
"results": { "postId": "<post_id>" }
}

Categories and tags help organize posts inside Social Planner.

GET/social-media-posting/{locationId}/categories

List the categories available for organizing posts.

scope socialplanner/category.readonlyauth Location token or PIT

Add searchText, limit, and skip to search and page through the results.

Terminal window
curl https://services.smbcrm.com/social-media-posting/<location_id>/categories \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"success": true,
"statusCode": 200,
"message": "Categories fetched successfully",
"results": {
"count": 2,
"categories": [
{ "id": "<category_id>", "name": "Promotions" },
{ "id": "<category_id>", "name": "Customer Stories" }
]
}
}
GET/social-media-posting/{locationId}/tags

List the tags available for organizing posts.

auth Location token or PIT

Needs only a valid token — no additional scope. Add searchText, limit, and skip to search and page through the results.

Terminal window
curl https://services.smbcrm.com/social-media-posting/<location_id>/tags \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"success": true,
"statusCode": 200,
"message": "Tags fetched successfully",
"results": {
"tags": [
{ "id": "<tag_id>", "name": "seasonal" },
{ "id": "<tag_id>", "name": "evergreen" }
],
"count": 2
}
}
  • Locations. Connected accounts and posts belong to a single SMBcrm account/location.
  • Blogs, another content type you can create and publish through the API.