API ReferenceView as MarkdownOpenAPI

Custom content

View as Markdown

Custom data models the site defines itself - their records, admin pages, triggers that run when records change and scheduled jobs.

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.

56 endpoints in 6 parts: Brand, Dynamic Page, Dynamic Trigger, Dynamicmodel, Miniapp, AI builder.

List all brands

The brands. Answers an array of every record.

Public

Public - no token needed.

Returns

Returns a list of Brand objects.

Status codes

200 500

GET/brands
curl -X GET 'http://bulgariandebateassociation.max-media.io/brands?ionic=true'
Response
[
  {
    "name": "Example",
    "header": "example",
    "description": "Text shown on the site.",
    "slogan": "example",
    "logo": "6543210fedcba98765432100",
    "_id": "6543210fedcba98765432100"
  }
]

Retrieve a brand

One brand. 404 when there is no such record.

Public

Public - no token needed.

Path parameters
idstringRequired

The ID of the brand.

Returns

Returns the Brand object.

Status codes

200 404 500

GET/brands/:id
curl -X GET 'http://bulgariandebateassociation.max-media.io/brands/{id}?ionic=true'
Response
{
  "name": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "slogan": "example",
  "logo": "6543210fedcba98765432100",
  "_id": "6543210fedcba98765432100"
}

Retrieve the dynamic page

Get all DynamicdynamicPages. Answers an array of every record.

Admin token

Needs a site admin token.

Returns

Returns the DynamicPage object.

Status codes

200 401 500

GET/dynamic-page
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

Create a dynamic page

Creates a custom-model page. Answers 201 with no body.

Admin token

Needs a site admin token.

Parameters
namestring

Name of the page.

Returns

Returns the DynamicPage object.

Status codes

201 400 401 500

POST/dynamic-page
curl -X POST 'http://bulgariandebateassociation.max-media.io/dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "..." }'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

Get dynamic page statistics

Totals of a custom-model page's records between ?from and ?to. The same access rules as GET /dynamic-page/:url.

Optional user

Works without a token; with a user token the answer is personal.

Path parameters
urlstringRequired

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

Query parameters
fromstring

Only dynamic pages with this from.

tostring

Only dynamic pages with this to.

Returns

Returns the DynamicPage object.

Status codes

200 401 403 404 500

GET/dynamic-page-statistics/:url
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamic-page-statistics/{url}?ionic=true&from=...&to=...'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

Update a dynamic page

Updates a custom-model page. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the dynamic page.

Parameters
namestring

Name of the page.

Returns

Returns the DynamicPage object.

Status codes

200 400 401 404 500

PATCH/dynamic-page/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/dynamic-page/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "..." }'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

Delete a dynamic page

Deletes a custom-model page. Answers the deleted record, or 404. Records that point to it are not changed.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the dynamic page.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Retrieve a dynamic page

One custom-model page. Follows the page's access settings: 401 for a sign-in-only page, 403 when the user may not see the records. Records owned per user show only the user's own.

Optional user

Works without a token; with a user token the answer is personal.

Path parameters
urlstringRequired

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

Returns

Returns the DynamicPage object.

Status codes

200 401 403 404 500

GET/dynamic-page/:url
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamic-page/{url}?ionic=true'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

List all used schemas

Every model's schema, for writing triggers. Answers the model names.

Admin token

Needs a site admin token.

Status codes

200 401 500

GET/all-used-schemas
curl -X GET 'http://bulgariandebateassociation.max-media.io/all-used-schemas?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'

Retrieve the dynamic trigger

Get all DynamicTriggers. Answers an array of every record.

Admin token

Needs a site admin token.

Returns

Returns the DynamicTrigger object.

Status codes

200 401 500

GET/dynamic-trigger
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Create a dynamic trigger

Creates a trigger. Answers 201 with no body. The trigger starts working at once.

Admin token

Needs a site admin token.

Returns

Returns the DynamicTrigger object.

Status codes

201 400 401 500

POST/dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Retrieve a dynamic trigger

