Blog posts are the site's articles: a title, a short excerpt for listings and previews, the body in HTML, images, and a category (a blogpost/ collection) for filtering. A post can be limited to signed-in users or to subscribers of a price plan.
Endpoints that need a token: the site owner creates it in their admin (Developers > API reference). AI assistants: how to ask the user for one.
13 endpoints.
Likes or unlikes a post and notifies its author. Calling it again takes the like back. Answers { like }.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://smartman.max-media.io/blogpost-likes/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}Opens a post in the app (redirects to its app page). For links shared from the app: the website sends the visitor to the post in the app.
Works without a token; with a user token the answer is personal.
The blog post's URL slug, as in its address on the site.
curl -X GET 'http://smartman.max-media.io/blogpost-redirect/{url}?ionic=true'{
"zip_code": "example",
"city": "example",
"address": "example",
"contact": "example",
"email": "jane@example.com",
"google_app": "example",
"workhours": "example",
"logo": "6543210fedcba98765432100",
"site_name": "Example",
"domain": "example",
"stock_domain": "example",
"isMarket": false,
"forbidden_collections": [
{
"collection_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
],
"isInit": false,
"template": "0000",
"lang": "en",
"favicon": "6543210fedcba98765432100",
"cacheEnabled": false,
"has_completed_startup_prompt": true,
"gmb_location": "example",
"ga_property": "example",
"site_generated_at": "2026-11-04T12:00:00.000Z",
"admin_first_opened_at": "2026-11-04T12:00:00.000Z",
"admin_last_opened_at": "2026-11-04T12:00:00.000Z",
"allowedComponents": {
"services": false,
"products": false,
"blogposts": false,
"programs": false
}
}Saves or unsaves a post for the signed-in user. Calling it again unsaves.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://smartman.max-media.io/blogpost-saves/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}The blog page, or the posts as JSON with ?ionic: filtered by category and published state, and sorted. Paged with ?skip, filtered by ?collection and ?published, newest first by default. Cached for an hour.
Needs a signed-in user whose plan grants access.
true: only blog posts that are published; false: only those that are not.
The order of the results.
Only results in this collection.
How many results to skip - for paging.
Returns a list of BlogPost objects.
curl -X GET 'http://smartman.max-media.io/blogposts?ionic=true&published=...&sortBy=...&collection=...' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}
]Creates a blog post. url is made from title, so do not send one. Answers 201 with the post and re-renders the home page. To create it for an account you manage, send on_behalf_of (403 without rights).
Needs the token of a signed-in user.
Title of blogpost.
The blog post's on behalf of.
Returns the BlogPost object.
curl -X POST 'http://smartman.max-media.io/blogposts?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "title": "...", "on_behalf_of": "..." }'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}Deletes several posts, ids comma-separated. Answers the ids that were deleted.
Needs the token of a signed-in user.
The blog post's delete ids.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/blogposts-multiple/{delete_ids}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Applies the same changes (updates) to several posts, ids comma-separated. Answers the ids that were changed.
Needs the token of a signed-in user.
The blog post's patch ids.
Collection, to which the blog post belongs.
The blog post's grouping.
The blog post's updates.
Returns the BlogPost object.
curl -X PATCH 'http://smartman.max-media.io/blogposts-multiple/{patch_ids}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "collection_id": "...", "grouping": "...", "updates": "..." }'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}Updates a blog post. Fields outside the allowed list are silently ignored. Answers the post. 403 unless the author, an admin or a manager with rights.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://smartman.max-media.io/blogposts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}Deletes a blog post. Answers the deleted post. 403 unless the author or an admin.
Needs the token of a signed-in user.
The ID of the blog post.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/blogposts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'A post's first picture. Answers the image bytes. Cached for an hour.
Public - no token needed.
The ID of the blog post.
Returns the BlogPost object.
curl -X GET 'http://smartman.max-media.io/blogposts/{id}/media?ionic=true'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}Uploads a picture to a post (media, form field). Multipart upload; the picture is resized and added to the post's medias. 404 when there is no such post.
Needs the token of a signed-in user.
The ID of the blog post.
curl -X POST 'http://smartman.max-media.io/blogposts/{id}/media?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Removes a post's last picture. Deletes the media record too.
Needs the token of a signed-in user.
The ID of the blog post.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/blogposts/{id}/media/delete_last?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'A blog post's page by its url, or the post as JSON with ?ionic. By url, not id. 404 when there is no such post. Comes with its likes and three related posts.
Pages limited to some users check the token when one is sent.
The blog post's URL slug, as in its address on the site.
Returns the BlogPost object.
curl -X GET 'http://smartman.max-media.io/blogposts/{url}?ionic=true'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"thumbnail": "example",
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"_id": "6543210fedcba98765432100"
}
],
"published": true,
"owner_id": "6543210fedcba98765432100",
"connected_account_owner_id": "6543210fedcba98765432100",
"collection_id": "6543210fedcba98765432100",
"selected": false,
"custom_1": "example",
"custom_2": "example",
"custom_3": "example",
"about_page": "6543210fedcba98765432100",
"suitability_price_plans": [
"6543210fedcba98765432101"
],
"isSuitable": false,
"reference_id": "example",
"wildcard_url": {},
"likes": [
"6543210fedcba98765432101"
],
"views": [
"6543210fedcba98765432101"
],
"total_views": 0,
"saves": [
"6543210fedcba98765432101"
],
"times_showed": 0
}