MinMaxHub
Documentation
  • Introduction
  • Architecture
  • Frontend
Domains
  • Nodes
  • Entities
  • Consensus
  • Suggestions
Resources
  • API Reference

Copyright 2026 MinMaxHub

  • Documentation
  • Domains
  • API Reference
Information
Consensus
    Trigger consensus recomputation for an entitypostApprove or reject a suggestion via moderationpostList suggestions pending moderationgetGet consensus page data for SSR renderinggetResolve a full page by slug pathget
Entities
    Create a new entity under a nodepostGet an entity by its unique identifiergetUpdate an entity's title and statusputDelete an entitydeleteRefresh an entity's layout from its parent node templatespatchList entities belonging to a nodegetGet an entity by its full slug pathgetList all entity slug pathsget
Media
    Get a presigned URL for image uploadpost
Nodes
    Create a new node in the taxonomy treepostGet a node by its unique identifiergetArchive a nodepatchUpdate a node's layout templatesputList ancestor nodes for a slug pathgetList direct children of a nodegetList all descendants of a nodegetGet a node by its slug pathget
Rules
    List all rules in a foldergetGet a single rule by folder and component keygetUpdate an existing ruleputCreate a new rulepost
Suggestions
    Create a new content suggestionpostGet a suggestion by its unique identifiergetSoft-delete a suggestiondeleteUpdate a suggestion's value or statuspatchList suggestions by a specific authorgetList suggestions for a specific entitygetList suggestions by target (entity + topic + item)get
Users
    List all usersgetGet a user profile by IDgetGet a user profile by usernameget
Votes
    Cast or change a vote on a suggestionpostGet the authenticated user's votesget
Schemas
powered by Zudoku
MinMaxHub API
MinMaxHub API

Nodes

Endpoint{apiBaseUrl}
Download schema

Taxonomy tree structure — categories, subcategories, and leaf nodes. Nodes form a hierarchical tree identified by slug paths.


Create a new node in the taxonomy tree

POST
{apiBaseUrl}
/nodes

Creates a node under the specified parent. The slug must be unique among siblings. Provide either parentId or parentSlugPath to identify the parent node. Omit both to create a root-level node. Requires authentication.

Create a new node in the taxonomy tree › Request Body

Request body for creating a new node. Provide either parentId or parentSlugPath to specify the parent. Omit both for root nodes.
slug
​string · minLength: 1 · required

URL-safe identifier, must be unique among siblings

title
​string · minLength: 1 · required

Human-readable display title

nodeKind
​string · enum · required

Whether this node is a category folder or entity leaf

Enum values:
folder
entity
parentSlugPath
​string

Slug path of the parent node (alternative to parentId)

parentId
​string · uuid

UUID of the parent node (alternative to parentSlugPath)

​object | null

Optional structured content

status
​string · enum

Initial publication status

Enum values:
draft
published
archived
sortOrder
​integer

Optional sort order among siblings

Create a new node in the taxonomy tree › Responses

Node created successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

A node in the taxonomy tree. Nodes form a hierarchical structure of categories and subcategories. Leaf nodes of kind "entity" hold content entries.

POST/nodes
curl --request POST \ --url %7BapiBaseUrl%7D/nodes \ --header 'Content-Type: application/json' \ --data ' { "parentSlugPath": "dnd/classes", "slug": "bard", "title": "Bard", "nodeKind": "entity" } '
shell
Example Request Body
{ "parentSlugPath": "dnd/classes", "slug": "bard", "title": "Bard", "nodeKind": "entity" }
json
application/json
Example Responses
No example specified for this content type
application/json

Get a node by its unique identifier

GET
{apiBaseUrl}
/nodes/{id}

Retrieves a single node by ID, including its full metadata, templates, and position in the tree. Requires authentication.

Get a node by its unique identifier › path Parameters

id
​string · uuid · required

Unique identifier of the node

Get a node by its unique identifier › Responses

Node retrieved successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

A node in the taxonomy tree. Nodes form a hierarchical structure of categories and subcategories. Leaf nodes of kind "entity" hold content entries.

GET/nodes/{id}
curl --request GET \ --url %7BapiBaseUrl%7D/nodes/:id
shell
Example Responses
No example specified for this content type
application/json

Archive a node

PATCH
{apiBaseUrl}
/nodes/{id}/archive

Marks a node as archived. Archiving is blocked if the node has child nodes (childCount > 0) to prevent orphaning. Requires authentication.

Archive a node › path Parameters

id
​string · uuid · required

Unique identifier of the node to archive

Archive a node › Responses

Node archived successfully (no content)