One trigger. 404 when there is no such record.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the dynamic trigger.

Returns

Returns the DynamicTrigger object.

Status codes

200 401 404 500

GET/dynamic-trigger/:id
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamic-trigger/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update a dynamic trigger

Updates a trigger. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the dynamic trigger.

Parameters
last_errorstring

The error of the last run, if it failed.

last_run_atdate

When it last ran.

last_run_statusstring

One of: success, failed.

Returns

Returns the DynamicTrigger object.

Status codes

200 400 401 404 500

PATCH/dynamic-trigger/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/dynamic-trigger/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "last_error": "...", "last_run_at": "...", "last_run_status": "..." }'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Delete a dynamic trigger

Deletes a trigger. Answers the deleted record, or 404. Records that point to it are not changed.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the dynamic trigger.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

Retrieve the content type

Get all DynamicModels. Answers an array of every record.

Admin token

Needs a site admin token.

Status codes

200 401 500

GET/dynamicmodel
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamicmodel?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Create a content type

Creates a custom model. Each field is checked first: 400 { error, details } lists what is wrong. Its API routes exist as soon as it is saved. Answers 201.

Admin token

Needs a site admin token.

Parameters
namestring

The content type's name.

fieldsstring

The content type's fields.

Status codes

201 400 401 500

POST/dynamicmodel
curl -X POST 'http://bulgariandebateassociation.max-media.io/dynamicmodel?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "name": "...", "fields": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

List all content type input fields

Custom models with user_input=true for a ref type (?ref: User, Service...). 400 without ?ref.

Public

Public - no token needed.

Query parameters
refstring

Only content type input fields with this ref.

Status codes

200 400 500

GET/dynamicmodel-input-fields
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamicmodel-input-fields?ionic=true&ref=...'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

List all content type select fields

Custom models with user_input=false for a ref type (?ref), including their records. 400 without ?ref.

Public

Public - no token needed.

Query parameters
refstring

Only content type select fields with this ref.

Status codes

200 400 500

GET/dynamicmodel-select-fields
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamicmodel-select-fields?ionic=true&ref=...'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Retrieve a content type

One custom model. 404 when there is no such record.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the content type.

Status codes

200 401 404 500

GET/dynamicmodel/:id
curl -X GET 'http://bulgariandebateassociation.max-media.io/dynamicmodel/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Update a content type

Updates a custom model. The same field checks; the custom routes are rebuilt so the change applies at once. Existing records keep fields that were removed. Answers the model, or 404.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the content type.

Parameters
fieldsstring

The content type's fields.

Status codes

200 400 401 404 500

PATCH/dynamicmodel/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/dynamicmodel/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "fields": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Delete a content type

Deletes a custom model. Its API routes go too. Answers the deleted model, or 404.

Admin token

Needs a site admin token.

Path parameters
idstringRequired

The ID of the content type.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

List all mini apps

Approved mini apps, a page at a time. Answers { miniapps, count, usedMiniApps }, ten at a time, newest first.

User token

Needs the token of a signed-in user.

Path parameters
skipstringRequired

How many results to skip - for paging.

Returns

Returns a list of MiniApp objects.

Status codes

200 401 500

GET/all-miniapps/:skip
curl -X GET 'http://bulgariandebateassociation.max-media.io/all-miniapps/{skip}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
[
  {
    "title": "Example",
    "header": "example",
    "description": "Text shown on the site.",
    "referer": "example",
    "requiresLogin": true,
    "icon": "6543210fedcba98765432100",
    "previews": [
      {
        "media": "6543210fedcba98765432100",
        "_id": "6543210fedcba98765432100"
      }
    ],
    "owner_id": "6543210fedcba98765432100",
    "reviewed": false,
    "approved": false,
    "total_opened": 0,
    "opened_by": [
      "6543210fedcba98765432101"
    ],
    "minimum_age": 1,
    "language": [
      "example"
    ],
    "collection_id": "6543210fedcba98765432100",
    "total_views": 0,
    "views": [
      "6543210fedcba98765432101"
    ],
    "privacy_policy": "example",
    "support_url": "example-item",
    "marketing_url": "example-item",
    "copyright": "example",
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z",
    "data_collection": {
      "contact_info": "example",
      "health_info": "example",
      "payment_info": "example",
      "location_info": "example",
      "other_info": "example",
      "user_info": "example",
      "identifiers_info": "example",
      "usage_data": "example",
      "diagnostics_data": "example"
    }
  }
]

