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

Entities

Endpoint{apiBaseUrl}
Download schema

Content entries within nodes — spells, classes, monsters, items, etc. Each entity belongs to exactly one node.


Create a new entity under a node

POST
{apiBaseUrl}
/entities

Creates a content entity under the specified node. The slug must be unique within the node's scope and follow the lowercase-kebab-case pattern. The entity inherits its layout from the parent node's templates. Requires authentication.

Create a new entity under a node › Request Body

Request body for creating a new entity. Validated against createEntitySchema in contracts.
nodeId
​string · uuid · required

Parent node ID to create the entity under

slug
​string · minLength: 1 · pattern: ^[a-z0-9]+(?:-[a-z0-… · required

URL-safe identifier, must be unique within the node

title
​string · minLength: 1 · required

Human-readable display title

status
​string · enum

Initial publication status

Enum values:
draft
published
archived
Default: draft

Create a new entity under a node › Responses

Entity 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 content entry within a node. Entities hold structured content defined by their layout templates and populated by suggestions.

POST/entities
curl --request POST \ --url %7BapiBaseUrl%7D/entities \ --header 'Content-Type: application/json' \ --data ' { "nodeId": "c3d4e5f6-a7b8-9012-cdef-123456789012", "slug": "fireball", "title": "Fireball", "status": "draft" } '
shell
Example Request Body
{ "nodeId": "c3d4e5f6-a7b8-9012-cdef-123456789012", "slug": "fireball", "title": "Fireball", "status": "draft" }
json
application/json
Example Responses
No example specified for this content type
application/json

Get an entity by its unique identifier

GET
{apiBaseUrl}
/entities/{id}

Retrieves a single entity by ID. Returns the full entity object including layout templates and metadata. No authentication required.

Get an entity by its unique identifier › path Parameters

id
​string · uuid · required

Unique identifier of the entity

Get an entity by its unique identifier › Responses

Entity 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 content entry within a node. Entities hold structured content defined by their layout templates and populated by suggestions.

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

Update an entity's title and status

PUT
{apiBaseUrl}
/entities/{id}

Updates the title and status of an existing entity. The entityId is taken from the URL path, not the request body. Requires authentication.

Update an entity's title and status › path Parameters

id
​string · uuid · required

Unique identifier of the entity to update

Update an entity's title and status › Request Body

Request body for updating an entity. The entityId is taken from the URL path, not the request body.
title
​string · minLength: 1 · required

New display title

status
​string · enum · required

New publication status

Enum values:
draft
published
archived

Update an entity's title and status › Responses

Entity 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 content entry within a node. Entities hold structured content defined by their layout templates and populated by suggestions.

PUT/entities/{id}
curl --request PUT \ --url %7BapiBaseUrl%7D/entities/:id \ --header 'Content-Type: application/json' \ --data ' { "title": "Fireball (Revised)", "status": "published" } '
shell
Example Request Body
{ "title": "Fireball (Revised)", "status": "published" }
json
application/json
Example Responses
No example specified for this content type
application/json

Delete an entity

DELETE
{apiBaseUrl}
/entities/{id}

Soft-deletes an entity by its unique identifier. Associated suggestions and consensus data remain in the database but become orphaned. Requires authentication.

Delete an entity › path Parameters

id
​string · uuid · required

Unique identifier of the entity to delete

Delete an entity › Responses

Entity deleted 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

data
​null
DELETE/entities/{id}
curl --request DELETE \ --url %7BapiBaseUrl%7D/entities/:id
shell
Example Responses
{ "traceId": "req_del001", "status": "OK", "message": "Entity deleted", "data": null }
json
application/json

Refresh an entity's layout from its parent node templates

PATCH
{apiBaseUrl}
/entities/{id}/layout

Re-syncs the entity's layout configuration with the current templates defined on its parent node. Returns whether the layout was actually changed and the new config version. Requires authentication.

Refresh an entity's layout from its parent node templates › path Parameters

id
​string · uuid · required

Unique identifier of the entity

Refresh an entity's layout from its parent node templates › Responses

Layout refreshed 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

Result of refreshing an entity's layout from its parent node.

PATCH/entities/{id}/layout
curl --request PATCH \ --url %7BapiBaseUrl%7D/entities/:id/layout
shell
Example Responses
{ "traceId": "req_lay001", "status": "OK", "message": "Layout refreshed", "data": { "entityId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "refreshed": true, "configVersion": 3 } }
json
application/json

List entities belonging to a node

GET
{apiBaseUrl}
/entities/node/{id}

Returns a paginated list of entities under the specified node. Optionally filter by entity status. No authentication required.

List entities belonging to a node › path Parameters

id
​string · uuid · required

Unique identifier of the parent node

List entities belonging to a node › query Parameters

status
​string · enum

Filter entities by status

Enum values:
draft
published
archived
limit
​integer · min: 1 · max: 1000

Maximum number of items to return per page

Default: 100
nextToken
​string

Opaque cursor from a previous response for pagination

List entities belonging to a node › Responses

200

Entities 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 entities.

GET/entities/node/{id}
curl --request GET \ --url %7BapiBaseUrl%7D/entities/node/:id
shell
Example Responses
{ "traceId": "req_abc123", "status": "OK", "message": "Success", "data": { "items": [ { "entityId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "nodeId": "c3d4e5f6-a7b8-9012-cdef-123456789012", "slug": "fireball", "slugPath": "dnd/spells/fireball", "title": "Fireball", "status": "published", "layout": [ { "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": 2, "createdAt": "2026-01-15T09:00:00Z", "updatedAt": "2026-02-10T14:30: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": "eyJsYXN0S2V5Ijp7InBrIjoiZW50In19" } }
json
application/json

Get an entity by its full slug path

GET
{apiBaseUrl}
/entities/path/{slugPath}

Resolves an entity using its full hierarchical slug path. The slugPath parameter captures multiple path segments (e.g., "dnd/classes/bard/fireball"). No authentication required.

Get an entity by its full slug path › path Parameters

slugPath
​string · required

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

Get an entity by its full slug path › Responses

Entity 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 content entry within a node. Entities hold structured content defined by their layout templates and populated by suggestions.

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

List all entity slug paths

GET
{apiBaseUrl}
/entities/slugs

Returns a flat array of all entity slug paths in the system. Used for sitemap generation and client-side search indexing. No authentication required.

List all entity slug paths › Responses

200

Slug list 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

data
​string[]

Array of all entity slug paths

GET/entities/slugs
curl --request GET \ --url %7BapiBaseUrl%7D/entities/slugs
shell
Example Responses
{ "traceId": "req_slug001", "status": "OK", "message": "Slugs retrieved", "data": [ "dnd/classes/bard/fireball", "dnd/races/tiefling", "dnd/monsters/beholder" ] }
json
application/json

ConsensusMedia