No data returned
PATCH/nodes/{id}/archive
curl --request PATCH \ --url %7BapiBaseUrl%7D/nodes/:id/archive
shell
Example Responses
No example specified for this content type

Update a node's layout templates

PUT
{apiBaseUrl}
/nodes/{id}/templates

Replaces the layout templates for a node. Templates define the structure that child entities inherit for their content layout. Each template specifies a topic key, validation rule, display order, and optional collection items. Requires authentication.

Update a node's layout templates › path Parameters

id
​string · uuid · required

Unique identifier of the node

Update a node's layout templates › Request Body

Request body for updating a node's layout templates. The nodeId must match the URL path parameter.
nodeId
​string · uuid · required

Node ID (must match the URL path parameter)

​object[] · required

Array of template definitions to set on the node

Update a node's layout templates › Responses

Templates updated successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

A node in the taxonomy tree. Nodes form a hierarchical structure of categories and subcategories. Leaf nodes of kind "entity" hold content entries.

PUT/nodes/{id}/templates
curl --request PUT \ --url %7BapiBaseUrl%7D/nodes/:id/templates \ --header 'Content-Type: application/json' \ --data ' { "nodeId": "c3d4e5f6-a7b8-9012-cdef-123456789012", "templates": [ { "order": 0, "rule": "SuperText", "kind": "single", "title": "Description", "topicKey": "description" }, { "order": 1, "rule": "StatBlock", "kind": "collections", "collectionMode": "expandable", "title": "Abilities", "topicKey": "abilities", "items": [ { "itemKey": "spellcasting", "label": "Spellcasting" } ] } ] } '
shell
Example Request Body
{ "nodeId": "c3d4e5f6-a7b8-9012-cdef-123456789012", "templates": [ { "order": 0, "rule": "SuperText", "kind": "single", "title": "Description", "topicKey": "description" }, { "order": 1, "rule": "StatBlock", "kind": "collections", "collectionMode": "expandable", "title": "Abilities", "topicKey": "abilities", "items": [ { "itemKey": "spellcasting", "label": "Spellcasting" } ] } ] }
json
application/json
Example Responses
No example specified for this content type
application/json

List ancestor nodes for a slug path

GET
{apiBaseUrl}
/nodes/ancestors/{slugPath}

Returns all ancestor nodes from root to the node identified by the slug path, ordered from root to leaf. Used for breadcrumb navigation. The slugPath parameter captures multiple segments. Requires authentication.

List ancestor nodes for a slug path › path Parameters

slugPath
​string · required

Full slug path. Captures multiple segments (e.g., "dnd/classes/bard").

List ancestor nodes for a slug path › Responses

200

Ancestors retrieved successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object[]
GET/nodes/ancestors/{slugPath}
curl --request GET \ --url %7BapiBaseUrl%7D/nodes/ancestors/:slugPath
shell
Example Responses
{ "traceId": "req_abc123", "status": "OK", "message": "Success", "data": [ { "id": "c3d4e5f6-a7b8-9012-cdef-123456789012", "treeId": "MAIN", "parentId": "e5f6a7b8-c9d0-1234-ef01-234567890abc", "slug": "bard", "slugPath": "dnd/classes/bard", "path": "/dnd/classes/bard", "title": "Bard", "nodeKind": "entity", "status": "published", "content": null, "templates": [ { "topicKey": "description", "component": "SuperText", "title": "Description", "kind": "single", "order": 0, "image": { "url": "https://cdn.example.com/images/hero.webp", "alt": "A bard playing a lute" }, "collectionMode": "expandable", "rule": "StatBlock", "items": [ { "itemKey": "spellcasting", "label": "Spellcasting", "defaultValue": { "text": "" }, "lockedFields": [ "itemKey" ] } ] } ], "configVersion": 1, "depth": 2, "childCount": 5, "createdAt": "2026-01-10T08:00:00Z", "updatedAt": "2026-02-05T12:00:00Z", "createdBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" }, "updatedBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" } } ] }
json
application/json

List direct children of a node

GET
{apiBaseUrl}
/nodes/children/{slugPath}

Returns a paginated list of direct child nodes under the node identified by the slug path. The slugPath captures multiple segments. Pass "ROOT" to list root-level nodes. Requires authentication.

List direct children of a node › path Parameters

slugPath
​string · required

Full slug path of the parent node. Captures multiple segments. Use "ROOT" for top-level nodes.

List direct children of a node › query Parameters

limit
​integer · min: 1 · max: 1000

Maximum number of children to return

Default: 100

List direct children of a node › Responses

200

Children retrieved successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

Paginated list of nodes.