Retrieve a mini app insight

A mini app's views and openings over time. Views and openings per day.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app insight.

Status codes

200 401 500

GET/mini-app-insights/:id
curl -X GET 'http://bulgariandebateassociation.max-media.io/mini-app-insights/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Update a mini app open

Counts an opening of a mini app. Answers with no body.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app open.

Status codes

200 400 401 500

PATCH/mini-app-open/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/mini-app-open/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Record a view of a mini app

Counts a view of a mini app's store page. Answers with no body.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app.

Returns

Returns the MiniApp object.

Status codes

200 400 401 500

PATCH/mini-app-view/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/mini-app-view/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Create a mini app

Creates a mini app. Answers 201 with the created record; 400 with the reason when a field is invalid.

User token

Needs the token of a signed-in user.

Returns

Returns the MiniApp object.

Status codes

201 400 401 500

POST/miniapps
curl -X POST 'http://bulgariandebateassociation.max-media.io/miniapps?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Retrieve the mini apps user data

The signed-in user's data a mini app may read, after a valid code. 401 for an expired or wrong code.

Public

Public - no token needed.

Status codes

200 401 500

GET/miniapps-get-user-data
curl -X GET 'http://bulgariandebateassociation.max-media.io/miniapps-get-user-data?ionic=true'
Response
{
  "name": "Example",
  "email": "jane@example.com",
  "avatar": "6543210fedcba98765432100",
  "social_avatar": "example",
  "isAdmin": false,
  "isStaff": false,
  "owner_id": "6543210fedcba98765432100",
  "organization_name": "Example",
  "firstname": "Example",
  "lastname": "Example",
  "phone_number": "+359 888 123 456",
  "address": "example",
  "city": "example",
  "state": "example",
  "country": "example",
  "zip_code": "example",
  "tax_identification_number": "example",
  "notes": "Text shown on the site.",
  "isConfirmed": false,
  "number_of_sales": 0,
  "stripe_id": "example",
  "paypal_id": "example",
  "access_level": 1,
  "validation_code": "example",
  "can_edit": {
    "site": false,
    "crm": false,
    "store": false,
    "payments": false,
    "staff": false
  },
  "ip_location": {
    "city": "example",
    "continent_name": "Example",
    "country_name": "Example",
    "country_subdivision": "example",
    "location_latitude": 0,
    "location_longitude": 0,
    "last_updated": "example"
  }
}

Retrieve the mini apps receiver authorization code

The receiving side of a mini app code check. 401 "Unauthorized" for an expired or wrong code.

Public

Public - no token needed.

Status codes

200 401 500

GET/miniapps-receiver-validate-authorization-code
curl -X GET 'http://bulgariandebateassociation.max-media.io/miniapps-receiver-validate-authorization-code?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
  }
}

Retrieve the mini apps temp authorization code

A short-lived code a mini app exchanges to sign the user in. Answers { code }, valid for a few seconds. 401 without a valid token.

Public

Public - no token needed.

Status codes

200 401 500

