Skip to content

Blogs

Blogs let you publish long-form content to your SMBcrm account. List the blog sites already set up, read and create posts on them, and look up the authors and categories used to organize your posts.

Base URL: https://services.smbcrm.com · Version header: v3 · Scopes: blogs/list.readonly (list sites), blogs/posts.readonly (list posts), blogs/check-slug.readonly (check a URL slug), blogs/post.write (create a post), blogs/post-update.write (update a post), blogs/author.readonly (list authors), blogs/category.readonly (list categories). See Scopes.

GET/blogs/site/all

List the blog sites in your account.

scope blogs/list.readonlyauth Location token or PIT

locationId, skip, and limit are required. Add searchTerm to filter by name. Each site’s _id is the blogId you’ll use everywhere else on this page.

Terminal window
curl "https://services.smbcrm.com/blogs/site/all?locationId=<location_id>&limit=20&skip=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"data": [
{ "_id": "<blog_id>", "name": "Company Blog" }
]
}
GET/blogs/posts/all

List the blog posts on a blog site.

scope blogs/posts.readonlyauth Location token or PIT

locationId, blogId, limit, and offset are required. Add searchTerm to search by title, or status to filter to one of ALL, PUBLISHED, SCHEDULED, ARCHIVED, or DRAFT. See Pagination.

Terminal window
curl "https://services.smbcrm.com/blogs/posts/all?locationId=<location_id>&blogId=<blog_id>&limit=20&offset=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"blogs": [
{
"_id": "<post_id>",
"title": "5 Tips for Faster Onboarding",
"description": "Getting new customers to their first win faster.",
"status": "PUBLISHED",
"urlSlug": "5-tips-for-faster-onboarding",
"author": "<author_id>",
"categories": ["<category_id>"],
"tags": ["onboarding"],
"archived": false,
"publishedAt": "2026-01-15T00:00:00.000Z",
"updatedAt": "2026-01-15T00:00:00.000Z"
}
]
}
POST/blogs/posts

Create a blog post.

scope blogs/post.writeauth Location token or PIT

title, locationId, blogId, imageUrl, description, rawHTML, status, imageAltText, categories, author, urlSlug, and publishedAt are required. status is one of DRAFT, PUBLISHED, SCHEDULED, or ARCHIVED. tags and canonicalLink are optional.

Terminal window
curl -X POST https://services.smbcrm.com/blogs/posts \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"locationId": "<location_id>",
"blogId": "<blog_id>",
"title": "5 Tips for Faster Onboarding",
"description": "Getting new customers to their first win faster.",
"rawHTML": "<p>Getting new customers to their first win faster starts here.</p>",
"imageUrl": "https://example.com/images/onboarding.jpg",
"imageAltText": "A customer completing onboarding",
"status": "DRAFT",
"categories": ["<category_id>"],
"tags": ["onboarding"],
"author": "<author_id>",
"urlSlug": "5-tips-for-faster-onboarding",
"publishedAt": "2026-01-15T00:00:00.000Z"
}'
201 Created
{
"data": {
"_id": "<post_id>",
"title": "5 Tips for Faster Onboarding",
"description": "Getting new customers to their first win faster.",
"status": "DRAFT",
"urlSlug": "5-tips-for-faster-onboarding",
"author": "<author_id>",
"categories": ["<category_id>"],
"tags": ["onboarding"],
"archived": false,
"publishedAt": "2026-01-15T00:00:00.000Z",
"updatedAt": "2026-01-15T00:00:00.000Z"
}
}
PUT/blogs/posts/{postId}

Update an existing blog post.

scope blogs/post-update.writeauth Location token or PIT

This replaces the post, so send the full set of fields: title, locationId, blogId, imageUrl, description, rawHTML, status, imageAltText, categories, author, urlSlug, wordCount, and publishedAt are all required. tags and canonicalLink are optional.

Terminal window
curl -X PUT https://services.smbcrm.com/blogs/posts/<post_id> \
-H "Authorization: Bearer <token>" \
-H "Version: v3" \
-H "Content-Type: application/json" \
-d '{
"locationId": "<location_id>",
"blogId": "<blog_id>",
"title": "5 Tips for Faster Onboarding (Updated)",
"description": "Getting new customers to their first win faster.",
"rawHTML": "<p>Getting new customers to their first win faster starts here.</p>",
"imageUrl": "https://example.com/images/onboarding.jpg",
"imageAltText": "A customer completing onboarding",
"status": "PUBLISHED",
"categories": ["<category_id>"],
"tags": ["onboarding"],
"author": "<author_id>",
"urlSlug": "5-tips-for-faster-onboarding",
"wordCount": 850,
"publishedAt": "2026-01-15T00:00:00.000Z"
}'
200 OK
{
"updatedBlogPost": {
"_id": "<post_id>",
"title": "5 Tips for Faster Onboarding (Updated)",
"description": "Getting new customers to their first win faster.",
"status": "PUBLISHED",
"urlSlug": "5-tips-for-faster-onboarding",
"author": "<author_id>",
"categories": ["<category_id>"],
"tags": ["onboarding"],
"archived": false,
"publishedAt": "2026-01-15T00:00:00.000Z",
"updatedAt": "2026-01-15T00:00:00.000Z"
}
}
GET/blogs/posts/url-slug-exists

Check whether a post URL slug is already in use.

scope blogs/check-slug.readonlyauth Location token or PIT

locationId and urlSlug are required. Pass postId when you’re checking the slug for a post you’re editing, so it doesn’t collide with itself.

Terminal window
curl "https://services.smbcrm.com/blogs/posts/url-slug-exists?locationId=<location_id>&urlSlug=5-tips-for-faster-onboarding&postId=<post_id>" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{ "exists": false }
GET/blogs/authors

List the blog authors in your account.

scope blogs/author.readonlyauth Location token or PIT

locationId, limit, and offset are required.

Terminal window
curl "https://services.smbcrm.com/blogs/authors?locationId=<location_id>&limit=20&offset=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"authors": [
{
"_id": "<author_id>",
"name": "Jordan Lee",
"locationId": "<location_id>",
"canonicalLink": "https://example.com/authors/jordan-lee",
"updatedAt": "2026-01-15T00:00:00.000Z"
}
]
}
GET/blogs/categories

List the blog categories in your account.

scope blogs/category.readonlyauth Location token or PIT

locationId, limit, and offset are required.

Terminal window
curl "https://services.smbcrm.com/blogs/categories?locationId=<location_id>&limit=20&offset=0" \
-H "Authorization: Bearer <token>" \
-H "Version: v3"
200 OK
{
"categories": [
{
"_id": "<category_id>",
"label": "Product Updates",
"locationId": "<location_id>",
"urlSlug": "product-updates",
"canonicalLink": "https://example.com/categories/product-updates",
"updatedAt": "2026-01-15T00:00:00.000Z"
}
]
}
  • Social Planner: schedule and publish social content alongside your blog posts.
  • Locations: look up the locationId every endpoint on this page requires.
  • Scopes: permissions reference for the blogs/* scopes.