API ReferenceView as MarkdownOpenAPI

Design & components

View as Markdown

The site's look: the theme (colours, fonts, dark mode), header, footer, popups and reusable custom components built with HTML, CSS and JS.

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.

78 endpoints in 7 parts: Custom Component, Custom Font, Editor, Index Component, Popup, Wildcard, AI builder.

List all custom components

Returns the site's custom components, newest first unless a sort is given.

Public

Public - no token needed.

Returns

Returns a list of CustomComponent objects.

Status codes

200 500

GET/custom-components
curl -X GET 'http://pendarium.max-media.io/custom-components?ionic=true'
Response
[
  {
    "name": "Example",
    "html": "example",
    "compiled_html": "example",
    "css": "example",
    "compiled_css": "example",
    "js": "example",
    "variables": [
      {
        "value": "example",
        "_id": "6543210fedcba98765432100"
      }
    ],
    "iframe": false,
    "media": "6543210fedcba98765432100",
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z"
  }
]

Create a custom component

Create new custom_component.

Admin token

Needs a site admin token.

Returns

Returns the CustomComponent object.

Status codes

201 400 401 500

POST/custom-components
curl -X POST 'http://pendarium.max-media.io/custom-components?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "name": "Example",
  "html": "example",
  "compiled_html": "example",
  "css": "example",
  "compiled_css": "example",
  "js": "example",
  "variables": [
    {
      "value": "example",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "iframe": false,
  "media": "6543210fedcba98765432100",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a custom component

Returns one custom component, found by its ID.

Public

Public - no token needed.

Path parameters
idstringRequired

The ID of the custom component.

Returns

Returns the CustomComponent object.

Status codes

200 404 500

GET/custom-components/:id
curl -X GET 'http://pendarium.max-media.io/custom-components/{id}?ionic=true'
Response
{
  "name": "Example",
  "html": "example",
  "compiled_html": "example",
  "css": "example",
  "compiled_css": "example",
  "js": "example",
  "variables": [
    {
      "value": "example",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "iframe": false,
  "media": "6543210fedcba98765432100",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update a custom component

Update CustomComponent by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the custom component.

Returns

Returns the CustomComponent object.

Status codes

200 400 401 404 500

PATCH/custom-components/:id
curl -X PATCH 'http://pendarium.max-media.io/custom-components/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "name": "Example",
  "html": "example",
  "compiled_html": "example",
  "css": "example",
  "compiled_css": "example",
  "js": "example",
  "variables": [
    {
      "value": "example",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "iframe": false,
  "media": "6543210fedcba98765432100",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Delete a custom component

Delete CustomComponent record by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the custom component.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Retrieve the custom font

Returns the custom font.

Admin token

Needs a site admin token.

Returns

Returns the CustomFont object.

Status codes

200 401 500

GET/custom-font
curl -X GET 'http://pendarium.max-media.io/custom-font?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "family": "example",
  "link": "example-item",
  "name": "Example",
  "weights": "example",
  "italics": [
    "example"
  ],
  "subsets": [
    "example"
  ],
  "generic": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Create a custom font

Import a Google font. Takes `{ query }` — a family name, a Google. Fonts URL, a <link> tag or a `font-family:` declaration — and resolves its real weights against Google's font metadata. The older `{ family, link }` body still works unchanged.

Admin token

Needs a site admin token.

Parameters
querystring

The custom font's query.

Returns

Returns the CustomFont object.

Status codes

200 201 400 401 500

POST/custom-font
curl -X POST 'http://pendarium.max-media.io/custom-font?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "query": "..." }'
Response
{
  "family": "example",
  "link": "example-item",
  "name": "Example",
  "weights": "example",
  "italics": [
    "example"
  ],
  "subsets": [
    "example"
  ],
  "generic": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a custom font

Returns one custom font, found by its ID.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the custom font.

Returns

Returns the CustomFont object.

Status codes

200 401 404 500

GET/custom-font/:id
curl -X GET 'http://pendarium.max-media.io/custom-font/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "family": "example",
  "link": "example-item",
  "name": "Example",
  "weights": "example",
  "italics": [
    "example"
  ],
  "subsets": [
    "example"
  ],
  "generic": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update a custom font

Update CustomFont by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the custom font.

Returns

Returns the CustomFont object.

Status codes

200 400 401 404 500

PATCH/custom-font/:id
curl -X PATCH 'http://pendarium.max-media.io/custom-font/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "family": "example",
  "link": "example-item",
  "name": "Example",
  "weights": "example",
  "italics": [
    "example"
  ],
  "subsets": [
    "example"
  ],
  "generic": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Delete a custom font

Deletes the custom font. This cannot be undone.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the custom font.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Retrieve the font catalogue

Every font the theme picker may offer — the built-in library plus. this tenant's own imports, in one shape.

Admin token

Needs a site admin token.

Status codes

200 401 500

GET/font-catalogue
curl -X GET 'http://pendarium.max-media.io/font-catalogue?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "family": "example",
  "link": "example-item",
  "name": "Example",
  "weights": "example",
  "italics": [
    "example"
  ],
  "subsets": [
    "example"
  ],
  "generic": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Add an add locale

Add an add locale.

Public

Public - no token needed.

Parameters
localestring

The add locale's locale.

Status codes

200

POST/add-locale
curl -X POST 'http://pendarium.max-media.io/add-locale?ionic=true' \
  -H 'Content-Type: application/json' \
  -d '{ "locale": "..." }'

Retrieve the 404

Returns the 404.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-404
curl -X GET 'http://pendarium.max-media.io/get-404?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the app scss

Returns the app scss.

Public

Public - no token needed.

Status codes

200

GET/get-app-scss
curl -X GET 'http://pendarium.max-media.io/get-app-scss?ionic=true'

Retrieve the blog

Returns the blog.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-blog
curl -X GET 'http://pendarium.max-media.io/get-blog?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all blogs

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-blogs
curl -X GET 'http://pendarium.max-media.io/get-blogs?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the bs css

Returns the bs css.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-bs-css
curl -X GET 'http://pendarium.max-media.io/get-bs-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the cart

Returns the cart.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-cart
curl -X GET 'http://pendarium.max-media.io/get-cart?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all contacts

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-contacts
curl -X GET 'http://pendarium.max-media.io/get-contacts?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the css

Returns the css.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-css
curl -X GET 'http://pendarium.max-media.io/get-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the header

Returns the header.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-header
curl -X GET 'http://pendarium.max-media.io/get-header?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the header css

Returns the header css.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-header-css
curl -X GET 'http://pendarium.max-media.io/get-header-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the index

Returns the index.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-index
curl -X GET 'http://pendarium.max-media.io/get-index?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all locales

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

Public

Public - no token needed.

Returns

Returns a list of Locales objects.

Status codes

200 404 500

GET/get-locales
curl -X GET 'http://pendarium.max-media.io/get-locales?ionic=true'
Response
[
  {
    "locales_object": {},
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z"
  }
]

Retrieve the main css

Returns the main css.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-main-css
curl -X GET 'http://pendarium.max-media.io/get-main-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all partners

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-partners
curl -X GET 'http://pendarium.max-media.io/get-partners?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the payment

Returns the payment.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-payment
curl -X GET 'http://pendarium.max-media.io/get-payment?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the product

Returns the product.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-product
curl -X GET 'http://pendarium.max-media.io/get-product?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all products

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-products
curl -X GET 'http://pendarium.max-media.io/get-products?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the service

Returns the service.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-service
curl -X GET 'http://pendarium.max-media.io/get-service?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all services

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-services
curl -X GET 'http://pendarium.max-media.io/get-services?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the store

Returns the store.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-store
curl -X GET 'http://pendarium.max-media.io/get-store?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the theme

Returns the theme.

Public

Public - no token needed.

Status codes

200 400 404 500

GET/get-theme
curl -X GET 'http://pendarium.max-media.io/get-theme?ionic=true'

Retrieve the vlog

Returns the vlog.

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-vlog
curl -X GET 'http://pendarium.max-media.io/get-vlog?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

List all vlogs

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

Admin token

Needs a site admin token.

Status codes

200 401

GET/get-vlogs
curl -X GET 'http://pendarium.max-media.io/get-vlogs?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Set a 404

Set a 404.

Admin token

Needs a site admin token.

Parameters
contentstring

The 404's content.

Status codes

200 401

POST/set-404
curl -X POST 'http://pendarium.max-media.io/set-404?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a blog

Set a blog.

Admin token

Needs a site admin token.

Parameters
contentstring

The blog's content.

Status codes

200 401

POST/set-blog
curl -X POST 'http://pendarium.max-media.io/set-blog?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set blogs

Set blogs.

Admin token

Needs a site admin token.

Parameters
contentstring

The blog's content.

Status codes

200 401

POST/set-blogs
curl -X POST 'http://pendarium.max-media.io/set-blogs?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set bs css

Set bs css.

Admin token

Needs a site admin token.

Parameters
contentstring

The bs css's content.

Status codes

200 401

POST/set-bs-css
curl -X POST 'http://pendarium.max-media.io/set-bs-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a cart

Set a cart.

Admin token

Needs a site admin token.

Parameters
contentstring

The cart's content.

Status codes

200 401

POST/set-cart
curl -X POST 'http://pendarium.max-media.io/set-cart?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set contacts

Set contacts.

Admin token

Needs a site admin token.

Parameters
contentstring

The contact's content.

Status codes

200 401

POST/set-contacts
curl -X POST 'http://pendarium.max-media.io/set-contacts?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a css

Set a css.

Admin token

Needs a site admin token.

Parameters
contentstring

The css's content.

Status codes

200 401

POST/set-css
curl -X POST 'http://pendarium.max-media.io/set-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a footer

Set a footer.

Admin token

Needs a site admin token.

Parameters
contentstring

The footer's content.

Status codes

200 401

POST/set-footer
curl -X POST 'http://pendarium.max-media.io/set-footer?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a footer css

Set a footer css.

Admin token

Needs a site admin token.

Parameters
contentstring

The footer css's content.

Status codes

200 401

POST/set-footer-css
curl -X POST 'http://pendarium.max-media.io/set-footer-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a header

Set a header.

Admin token

Needs a site admin token.

Parameters
contentstring

The header's content.

Status codes

200 401

POST/set-header
curl -X POST 'http://pendarium.max-media.io/set-header?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a header css

Set a header css.

Admin token

Needs a site admin token.

Parameters
contentstring

The header css's content.

Status codes

200 401

POST/set-header-css
curl -X POST 'http://pendarium.max-media.io/set-header-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set an index

Set an index.

Admin token

Needs a site admin token.

Parameters
contentstring

The index's content.

Status codes

200 401

POST/set-index
curl -X POST 'http://pendarium.max-media.io/set-index?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set locales

Set locales.

Admin token

Needs a site admin token.

Parameters
contentstring

The locale's content.

Status codes

200 401

POST/set-locales
curl -X POST 'http://pendarium.max-media.io/set-locales?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a main css

Set a main css.

Admin token

Needs a site admin token.

Parameters
contentstring

The main css's content.

Status codes

200 401

POST/set-main-css
curl -X POST 'http://pendarium.max-media.io/set-main-css?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set partners

Set partners.

Admin token

Needs a site admin token.

Parameters
contentstring

The partner's content.

Status codes

200 401

POST/set-partners
curl -X POST 'http://pendarium.max-media.io/set-partners?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a payment

Set a payment.

Admin token

Needs a site admin token.

Parameters
contentstring

The payment's content.

Status codes

200 401

POST/set-payment
curl -X POST 'http://pendarium.max-media.io/set-payment?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a product

Set a product.

Admin token

Needs a site admin token.

Parameters
contentstring

The product's content.

Status codes

200 401

POST/set-product
curl -X POST 'http://pendarium.max-media.io/set-product?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set products

Set products.

Admin token

Needs a site admin token.

Parameters
contentstring

The product's content.

Status codes

200 401

POST/set-products
curl -X POST 'http://pendarium.max-media.io/set-products?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a service

Set a service.

Admin token

Needs a site admin token.

Parameters
contentstring

The service's content.

Status codes

200 401

POST/set-service
curl -X POST 'http://pendarium.max-media.io/set-service?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set services

Set services.

Admin token

Needs a site admin token.

Parameters
contentstring

The service's content.

Status codes

200 401

POST/set-services
curl -X POST 'http://pendarium.max-media.io/set-services?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a store

Set a store.

Admin token

Needs a site admin token.

Parameters
contentstring

The store's content.

Status codes

200 401

POST/set-store
curl -X POST 'http://pendarium.max-media.io/set-store?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a theme

Set a theme.

Admin token

Needs a site admin token.

Parameters
contentstring

The theme's content.

Status codes

200 401

POST/set-theme
curl -X POST 'http://pendarium.max-media.io/set-theme?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set a vlog

Set a vlog.

Admin token

Needs a site admin token.

Parameters
contentstring

The vlog's content.

Status codes

200 401

POST/set-vlog
curl -X POST 'http://pendarium.max-media.io/set-vlog?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

Set vlogs

Set vlogs.

Admin token

Needs a site admin token.

Parameters
contentstring

The vlog's content.

Status codes

200 401

POST/set-vlogs
curl -X POST 'http://pendarium.max-media.io/set-vlogs?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "content": "..." }'

List all index components

Returns the site's index components, newest first unless a sort is given.

Admin token

Needs a site admin token.

Returns

Returns a list of IndexComponent objects.

Status codes

200 401 500

GET/index-components
curl -X GET 'http://pendarium.max-media.io/index-components?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
[
  {
    "type": "example",
    "position": 1,
    "about_page": "example",
    "isFluid": false,
    "isAppComponent": false,
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z"
  }
]

Create an index component

Create new indexComponent.

Admin token

Needs a site admin token.

Returns

Returns the IndexComponent object.

Status codes

201 400 401 500

POST/index-components
curl -X POST 'http://pendarium.max-media.io/index-components?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "type": "example",
  "position": 1,
  "about_page": "example",
  "isFluid": false,
  "isAppComponent": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve an index component

Returns one index component, found by its ID.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the index component.

Returns

Returns the IndexComponent object.

Status codes

200 401 404 500

GET/index-components/:id
curl -X GET 'http://pendarium.max-media.io/index-components/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "type": "example",
  "position": 1,
  "about_page": "example",
  "isFluid": false,
  "isAppComponent": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update an index component

Update IndexComponent by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the index component.

Returns

Returns the IndexComponent object.

Status codes

200 400 401 404 500

PATCH/index-components/:id
curl -X PATCH 'http://pendarium.max-media.io/index-components/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "type": "example",
  "position": 1,
  "about_page": "example",
  "isFluid": false,
  "isAppComponent": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Delete an index component

Delete IndexComponent record by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the index component.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Retrieve the popup

Returns the popup.

Admin token

Needs a site admin token.

Returns

Returns the Popup object.

Status codes

200 401 500

GET/popup
curl -X GET 'http://pendarium.max-media.io/popup?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "body": "6543210fedcba98765432100",
  "decline_button_text": "Text shown on the site.",
  "accept_button_text": "Text shown on the site.",
  "accept_button_link": "example-item",
  "wide_modal": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Create a popup

Create new popup.

Admin token

Needs a site admin token.

Returns

Returns the Popup object.

Status codes

201 400 401 500

POST/popup
curl -X POST 'http://pendarium.max-media.io/popup?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "body": "6543210fedcba98765432100",
  "decline_button_text": "Text shown on the site.",
  "accept_button_text": "Text shown on the site.",
  "accept_button_link": "example-item",
  "wide_modal": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a popup

Returns one popup, found by its ID.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the popup.

Returns

Returns the Popup object.

Status codes

200 401 404 500

GET/popup/:id
curl -X GET 'http://pendarium.max-media.io/popup/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "body": "6543210fedcba98765432100",
  "decline_button_text": "Text shown on the site.",
  "accept_button_text": "Text shown on the site.",
  "accept_button_link": "example-item",
  "wide_modal": false,
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a g

Returns one g, found by its URL slug.

Public

Public - no token needed.

Path parameters
urlstringRequired

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

Status codes

200 404 500 502

GET/g/:url(*)
curl -X GET 'http://pendarium.max-media.io/g/{url}(*)?ionic=true'
Response
{
  "url": "example-item",
  "points_to": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

List all wildcards

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

Admin token

Needs a site admin token.

Query parameters
authenticatedstring

Only wildcards with this authenticated.

Returns

Returns a list of Wildcard objects.

Status codes

200 401 500

GET/wildcards
curl -X GET 'http://pendarium.max-media.io/wildcards?ionic=true&authenticated=...' \
  -H 'Authorization: Bearer <TOKEN>'
Response
[
  {
    "url": "example-item",
    "points_to": "example",
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z"
  }
]

Create a wildcard

Create new wildcard.

Admin token

Needs a site admin token.

Returns

Returns the Wildcard object.

Status codes

201 400 401 500

POST/wildcards
curl -X POST 'http://pendarium.max-media.io/wildcards?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "url": "example-item",
  "points_to": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a wildcard

Returns one wildcard, found by its ID.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the wildcard.

Returns

Returns the Wildcard object.

Status codes

200 401 404 500

GET/wildcards/:id
curl -X GET 'http://pendarium.max-media.io/wildcards/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "url": "example-item",
  "points_to": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update a wildcard

Update Wildcard by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the wildcard.

Returns

Returns the Wildcard object.

Status codes

200 400 401 404 500

PATCH/wildcards/:id
curl -X PATCH 'http://pendarium.max-media.io/wildcards/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "url": "example-item",
  "points_to": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Delete a wildcard

Delete Wildcard record by id.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the wildcard.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Create a popup with AI

Create a popup 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 popup, 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 popup to change.

Status codes

200 401 500

POST/create-new-popup
curl -X POST 'http://pendarium.max-media.io/create-new-popup?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 popup with AI

Use it to create or set up a site popup or modal.

User token

Needs the token of a signed-in user.

Parameters
promptstring

What the AI should do with the popup, 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-popup
curl -X POST 'http://pendarium.max-media.io/generate-popup?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "..." }'
↑↓ Navigate↵ GoEsc Close