GET/miniapps-temp-authorization-code
curl -X GET 'http://bulgariandebateassociation.max-media.io/miniapps-temp-authorization-code?ionic=true'
Response
{
  "name": "Example",
  "email": "jane@example.com",
  "avatar": "6543210fedcba98765432100",
  "social_avatar": "example",
  "isAdmin": false,
  "isStaff": false,
  "owner_id": "6543210fedcba98765432100",
  "organization_name": "Example",
  "firstname": "Example",
  "lastname": "Example",
  "phone_number": "+359 888 123 456",
  "address": "example",
  "city": "example",
  "state": "example",
  "country": "example",
  "zip_code": "example",
  "tax_identification_number": "example",
  "notes": "Text shown on the site.",
  "isConfirmed": false,
  "number_of_sales": 0,
  "stripe_id": "example",
  "paypal_id": "example",
  "access_level": 1,
  "validation_code": "example",
  "can_edit": {
    "site": false,
    "crm": false,
    "store": false,
    "payments": false,
    "staff": false
  },
  "ip_location": {
    "city": "example",
    "continent_name": "Example",
    "country_name": "Example",
    "country_subdivision": "example",
    "location_latitude": 0,
    "location_longitude": 0,
    "last_updated": "example"
  }
}

Retrieve the mini apps authorization code

Checks a mini app's authorization code with the issuing site. 401 "Unauthorized" for an expired or wrong code.

Public

Public - no token needed.

Status codes

200 401 500

GET/miniapps-validate-authorization-code
curl -X GET 'http://bulgariandebateassociation.max-media.io/miniapps-validate-authorization-code?ionic=true'
Response
{
  "name": "Example",
  "email": "jane@example.com",
  "avatar": "6543210fedcba98765432100",
  "social_avatar": "example",
  "isAdmin": false,
  "isStaff": false,
  "owner_id": "6543210fedcba98765432100",
  "organization_name": "Example",
  "firstname": "Example",
  "lastname": "Example",
  "phone_number": "+359 888 123 456",
  "address": "example",
  "city": "example",
  "state": "example",
  "country": "example",
  "zip_code": "example",
  "tax_identification_number": "example",
  "notes": "Text shown on the site.",
  "isConfirmed": false,
  "number_of_sales": 0,
  "stripe_id": "example",
  "paypal_id": "example",
  "access_level": 1,
  "validation_code": "example",
  "can_edit": {
    "site": false,
    "crm": false,
    "store": false,
    "payments": false,
    "staff": false
  },
  "ip_location": {
    "city": "example",
    "continent_name": "Example",
    "country_name": "Example",
    "country_subdivision": "example",
    "location_latitude": 0,
    "location_longitude": 0,
    "last_updated": "example"
  }
}

Retrieve a mini app

One mini app with its ratings and similar mini apps. Answers { miniapp, collections, userMiniApps, average_rating, total_ratings, ... }. Never includes the private key.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app.

Returns

Returns the MiniApp object.

Status codes

200 401 404 500

GET/miniapps/:id
curl -X GET 'http://bulgariandebateassociation.max-media.io/miniapps/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Update a mini app

Updates a mini app. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app.

Parameters
previewsobject[]

Screenshots shown in the store.

Returns

Returns the MiniApp object.

Status codes

200 400 401 404 500

PATCH/miniapps/:id
curl -X PATCH 'http://bulgariandebateassociation.max-media.io/miniapps/{id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "previews": "..." }'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Delete a mini app

Deletes a mini app. Answers the deleted record, or 404. Records that point to it are not changed.

User token

Needs the token of a signed-in user.

Path parameters
idstringRequired

The ID of the mini app.

Returns

Returns an empty answer on success.

Status codes

200 401 404 500

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

List all mini apps

The signed-in user's mini apps. Newest first, without their private keys.

User token

Needs the token of a signed-in user.

Returns

Returns a list of MiniApp objects.

Status codes

200 401 500

