API ReferenceView as MarkdownOpenAPI

Blog posts

View as Markdown

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.

Like or unlike a blog post

Likes or unlikes a post and notifies its author. Calling it again takes the like back. Answers { like }.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns the BlogPost object.

Status codes

200 400 401 404 500

PATCH/blogpost-likes/:id
curl -X PATCH 'http://smartman.max-media.io/blogpost-likes/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "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
}

Find a blog post by its address

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.

Optional user

Works without a token; with a user token the answer is personal.

Path parameters
urlstringRequired

The blog post's URL slug, as in its address on the site.

Status codes

200 500

GET/blogpost-redirect/:url
curl -X GET 'http://smartman.max-media.io/blogpost-redirect/{url}?ionic=true'
Response
{
  "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
  }
}

Save or unsave a blog post

Saves or unsaves a post for the signed-in user. Calling it again unsaves.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns the BlogPost object.

Status codes

200 400 401 404 500

PATCH/blogpost-saves/:id
curl -X PATCH 'http://smartman.max-media.io/blogpost-saves/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "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
}

List all blog posts

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.

User with accessOptional user

Needs a signed-in user whose plan grants access.

Query parameters
publishedstring

true: only blog posts that are published; false: only those that are not.

sortBystring

The order of the results.

collectionstring

Only results in this collection.

skipstring

How many results to skip - for paging.

Returns

Returns a list of BlogPost objects.

Status codes

200 401 402 404 500

GET/blogposts
curl -X GET 'http://smartman.max-media.io/blogposts?ionic=true&published=...&sortBy=...&collection=...' \
  -H 'Authorization: Bearer <TOKEN>'
Response
[
  {
    "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
  }
]

Create a blog post

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).

User token

Needs the token of a signed-in user.

Parameters
titlestring

Title of blogpost.

on_behalf_ofstring

The blog post's on behalf of.

Returns

Returns the BlogPost object.

Status codes

201 400 401 403 500

POST/blogposts
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": "..." }'
Response
{
  "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
}

Delete multiple blog posts

Deletes several posts, ids comma-separated. Answers the ids that were deleted.

User token

Needs the token of a signed-in user.

Path parameters
delete_idsstringRequired

The blog post's delete ids.

Returns

Returns an empty answer on success.

Status codes

200 401 500

DELETE/blogposts-multiple/:delete_ids
curl -X DELETE 'http://smartman.max-media.io/blogposts-multiple/{delete_ids}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Update multiple blog posts

Applies the same changes (updates) to several posts, ids comma-separated. Answers the ids that were changed.

User token

Needs the token of a signed-in user.

Path parameters
patch_idsstringRequired

The blog post's patch ids.

Parameters
collection_idobjectid

Collection, to which the blog post belongs.

groupingstring

The blog post's grouping.

updatesstring

The blog post's updates.

Returns

Returns the BlogPost object.

Status codes

200 400 401 500

PATCH/blogposts-multiple/:patch_ids
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": "..." }'
Response
{
  "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
}

Update a blog post

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.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns the BlogPost object.

Status codes

200 400 401 403 404 500

PATCH/blogposts/:id
curl -X PATCH 'http://smartman.max-media.io/blogposts/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "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
}

Delete a blog post

Deletes a blog post. Answers the deleted post. 403 unless the author or an admin.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns an empty answer on success.

Status codes

200 401 403 404 500

DELETE/blogposts/:id
curl -X DELETE 'http://smartman.max-media.io/blogposts/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve a blog post

A post's first picture. Answers the image bytes. Cached for an hour.

Public

Public - no token needed.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns the BlogPost object.

Status codes

200 404 500

GET/blogposts/:id/media
curl -X GET 'http://smartman.max-media.io/blogposts/{id}/media?ionic=true'
Response
{
  "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
}

Create a blog post

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.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Status codes

200 400 401

POST/blogposts/:id/media
curl -X POST 'http://smartman.max-media.io/blogposts/{id}/media?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Delete a blog post

Removes a post's last picture. Deletes the media record too.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the blog post.

Returns

Returns an empty answer on success.

Status codes

200 401

DELETE/blogposts/:id/media/delete_last
curl -X DELETE 'http://smartman.max-media.io/blogposts/{id}/media/delete_last?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve a blog post

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.

Page accessOptional user

Pages limited to some users check the token when one is sent.

Path parameters
urlstringRequired

The blog post's URL slug, as in its address on the site.

Returns

Returns the BlogPost object.

Status codes

200 401 402 404 500

GET/blogposts/:url
curl -X GET 'http://smartman.max-media.io/blogposts/{url}?ionic=true'
Response
{
  "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
}
↑↓ Navigate↵ GoEsc Close