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.

16 endpoints in 2 parts: Blogpost, AI builder.

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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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://dobrozdrave.com/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
}

Create a blog post with AI

Create a blog post from a prompt, written by the AI builder.

User token

Needs the token of a signed-in user.

Parameters
promptstring

What the AI should do with the blog post, in plain words - any language.

chatIdstring

The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.

aiVersionstring

Which version of the AI builder to use; leave it out for the current one.

item_idstring

The ID of the blog post to change.

Status codes

200 401 500

POST/create-new-blogpost
curl -X POST 'http://dobrozdrave.com/create-new-blogpost?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'
Response
{
  "chat_id": "6543210fedcba98765432100",
  "role": "user",
  "text": "Text shown on the site.",
  "target_url": "example-item",
  "action": "RESPONSE",
  "options": [
    "example"
  ],
  "medias": [
    {
      "media": "6543210fedcba98765432100",
      "gcs_url": "example-item",
      "gemini_uri": "example",
      "gemini_interaction_id": "example",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "products": [
    "6543210fedcba98765432101"
  ],
  "services": [
    "6543210fedcba98765432101"
  ],
  "blogposts": [
    "6543210fedcba98765432101"
  ],
  "programs": [
    "6543210fedcba98765432101"
  ],
  "suggestions": [
    {
      "text": "Text shown on the site.",
      "route": "example",
      "item_id": "6543210fedcba98765432100",
      "medias": [],
      "picture": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "is_system": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data": {
    "object": "example",
    "object_type": "example",
    "edit_summary": "example",
    "edit_diff": "example",
    "undo_record": "example",
    "hero_animation_offer": "example",
    "preview_state": "example",
    "pending_credit_cost": 0,
    "target_restore": "example",
    "media_request": "example",
    "item_request": "example",
    "reference_request": "example"
  }
}

Generate a blog post with AI

Use it to create a new blog post or article from scratch or a prompt.

User token

Needs the token of a signed-in user.

Parameters
promptstring

What the AI should do with the blog post, in plain words - any language.

chatIdstring

The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.

Status codes

200 401 500

POST/generate-blogpost
curl -X POST 'http://dobrozdrave.com/generate-blogpost?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "..." }'

Modify a blog post with AI

Use it to edit or update an existing blog post.

User token

Needs the token of a signed-in user.

Parameters
promptstring

What the AI should do with the blog post, in plain words - any language.

item_datastring

The current blog post, as JSON - the AI changes it and returns the result.

chatIdstring

The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.

item_idstring

The ID of the blog post to change.

item_idsstring

The blog post's item ids.

Status codes

200 401 500

POST/modify-blogpost
curl -X POST 'http://dobrozdrave.com/modify-blogpost?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "item_data": "...", "chatId": "...", "item_id": "...", "item_ids": "..." }'
↑↓ Navigate↵ GoEsc Close