GET/my-mini-apps
curl -X GET 'http://bulgariandebateassociation.max-media.io/my-mini-apps?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
[
  {
    "title": "Example",
    "header": "example",
    "description": "Text shown on the site.",
    "referer": "example",
    "requiresLogin": true,
    "icon": "6543210fedcba98765432100",
    "previews": [
      {
        "media": "6543210fedcba98765432100",
        "_id": "6543210fedcba98765432100"
      }
    ],
    "owner_id": "6543210fedcba98765432100",
    "reviewed": false,
    "approved": false,
    "total_opened": 0,
    "opened_by": [
      "6543210fedcba98765432101"
    ],
    "minimum_age": 1,
    "language": [
      "example"
    ],
    "collection_id": "6543210fedcba98765432100",
    "total_views": 0,
    "views": [
      "6543210fedcba98765432101"
    ],
    "privacy_policy": "example",
    "support_url": "example-item",
    "marketing_url": "example-item",
    "copyright": "example",
    "_id": "6543210fedcba98765432100",
    "updatedAt": "2026-11-04T12:00:00.000Z",
    "createdAt": "2026-11-04T12:00:00.000Z",
    "data_collection": {
      "contact_info": "example",
      "health_info": "example",
      "payment_info": "example",
      "location_info": "example",
      "other_info": "example",
      "user_info": "example",
      "identifiers_info": "example",
      "usage_data": "example",
      "diagnostics_data": "example"
    }
  }
]

Retrieve the referer

The page that sent the request (referer header). Answers the referer header as text.

Public

Public - no token needed.

Status codes

200 500

GET/referer
curl -X GET 'http://bulgariandebateassociation.max-media.io/referer?ionic=true'

Retrieve a user mini app

A user's mini apps. Newest first, without their private keys.

User token

Needs the token of a signed-in user.

Path parameters
owner_idstringRequired

User.id.

Returns

Returns the MiniApp object.

Status codes

200 401 500

GET/user-mini-apps/:owner_id
curl -X GET 'http://bulgariandebateassociation.max-media.io/user-mini-apps/{owner_id}?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>'
Response
{
  "title": "Example",
  "header": "example",
  "description": "Text shown on the site.",
  "referer": "example",
  "requiresLogin": true,
  "icon": "6543210fedcba98765432100",
  "previews": [
    {
      "media": "6543210fedcba98765432100",
      "_id": "6543210fedcba98765432100"
    }
  ],
  "owner_id": "6543210fedcba98765432100",
  "reviewed": false,
  "approved": false,
  "total_opened": 0,
  "opened_by": [
    "6543210fedcba98765432101"
  ],
  "minimum_age": 1,
  "language": [
    "example"
  ],
  "collection_id": "6543210fedcba98765432100",
  "total_views": 0,
  "views": [
    "6543210fedcba98765432101"
  ],
  "privacy_policy": "example",
  "support_url": "example-item",
  "marketing_url": "example-item",
  "copyright": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "data_collection": {
    "contact_info": "example",
    "health_info": "example",
    "payment_info": "example",
    "location_info": "example",
    "other_info": "example",
    "user_info": "example",
    "identifiers_info": "example",
    "usage_data": "example",
    "diagnostics_data": "example"
  }
}

Create a dynamic model with AI

AI: designs a custom model (fields, access) from the owner's description. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic model, 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.

Status codes

200 401 500

POST/create-new-dynamic-model
curl -X POST 'http://bulgariandebateassociation.max-media.io/create-new-dynamic-model?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "..." }'

Create a dynamic page with AI

AI: builds a page that lists or edits a custom model's records. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic page, 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.

model_idstring

The dynamic page's model id.

Status codes

200 401 500

POST/create-new-dynamic-page
curl -X POST 'http://bulgariandebateassociation.max-media.io/create-new-dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "model_id": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Create a dynamic trigger with AI

AI: writes a trigger that runs when a model's records change. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic trigger, 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.

model_idstring

The dynamic trigger's model id.

Status codes

200 401 500

POST/create-new-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/create-new-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "model_id": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Create a delete dynamic model

AI: deletes custom models and their routes. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
item_idsstring

The delete dynamic model's item ids.

chatIdstring

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

Returns

Returns the DynamicModel object.

Status codes

200 401 500

POST/delete-dynamic-model
curl -X POST 'http://bulgariandebateassociation.max-media.io/delete-dynamic-model?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "item_ids": "...", "chatId": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Create a delete dynamic page

AI: deletes custom-model pages. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
item_idsstring

The delete dynamic page's item ids.

chatIdstring

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

Returns

Returns the DynamicPage object.