GET/nodes/children/{slugPath}
curl --request GET \ --url %7BapiBaseUrl%7D/nodes/children/:slugPath
shell
Example Responses
{ "traceId": "req_abc123", "status": "OK", "message": "Success", "data": { "items": [ { "id": "c3d4e5f6-a7b8-9012-cdef-123456789012", "treeId": "MAIN", "parentId": "e5f6a7b8-c9d0-1234-ef01-234567890abc", "slug": "bard", "slugPath": "dnd/classes/bard", "path": "/dnd/classes/bard", "title": "Bard", "nodeKind": "entity", "status": "published", "content": null, "templates": [ { "topicKey": "description", "component": "SuperText", "title": "Description", "kind": "single", "order": 0, "image": { "url": "https://cdn.example.com/images/hero.webp", "alt": "A bard playing a lute" }, "collectionMode": "expandable", "rule": "StatBlock", "items": [ { "itemKey": "spellcasting", "label": "Spellcasting", "defaultValue": { "text": "" }, "lockedFields": [ "itemKey" ] } ] } ], "configVersion": 1, "depth": 2, "childCount": 5, "createdAt": "2026-01-10T08:00:00Z", "updatedAt": "2026-02-05T12:00:00Z", "createdBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" }, "updatedBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" } } ], "cursor": "eyJsYXN0S2V5Ijp7InBrIjoibm9kZSJ9fQ==" } }
json
application/json

List all descendants of a node

GET
{apiBaseUrl}
/nodes/descendants/{slugPath}

Returns a paginated list of all descendant nodes in the subtree rooted at the node identified by the slug path. The slugPath captures multiple segments. Requires authentication.

List all descendants of a node › path Parameters

slugPath
​string · required

Full slug path of the root node. Captures multiple segments (e.g., "dnd/classes").

List all descendants of a node › query Parameters

limit
​integer · min: 1 · max: 1000

Maximum number of descendants to return

Default: 100

List all descendants of a node › Responses

200

Descendants retrieved successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

Paginated list of nodes.

GET/nodes/descendants/{slugPath}
curl --request GET \ --url %7BapiBaseUrl%7D/nodes/descendants/:slugPath
shell
Example Responses
{ "traceId": "req_abc123", "status": "OK", "message": "Success", "data": { "items": [ { "id": "c3d4e5f6-a7b8-9012-cdef-123456789012", "treeId": "MAIN", "parentId": "e5f6a7b8-c9d0-1234-ef01-234567890abc", "slug": "bard", "slugPath": "dnd/classes/bard", "path": "/dnd/classes/bard", "title": "Bard", "nodeKind": "entity", "status": "published", "content": null, "templates": [ { "topicKey": "description", "component": "SuperText", "title": "Description", "kind": "single", "order": 0, "image": { "url": "https://cdn.example.com/images/hero.webp", "alt": "A bard playing a lute" }, "collectionMode": "expandable", "rule": "StatBlock", "items": [ { "itemKey": "spellcasting", "label": "Spellcasting", "defaultValue": { "text": "" }, "lockedFields": [ "itemKey" ] } ] } ], "configVersion": 1, "depth": 2, "childCount": 5, "createdAt": "2026-01-10T08:00:00Z", "updatedAt": "2026-02-05T12:00:00Z", "createdBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" }, "updatedBy": { "userId": "d4e5f6a7-b8c9-0123-def0-123456789abc", "username": "dungeon_master_42", "photoUrl": "https://cdn.example.com/avatars/dm42.webp" } } ], "cursor": "eyJsYXN0S2V5Ijp7InBrIjoibm9kZSJ9fQ==" } }
json
application/json

Get a node by its slug path

GET
{apiBaseUrl}
/nodes/path/{slugPath}

Resolves a node using its full hierarchical slug path. The slugPath parameter captures multiple segments (e.g., "dnd/classes/bard"). Requires authentication.

Get a node by its slug path › path Parameters

slugPath
​string · required

Full slug path of the node. Captures multiple segments (e.g., "dnd/classes/bard").

Get a node by its slug path › Responses

Node retrieved successfully

Standard response envelope wrapping all API responses. Every response includes a trace ID for debugging, a machine-readable status, and a human-readable message.
status
​string · enum · required

Machine-readable status code

Enum values:
OK
CREATED
ACCEPTED
NO_CONTENT
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
message
​string · required

Human-readable status message

traceId
​string

Unique request trace ID for debugging and log correlation

​object

A node in the taxonomy tree. Nodes form a hierarchical structure of categories and subcategories. Leaf nodes of kind "entity" hold content entries.

GET/nodes/path/{slugPath}
curl --request GET \ --url %7BapiBaseUrl%7D/nodes/path/:slugPath
shell
Example Responses
No example specified for this content type
application/json

MediaRules