Collections group and filter the site's items. The prefix of the name is its kind: product/ is a top-level product category, grouping/ a filter inside one, service/ a service category, calendar-filter/ a filter on the booking page, blogpost/ a blog category, and so on. Collections can nest and can show their own page.
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.
14 endpoints in 2 parts: Collection, AI builder.
Get associated collections to another collection.
Public - no token needed.
The ID of the associated group.
Only associated groups with this topic.
Only associated groups with this service.
Only associated groups with this donation topic.
curl -X GET 'http://pendarium.max-media.io/associated-groups/{id}?ionic=true&topic=...&service=...&donation-topic=...'{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Returns the site's collections, newest first unless a sort is given.
Public - no token needed.
Only collections with this type.
Returns a list of Collection objects.
curl -X GET 'http://pendarium.max-media.io/collections?ionic=true&type=...'
[
{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
]Create new collection.
Needs a site admin token.
The collection's create nav.
Returns the Collection object.
curl -X POST 'http://pendarium.max-media.io/collections?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "createNav": "..." }'{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Persist a new display order for a set of collections.
Needs a site admin token.
The collection's items.
curl -X PATCH 'http://pendarium.max-media.io/collections-reorder?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "items": "..." }'Returns one collection, found by its ID.
Public - no token needed.
The ID of the collection.
Returns the Collection object.
curl -X GET 'http://pendarium.max-media.io/collections/{id}?ionic=true'{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Update Collection by id.
Needs a site admin token.
The ID of the collection.
Returns the Collection object.
curl -X PATCH 'http://pendarium.max-media.io/collections/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Delete Collection record by id.
Needs a site admin token.
The ID of the collection.
Returns an empty answer on success.
curl -X DELETE 'http://pendarium.max-media.io/collections/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Returns one collection, found by its ID.
Public - no token needed.
The ID of the collection.
Returns the Collection object.
curl -X GET 'http://pendarium.max-media.io/collections/{id}/media?ionic=true'{
"name": "Example",
"parent_collection": "6543210fedcba98765432100",
"picture": "6543210fedcba98765432100",
"about_page": "6543210fedcba98765432100",
"match_to_option": false,
"is_color": false,
"color": "#3557c4",
"position": 1,
"items": [
"6543210fedcba98765432101"
],
"thumbnail": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Creates a collection from the fields sent.
Needs a site admin token.
The ID of the collection.
curl -X POST 'http://pendarium.max-media.io/collections/{id}/media?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Deletes the collection. This cannot be undone.
Needs a site admin token.
The ID of the collection.
Returns an empty answer on success.
curl -X DELETE 'http://pendarium.max-media.io/collections/{id}/media?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Create a collection from a prompt, written by the AI builder.
Needs the token of a signed-in user.
What the AI should do with the collection, 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 collection to change.
curl -X POST 'http://pendarium.max-media.io/create-new-collection?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 category/collection/filter/store/topic for products, services, programs, blogposts, or donations.
Needs the token of a signed-in user.
What the AI should do with the collection, 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://pendarium.max-media.io/generate-collection?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'Generate an undefined collection from a prompt, written by the AI builder.
Needs the token of a signed-in user.
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://pendarium.max-media.io/generate-undefined-collection?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "chatId": "..." }'{
"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 modify existing collection/category/filter.
Needs the token of a signed-in user.
What the AI should do with the collection, in plain words - any language.
The current collection, 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 collection to change.
The collection's item ids.
curl -X POST 'http://pendarium.max-media.io/modify-collection?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "item_data": "...", "chatId": "...", "item_id": "...", "item_ids": "..." }'