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.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://a-plus-solutions.eu/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
}Find a blog post by its address.
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://a-plus-solutions.eu/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
}
}Save or unsave a blog post.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://a-plus-solutions.eu/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
}Returns the site's blog posts, newest first unless a sort is given.
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://a-plus-solutions.eu/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
}
]Create new blogpost.
Needs the token of a signed-in user.
Name of the blog post, required.
The blog post's on behalf of.
Returns the BlogPost object.
curl -X POST 'http://a-plus-solutions.eu/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 the blog post. This cannot be undone.
Needs the token of a signed-in user.
The blog post's delete ids.
Returns an empty answer on success.
curl -X DELETE 'http://a-plus-solutions.eu/blogposts-multiple/{delete_ids}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Changes the fields sent; the others stay as they are.
Needs the token of a signed-in user.
The blog post's patch ids.
Reference to a Collection model with name starting with 'blogpost/', used to categorise the post.
The blog post's grouping.
The blog post's updates.
Returns the BlogPost object.
curl -X PATCH 'http://a-plus-solutions.eu/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
}Update Blogpost by id.
Needs the token of a signed-in user.
The ID of the blog post.
Returns the BlogPost object.
curl -X PATCH 'http://a-plus-solutions.eu/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
}Delete Blogpost record by id.
Needs the token of a signed-in user.
The ID of the blog post.
Returns an empty answer on success.
curl -X DELETE 'http://a-plus-solutions.eu/blogposts/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Returns one blog post, found by its ID.
Public - no token needed.
The ID of the blog post.
Returns the BlogPost object.
curl -X GET 'http://a-plus-solutions.eu/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
}Creates a blog post from the fields sent.
Needs the token of a signed-in user.
The ID of the blog post.
curl -X POST 'http://a-plus-solutions.eu/blogposts/{id}/media?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Deletes the blog post. This cannot be undone.
Needs the token of a signed-in user.
The ID of the blog post.
Returns an empty answer on success.
curl -X DELETE 'http://a-plus-solutions.eu/blogposts/{id}/media/delete_last?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Returns one blog post, found by its URL slug.
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://a-plus-solutions.eu/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
}Create a blog post from a prompt, written by the AI builder.
Needs the token of a signed-in user.
What the AI should do with the blog post, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the blog post to change.
curl -X POST 'http://a-plus-solutions.eu/create-new-blogpost?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'{
"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"
}
}Use it to create a new blog post or article from scratch or a prompt.
Needs the token of a signed-in user.
What the AI should do with the blog post, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://a-plus-solutions.eu/generate-blogpost?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'Use it to edit or update an existing blog post.
Needs the token of a signed-in user.
What the AI should do with the blog post, in plain words - any language.
The current blog post, as JSON - the AI changes it and returns the result.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
The ID of the blog post to change.
The blog post's item ids.
curl -X POST 'http://a-plus-solutions.eu/modify-blogpost?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "item_data": "...", "chatId": "...", "item_id": "...", "item_ids": "..." }'