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

Like or unlike a blog post.

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://cloudoffice-gr.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

Find a blog post by its address.

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://cloudoffice-gr.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

Save or unsave a blog post.

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://cloudoffice-gr.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

Returns the site's blog posts, newest first unless a sort is given.

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://cloudoffice-gr.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

Create new blogpost.

User token

Needs the token of a signed-in user.

Parameters
titlestring

Name of the blog post, required.

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://cloudoffice-gr.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 the blog post. This cannot be undone.

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://cloudoffice-gr.max-media.io/blogposts-multiple/{delete_ids}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Update multiple blog posts

Changes the fields sent; the others stay as they are.

User token

Needs the token of a signed-in user.

Path parameters
patch_idsstringRequired

The blog post's patch ids.

Parameters
collection_idobjectid

Reference to a Collection model with name starting with 'blogpost/', used to categorise the post.

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://cloudoffice-gr.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

Update Blogpost by id.

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://cloudoffice-gr.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

Delete Blogpost record by id.

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://cloudoffice-gr.max-media.io/blogposts/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve a blog post

Returns one blog post, found by its ID.

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://cloudoffice-gr.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

Creates a blog post from the fields sent.

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://cloudoffice-gr.max-media.io/blogposts/{id}/media?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Delete a blog post

Deletes the blog post. This cannot be undone.

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://cloudoffice-gr.max-media.io/blogposts/{id}/media/delete_last?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve a blog post

Returns one blog post, found by its URL slug.

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://cloudoffice-gr.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