Status codes

200 401 500

POST/delete-dynamic-page
curl -X POST 'http://bulgariandebateassociation.max-media.io/delete-dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "item_ids": "...", "chatId": "..." }'
Response
{
  "name": "Example",
  "url": "example-item",
  "dynamic_models": [
    "6543210fedcba98765432101"
  ],
  "page_type": "cms-table",
  "value_containers": [
    {
      "name": "Example",
      "type": "example",
      "value": "example",
      "wysiwyg": false,
      "editable": false,
      "label": "Example",
      "required": false,
      "default": {},
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "enumerator_values": [],
      "due_date": false,
      "fields": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": 0,
        "maxLength": 0
      }
    }
  ],
  "quick_link": false,
  "quick_link_icon": "example-item",
  "quick_link_text": "example-item",
  "quick_link_auth_guard": "none",
  "on_click_action": "none",
  "secondary_cta": false,
  "secondary_ctas": [
    {
      "icon": "example",
      "text": "Text shown on the site.",
      "auth_guard": "none",
      "on_click_action": "none",
      "_id": "6543210fedcba98765432100",
      "navigate": {
        "link": "example-item",
        "query_params": "example"
      }
    }
  ],
  "edit_page": false,
  "create_page": false,
  "auth_guard": "none",
  "enable_additional_filters": false,
  "additional_filters": {},
  "containers": [
    {
      "isFluid": false,
      "parallaxEnabled": false,
      "parallaxAmount": 49.9,
      "parallaxZoom": 1,
      "continuousEnabled": false,
      "continuousEffect": "none",
      "continuousDuration": 2400,
      "continuousIntensity": 4,
      "backgroundImage": "example",
      "backgroundSize": "example",
      "backgroundPosition": "example",
      "backgroundRepeat": "example",
      "backgroundVideo": "example",
      "backgroundColor": "#3557c4",
      "backgroundParallax": false,
      "minHeight": 1,
      "minHeightMobile": 1,
      "allowOffset": false,
      "offsetX": 0,
      "offsetY": 0,
      "offsetMobileX": 0,
      "offsetMobileY": 0,
      "zIndex": 0,
      "wrap_reverse": false,
      "backgroundGradient": {
        "enabled": false,
        "type": "example",
        "degrees": 0,
        "radialShape": "example",
        "radialPosition": "example",
        "colors": "#3557c4",
        "css": "example"
      },
      "padding_top": {
        "value": "example",
        "unit": "example",
        "mobile_value": "example",
        "mobile_unit": "example"
      },
      "padding_right": {
        "value": "example"
      }
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "navigate": {
    "link": "example-item",
    "query_params": "example"
  },
  "statistics_options": {
    "filter_fields": "example",
    "functions": "example"
  }
}

Create a delete dynamic trigger

AI: deletes triggers. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
item_idsstring

The delete dynamic trigger's item ids.

chatIdstring

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

Returns

Returns the DynamicTrigger object.

Status codes

200 401 500

POST/delete-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/delete-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "item_ids": "...", "chatId": "..." }'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Generate a dynamic model with AI

AI: routes a request for a custom model to create-new-dynamic-model. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

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

Generate a dynamic page with AI

AI: routes a request for a custom-model page to create-new-dynamic-page. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

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

Generate a dynamic trigger with AI

AI: routes a request for a trigger to create-new-dynamic-trigger. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

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

Modify a dynamic model with AI

AI: routes a change to a custom model to update-dynamic-model. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic model, 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.

item_idstring

The ID of the dynamic model to change.

item_datastring

The current dynamic model, as JSON - the AI changes it and returns the result.

Status codes

200 401 500

POST/modify-dynamic-model
curl -X POST 'http://bulgariandebateassociation.max-media.io/modify-dynamic-model?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "item_id": "...", "item_data": "..." }'

Modify a dynamic page with AI

AI: routes a change to a custom-model page to update-dynamic-page. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic page, 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.

item_idstring

The ID of the dynamic page to change.

item_idsstring

