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.
The brands. Answers an array of every record.
Public - no token needed.
Returns a list of Brand objects.
curl -X GET 'http://smartman.max-media.io/brands?ionic=true'
[
{
"name": "Example",
"header": "example",
"description": "Text shown on the site.",
"slogan": "example",
"logo": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
]One brand. 404 when there is no such record.
Public - no token needed.
The ID of the brand.
Returns the Brand object.
curl -X GET 'http://smartman.max-media.io/brands/{id}?ionic=true'{
"name": "Example",
"header": "example",
"description": "Text shown on the site.",
"slogan": "example",
"logo": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}A brand's logo. Answers the image bytes, or 404.
Public - no token needed.
The ID of the brand.
Returns the Brand object.
curl -X GET 'http://smartman.max-media.io/brands/{id}/logo?ionic=true'{
"name": "Example",
"header": "example",
"description": "Text shown on the site.",
"slogan": "example",
"logo": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}Uploads a brand's logo (logo, form field). Multipart upload; the logo is resized and stored.
Needs the token of a signed-in user.
The ID of the brand.
curl -X POST 'http://smartman.max-media.io/brands/{id}/logo?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Removes a brand's logo. Deletes the media record too.
Needs the token of a signed-in user.
The ID of the brand.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/brands/{id}/logo?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Get all DynamicdynamicPages. Answers an array of every record.
Needs a site admin token.
Returns the DynamicPage object.
curl -X GET 'http://smartman.max-media.io/dynamic-page?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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"
}
}Creates a custom-model page. Answers 201 with no body.
Needs a site admin token.
Name of the page.
Returns the DynamicPage object.
curl -X POST 'http://smartman.max-media.io/dynamic-page?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "name": "..." }'{
"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"
}
}Totals of a custom-model page's records between ?from and ?to. The same access rules as GET /dynamic-page/:url.
Works without a token; with a user token the answer is personal.
The dynamic page's URL slug, as in its address on the site.
Only dynamic pages with this from.
Only dynamic pages with this to.
Returns the DynamicPage object.
curl -X GET 'http://smartman.max-media.io/dynamic-page-statistics/{url}?ionic=true&from=...&to=...'{
"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"
}
}Updates a custom-model page. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the dynamic page.
Name of the page.
Returns the DynamicPage object.
curl -X PATCH 'http://smartman.max-media.io/dynamic-page/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "name": "..." }'{
"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"
}
}Deletes a custom-model page. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the dynamic page.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/dynamic-page/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'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.
Works without a token; with a user token the answer is personal.
The dynamic page's URL slug, as in its address on the site.
Returns the DynamicPage object.
curl -X GET 'http://smartman.max-media.io/dynamic-page/{url}?ionic=true'{
"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"
}
}Every model's schema, for writing triggers. Answers the model names.
Needs a site admin token.
curl -X GET 'http://smartman.max-media.io/all-used-schemas?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Get all DynamicTriggers. Answers an array of every record.
Needs a site admin token.
Returns the DynamicTrigger object.
curl -X GET 'http://smartman.max-media.io/dynamic-trigger?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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"
}Creates a trigger. Answers 201 with no body. The trigger starts working at once.
Needs a site admin token.
Returns the DynamicTrigger object.
curl -X POST 'http://smartman.max-media.io/dynamic-trigger?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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"
}One trigger. 404 when there is no such record.
Needs a site admin token.
The ID of the dynamic trigger.
Returns the DynamicTrigger object.
curl -X GET 'http://smartman.max-media.io/dynamic-trigger/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}Updates a trigger. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs a site admin token.
The ID of the dynamic trigger.
The error of the last run, if it failed.
When it last ran.
One of: success, failed.
Returns the DynamicTrigger object.
curl -X PATCH 'http://smartman.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": "..." }'{
"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"
}Deletes a trigger. Answers the deleted record, or 404. Records that point to it are not changed.
Needs a site admin token.
The ID of the dynamic trigger.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/dynamic-trigger/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Get all DynamicModels. Answers an array of every record.
Needs a site admin token.
curl -X GET 'http://smartman.max-media.io/dynamicmodel?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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
}
}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.
Needs a site admin token.
The content type's name.
The content type's fields.
curl -X POST 'http://smartman.max-media.io/dynamicmodel?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "name": "...", "fields": "..." }'{
"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
}
}Custom models with user_input=true for a ref type (?ref: User, Service...). 400 without ?ref.
Public - no token needed.
Only content type input fields with this ref.
curl -X GET 'http://smartman.max-media.io/dynamicmodel-input-fields?ionic=true&ref=...'
{
"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
}
}Custom models with user_input=false for a ref type (?ref), including their records. 400 without ?ref.
Public - no token needed.
Only content type select fields with this ref.
curl -X GET 'http://smartman.max-media.io/dynamicmodel-select-fields?ionic=true&ref=...'
{
"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
}
}One custom model. 404 when there is no such record.
Needs a site admin token.
The ID of the content type.
curl -X GET 'http://smartman.max-media.io/dynamicmodel/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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
}
}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.
Needs a site admin token.
The ID of the content type.
The content type's fields.
curl -X PATCH 'http://smartman.max-media.io/dynamicmodel/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "fields": "..." }'{
"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
}
}Deletes a custom model. Its API routes go too. Answers the deleted model, or 404.
Needs a site admin token.
The ID of the content type.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/dynamicmodel/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Approved mini apps, a page at a time. Answers { miniapps, count, usedMiniApps }, ten at a time, newest first.
Needs the token of a signed-in user.
How many results to skip - for paging.
Returns a list of MiniApp objects.
curl -X GET 'http://smartman.max-media.io/all-miniapps/{skip}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'[
{
"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"
}
}
]A mini app's views and openings over time. Views and openings per day.
Needs the token of a signed-in user.
The ID of the mini app insight.
curl -X GET 'http://smartman.max-media.io/mini-app-insights/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}
}Counts an opening of a mini app. Answers with no body.
Needs the token of a signed-in user.
The ID of the mini app open.
curl -X PATCH 'http://smartman.max-media.io/mini-app-open/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}
}Counts a view of a mini app's store page. Answers with no body.
Needs the token of a signed-in user.
The ID of the mini app.
Returns the MiniApp object.
curl -X PATCH 'http://smartman.max-media.io/mini-app-view/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}
}Creates a mini app. Answers 201 with the created record; 400 with the reason when a field is invalid.
Needs the token of a signed-in user.
Returns the MiniApp object.
curl -X POST 'http://smartman.max-media.io/miniapps?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"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"
}
}The signed-in user's data a mini app may read, after a valid code. 401 for an expired or wrong code.
Public - no token needed.
curl -X GET 'http://smartman.max-media.io/miniapps-get-user-data?ionic=true'
{
"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"
}
}The receiving side of a mini app code check. 401 "Unauthorized" for an expired or wrong code.
Public - no token needed.
curl -X GET 'http://smartman.max-media.io/miniapps-receiver-validate-authorization-code?ionic=true'
{
"zip_code": "example",
"city": "example",
"address": "example",
"contact": "example",
"email": "jane@example.com",
"google_app": "example",
"workhours": "example",
"logo": "6543210fedcba98765432100",
"site_name": "Example",
"domain": "example",
"stock_domain": "example",
"isMarket": false,
"forbidden_collections": [
{
"collection_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
],
"isInit": false,
"template": "0000",
"lang": "en",
"favicon": "6543210fedcba98765432100",
"cacheEnabled": false,
"has_completed_startup_prompt": true,
"gmb_location": "example",
"ga_property": "example",
"site_generated_at": "2026-11-04T12:00:00.000Z",
"admin_first_opened_at": "2026-11-04T12:00:00.000Z",
"admin_last_opened_at": "2026-11-04T12:00:00.000Z",
"allowedComponents": {
"services": false,
"products": false,
"blogposts": false,
"programs": false
}
}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 - no token needed.
curl -X GET 'http://smartman.max-media.io/miniapps-temp-authorization-code?ionic=true'
{
"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"
}
}Checks a mini app's authorization code with the issuing site. 401 "Unauthorized" for an expired or wrong code.
Public - no token needed.
curl -X GET 'http://smartman.max-media.io/miniapps-validate-authorization-code?ionic=true'
{
"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"
}
}One mini app with its ratings and similar mini apps. Answers { miniapp, collections, userMiniApps, average_rating, total_ratings, ... }. Never includes the private key.
Needs the token of a signed-in user.
The ID of the mini app.
Returns the MiniApp object.
curl -X GET 'http://smartman.max-media.io/miniapps/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}
}Updates a mini app. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs the token of a signed-in user.
The ID of the mini app.
Screenshots shown in the store.
Returns the MiniApp object.
curl -X PATCH 'http://smartman.max-media.io/miniapps/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "previews": "..." }'{
"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"
}
}Deletes a mini app. Answers the deleted record, or 404. Records that point to it are not changed.
Needs the token of a signed-in user.
The ID of the mini app.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/miniapps/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'The signed-in user's mini apps. Newest first, without their private keys.
Needs the token of a signed-in user.
Returns a list of MiniApp objects.
curl -X GET 'http://smartman.max-media.io/my-mini-apps?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"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"
}
}
]The page that sent the request (referer header). Answers the referer header as text.
Public - no token needed.
curl -X GET 'http://smartman.max-media.io/referer?ionic=true'
A user's mini apps. Newest first, without their private keys.
Needs the token of a signed-in user.
User.id.
Returns the MiniApp object.
curl -X GET 'http://smartman.max-media.io/user-mini-apps/{owner_id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"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"
}
}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.
Needs a site admin token.
What the AI should do with the dynamic model, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
curl -X POST 'http://smartman.max-media.io/create-new-dynamic-model?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic page, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The dynamic page's model id.
curl -X POST 'http://smartman.max-media.io/create-new-dynamic-page?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "model_id": "..." }'{
"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
}
}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.
Needs a site admin token.
What the AI should do with the dynamic trigger, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The dynamic trigger's model id.
curl -X POST 'http://smartman.max-media.io/create-new-dynamic-trigger?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "model_id": "..." }'{
"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
}
}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.
Needs a site admin token.
The delete dynamic model's item ids.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Returns the DynamicModel object.
curl -X POST 'http://smartman.max-media.io/delete-dynamic-model?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "item_ids": "...", "chatId": "..." }'{
"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
}
}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.
Needs a site admin token.
The delete dynamic page's item ids.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Returns the DynamicPage object.
curl -X POST 'http://smartman.max-media.io/delete-dynamic-page?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "item_ids": "...", "chatId": "..." }'{
"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"
}
}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.
Needs a site admin token.
The delete dynamic trigger's item ids.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Returns the DynamicTrigger object.
curl -X POST 'http://smartman.max-media.io/delete-dynamic-trigger?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "item_ids": "...", "chatId": "..." }'{
"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"
}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.
Needs a site admin token.
What the AI should do with the dynamic model, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://smartman.max-media.io/generate-dynamic-model?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic page, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://smartman.max-media.io/generate-dynamic-page?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic trigger, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://smartman.max-media.io/generate-dynamic-trigger?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic model, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
The ID of the dynamic model to change.
The current dynamic model, as JSON - the AI changes it and returns the result.
curl -X POST 'http://smartman.max-media.io/modify-dynamic-model?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "item_id": "...", "item_data": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic page, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
The ID of the dynamic page to change.
The dynamic page's item ids.
The current dynamic page, as JSON - the AI changes it and returns the result.
curl -X POST 'http://smartman.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": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic trigger, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
The ID of the dynamic trigger to change.
The dynamic trigger's item ids.
The current dynamic trigger, as JSON - the AI changes it and returns the result.
curl -X POST 'http://smartman.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": "..." }'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.
Needs a site admin token.
The run dynamic trigger's item ids.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Returns the DynamicTrigger object.
curl -X POST 'http://smartman.max-media.io/run-dynamic-trigger?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "item_ids": "...", "chatId": "..." }'{
"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"
}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.
Needs a site admin token.
The dynamic trigger's item ids.
The trigger runs.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Returns the DynamicTrigger object.
curl -X POST 'http://smartman.max-media.io/toggle-dynamic-trigger?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "item_ids": "...", "enabled": "...", "chatId": "..." }'{
"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"
}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.
Needs a site admin token.
What the AI should do with the dynamic model, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the dynamic model to change.
curl -X POST 'http://smartman.max-media.io/update-dynamic-model?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'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.
Needs a site admin token.
What the AI should do with the dynamic page, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the dynamic page to change.
The dynamic page's model id.
curl -X POST 'http://smartman.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": "..." }'{
"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
}
}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.
Needs a site admin token.
What the AI should do with the dynamic trigger, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the dynamic trigger to change.
The dynamic trigger's model id.
curl -X POST 'http://smartman.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": "..." }'{
"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
}
}