The dynamic page's item ids.

item_datastring

The current dynamic page, as JSON - the AI changes it and returns the result.

Status codes

200 401 500

POST/modify-dynamic-page
curl -X POST 'http://bulgariandebateassociation.max-media.io/modify-dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "item_id": "...", "item_ids": "...", "item_data": "..." }'

Modify a dynamic trigger with AI

AI: routes a change to a trigger to update-dynamic-trigger. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic trigger, 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.

item_idstring

The ID of the dynamic trigger to change.

item_idsstring

The dynamic trigger's item ids.

item_datastring

The current dynamic trigger, as JSON - the AI changes it and returns the result.

Status codes

200 401 500

POST/modify-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/modify-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "item_id": "...", "item_ids": "...", "item_data": "..." }'

Create a run dynamic trigger

AI: runs a trigger once now, as a test. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
item_idsstring

The run dynamic trigger's item ids.

chatIdstring

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

Returns

Returns the DynamicTrigger object.

Status codes

200 401 500

POST/run-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/run-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "item_ids": "...", "chatId": "..." }'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Toggle a dynamic trigger

AI: turns triggers on or off. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends.

Admin token

Needs a site admin token.

Parameters
item_idsstring

The dynamic trigger's item ids.

enabledboolean

The trigger runs.

chatIdstring

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

Returns

Returns the DynamicTrigger object.

Status codes

200 401 500

POST/toggle-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/toggle-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "item_ids": "...", "enabled": "...", "chatId": "..." }'
Response
{
  "enabled": false,
  "name": "Example",
  "model": "example",
  "type": "CREATE",
  "code": "example",
  "last_run_at": "2026-11-04T12:00:00.000Z",
  "last_run_status": null,
  "last_error": "example",
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z"
}

Update a dynamic model with AI

AI: changes a custom model as the owner asked. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic model, 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 dynamic model to change.

Status codes

200 401 500

POST/update-dynamic-model
curl -X POST 'http://bulgariandebateassociation.max-media.io/update-dynamic-model?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'

Update a dynamic page with AI

AI: changes a custom-model page as the owner asked. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic page, 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 dynamic page to change.

model_idstring

The dynamic page's model id.

Status codes

200 401 500

POST/update-dynamic-page
curl -X POST 'http://bulgariandebateassociation.max-media.io/update-dynamic-page?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "...", "model_id": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}

Update a dynamic trigger with AI

AI: changes a trigger as the owner asked. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.

Admin token

Needs a site admin token.

Parameters
promptstring

What the AI should do with the dynamic trigger, 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 dynamic trigger to change.

model_idstring

The dynamic trigger's model id.

Status codes

200 401 500

POST/update-dynamic-trigger
curl -X POST 'http://bulgariandebateassociation.max-media.io/update-dynamic-trigger?ionic=true' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "...", "model_id": "..." }'
Response
{
  "name": "Example",
  "fields": [
    {
      "name": "Example",
      "type": "example",
      "required": false,
      "default": {},
      "patchable": true,
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "depends_on": "example",
      "populate": false,
      "wysiwyg": false,
      "fields": [],
      "show_field_in_cms_table": true,
      "enumerator_values": [],
      "_id": "6543210fedcba98765432100",
      "validations": {
        "minLength": "example",
        "maxLength": "example"
      }
    }
  ],
  "attach_in": [
    {
      "ref": "example",
      "ref_value_field": "_id",
      "ref_text_field": "_id",
      "user_input": false,
      "_id": "6543210fedcba98765432100"
    }
  ],
  "_id": "6543210fedcba98765432100",
  "updatedAt": "2026-11-04T12:00:00.000Z",
  "createdAt": "2026-11-04T12:00:00.000Z",
  "auth": {
    "create": false,
    "read": false,
    "update": false,
    "delete": false
  },
  "ownership_settings": {
    "enable_ownership_identification": false,
    "ownership_based_auth": "example",
    "profile_use": false
  }
}
↑↓ Navigate↵ GoEsc Close