Quick Start
Get up and running with the TellsTree API in minutes
Features
Ressources
/api/projects
/api/nodes
/api/edges
/api/media
/api/comments
/api/themes
/api/designs
Rate Limits
API rate limiting prevents abuse and ensures fair usage. Limits are enforced per IP address and vary by endpoint type.
All API responses include rate limit information in the headers. When limits are exceeded, a 429 status is returned.
Header Fields
X-RateLimit-LimitMaximum requests allowed in the current windowX-RateLimit-RemainingRemaining requests in the current windowRetry-AfterSeconds to wait before retry (429 responses only)
300 requests/minute
General API limit (optimized for graph editor)
5 attempts/minute
Login attempts
30 requests/minute
Token refresh
3 attempts/10 minutes
User registration
Error Handling
The API uses conventional HTTP response codes to indicate success or failure. All error responses follow a consistent JSON format with RFC 7807 Problem Details.
Error responses include a `type` (URL to error documentation), `title` (human-readable summary), `detail` (explanation), and `status` (HTTP code).
200, 201, 204
Success responses
400, 401, 403, 404, 422, 429
Client errors
500, 503
Server errors
Authentication
The TellsTree API uses JWT (JSON Web Token) based authentication. You need to obtain a token by logging in with valid credentials.
/api/auth/login
Login / Obtain token
/api/auth/me
Get current user info
/api/auth/refresh
Refresh token
/api/auth/logout
Logout / Invalidate token
/api/.well-known/jwks.json
Public keys (JWKS)
Login
Most API endpoints require authentication. Get your JWT token through the authentication endpoint.
Required Credentials
email- Your account emailpassword- Your account password
Response
https://tellstree.com/api/auth/login{
"data": {
"user": {
"id": 105,
"name": "Owner",
"email": "***REDACTED***",
"created_at": "2025-10-01T13:25:26.000000Z"
},
"token": {
"access_token": "***REDACTED***",
"token_type": "Bearer",
"expires_in": 3600,
"expires_at": "2025-10-17T23:41:32+00:00"
}
}
}
Refresh Token
Tokens expire after 1 hour. Use the refresh endpoint to get a new access token without re-authentication.
Token Refresh
- • Refresh token is stored as HttpOnly cookie
- • No request body required
- • Returns new access token
- • Include cookies with request
Response
https://tellstree.com/api/auth/refresh{
"data": {
"token": {
"access_token": "***REDACTED***",
"token_type": "bearer",
"expires_in": 3600,
"expires_at": "2025-10-17T23:41:33+00:00"
}
}
}
Get Current User
Get information about the currently authenticated user and token details.
Authentication Required
- • Include JWT token in Authorization header
- • Returns user profile and token information
- • Useful for validating token status
Response
https://tellstree.com/api/auth/me{
"data": {
"user": {
"id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
"name": "Owner",
"email": "***REDACTED***",
"created_at": "2025-12-17T15:11:38.000000Z",
"last_api_access": "2026-09-13T19:37:55.000000Z"
},
"token": {
"token_type": "Bearer",
"expires_in": 3599,
"expires_at": "2026-09-13T20:37:54+00:00",
"issued_at": "2026-09-13T19:37:54+00:00"
}
}
}
Logout
Logout and invalidate all tokens for the current user. This prevents further API access with existing tokens.
Token Invalidation
- • Invalidates current access token
- • Invalidates refresh token
- • Increments user token version
- • Clears authentication cookies
Response
https://tellstree.com/api/auth/logout
JSON Web Key Set (JWKS)
Public cryptographic keys for verifying JWT tokens issued by TellsTree. Required for external systems that need to validate TellsTree tokens independently.
Use Cases
- • Microservices: Verify TellsTree tokens without API calls
- • API Gateways: Validate tokens at gateway level
- • Single Sign-On (SSO): Enable SSO integrations
- • Third-party Apps: Verify token authenticity offline
Technical Details
- • Standard RFC 7517 compliant endpoint
- • RSA-256 public keys included
- • Key rotation support via 'kid' field
- • No authentication required (public endpoint)
Response
https://tellstree.com/api/.well-known/jwks.json{
"data": {
"keys": [
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"kid": "c48cf1222c05070a",
"n": "sRlgwhSbh4tZQOu_UDciJpBu9OeoiOiEooZxQaypsRtKcd-kb7QN-cDQqIauH7-oa0Z4tEhp1Fwb8oWeG7dSDOWJsmC5l0o0Xg7B09VGxtgV1KnVp_I_89tTMEReAfDexe5oDdQK-DyiZ_oFMkKuIE3x3byn0gGsoC7UaBzKDc0D4Rb6FgYTX2KaUUfET74H7LbFeDrXVmCnuDwgfMMdT77I5jNSAD3NI2_ZAV-EhCiNIuy-P3Cx-LmCDbj-TNviKwSsdBzCkd2g6kiUj3pfUBjbed9-LzvDJcBNQUjgLsf08RK2gRHuIXHJJDDDRYE7SfXxQw0lN-BdXuoZ2OK7cw",
"e": "AQAB"
}
]
}
}
Using Tokens for API Access
Once you have an access token, include it in the Authorization header for all API requests.
Authorization Header
Authorization: Bearer YOUR_TOKEN- • Required for all protected endpoints
- • Token expires after 1 hour
- • Use refresh endpoint to get new tokens
Example API Call
GET /api/projectsAuthorization: Bearer eyJ0eXAiOiJKV1Q...Accept: application/json
https://tellstree.com/api/projects{
"method": "GET",
"url": "/api/projects",
"headers": {
"Authorization": [
"***REDACTED***"
]
},
"payload": null,
"recorded_at": "2025-10-17T22:41:34+00:00"
}
?? Projects
Projects are the top-level containers for your storytelling content. Each project can contain multiple nodes (story elements) and edges (connections).
/api/projects
List all projects
/api/projects
Create project
/api/projects/{id}
Get project
/api/projects/{id}
Update project
/api/projects/{id}
Delete project
/api/projects/{id}/activity
Poll for activity updates
List Public Projects
Retrieve all publicly available projects. No authentication required.
Query Parameters
query[is_public]
Set to true to get public projects
query[page]
Page number (default: 1)
query[per_page]
Items per page (default: 15)
Response
https://tellstree.com/api/projects{
"data": {
"projects": [
{
"title": "Pit Repro 169 oeffentlich ohne Mitglieder",
"description": "Pruefprojekt fuer TKT-2026090169",
"media": null,
"is_public": true,
"created_at": "2026-09-13T23:15:15.000000Z",
"updated_at": "2026-09-13T23:15:15.000000Z",
"project_id": "HJ7EJ26TGJKK63WVMJSEGDNFHZ",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "WV5SV6ZRCNBGFP892EZDX12J9M",
"name": "Game Theme",
"domain": "game"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Adventure Quest",
"description": null,
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:38:35.000000Z",
"updated_at": "2026-09-13T19:38:35.000000Z",
"project_id": "SXW5F0ZN48Q1DH839KFVWKS59A",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Mystery Novel",
"description": "Eum est laboriosam nesciunt ut quod. Perferendis excepturi aperiam est natus. Fugiat magnam illum qui facere nobis magni.",
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:38:35.000000Z",
"updated_at": "2026-09-13T19:38:35.000000Z",
"project_id": "1MZ32AE6H7Z2HJ179R6F24N4KR",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Explicabo minus quo.",
"description": null,
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:36:50.000000Z",
"updated_at": "2026-09-13T19:36:50.000000Z",
"project_id": "1N71903A1ZMW7XSQ4BR3W25ZAB",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "8STAWGGBPMHMXYHYR6KNSRG1Q4",
"user_name": "Dariana Walker"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Laboriosam non dolore.",
"description": "Voluptate modi quia inventore autem. Est quod sint voluptatem nulla atque est laudantium. Quo nulla dolor sed et.",
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:36:49.000000Z",
"updated_at": "2026-09-13T19:36:49.000000Z",
"project_id": "6JAP2X5JFRMW8D70P4GB7AQ71T",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "DPSK5Z9ZXZVMQF49S8HZ9GHE7K",
"user_name": "Prof. Mavis Toy IV"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
}
],
"pagination": {
"page": 1,
"per_page": 5,
"total": 5
}
}
}
List Private Projects
Retrieve all projects that the authenticated user has access to. Authentication required.
Headers
Authorization
Bearer {your_jwt_token}
Query Parameters
query[page]
Page number (optional)
query[per_page]
Items per page (optional)
Response
https://tellstree.com/api/projects{
"data": {
"projects": [
{
"title": "Pit Repro 169 oeffentlich ohne Mitglieder",
"description": "Pruefprojekt fuer TKT-2026090169",
"media": null,
"is_public": true,
"created_at": "2026-09-13T23:15:15.000000Z",
"updated_at": "2026-09-13T23:15:15.000000Z",
"project_id": "HJ7EJ26TGJKK63WVMJSEGDNFHZ",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "WV5SV6ZRCNBGFP892EZDX12J9M",
"name": "Game Theme",
"domain": "game"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Adventure Quest",
"description": null,
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:38:35.000000Z",
"updated_at": "2026-09-13T19:38:35.000000Z",
"project_id": "SXW5F0ZN48Q1DH839KFVWKS59A",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Mystery Novel",
"description": "Eum est laboriosam nesciunt ut quod. Perferendis excepturi aperiam est natus. Fugiat magnam illum qui facere nobis magni.",
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:38:35.000000Z",
"updated_at": "2026-09-13T19:38:35.000000Z",
"project_id": "1MZ32AE6H7Z2HJ179R6F24N4KR",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 0,
"owner": null
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Explicabo minus quo.",
"description": null,
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:36:50.000000Z",
"updated_at": "2026-09-13T19:36:50.000000Z",
"project_id": "1N71903A1ZMW7XSQ4BR3W25ZAB",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "8STAWGGBPMHMXYHYR6KNSRG1Q4",
"user_name": "Dariana Walker"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
},
{
"title": "Laboriosam non dolore.",
"description": "Voluptate modi quia inventore autem. Est quod sint voluptatem nulla atque est laudantium. Quo nulla dolor sed et.",
"media": null,
"is_public": true,
"created_at": "2026-09-13T19:36:49.000000Z",
"updated_at": "2026-09-13T19:36:49.000000Z",
"project_id": "6JAP2X5JFRMW8D70P4GB7AQ71T",
"is_locked": false,
"nodes": {
"nodes_count": 0
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "DPSK5Z9ZXZVMQF49S8HZ9GHE7K",
"user_name": "Prof. Mavis Toy IV"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": false
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
}
],
"pagination": {
"page": 1,
"per_page": 5,
"total": 5
}
}
}
Create New Project
Create a new storytelling project with a theme and design.
Response
data.project{} (Complete Project object with theme, design, nodes, edges, members, capabilities, comments)
data.errors{}
https://tellstree.com/api/projects{
"data": {
"project": {
"title": "API Test Project 1789341534",
"description": "Created by automated test",
"is_public": false,
"created_at": "2026-09-13T23:18:54.000000Z",
"updated_at": "2026-09-13T23:18:54.000000Z",
"project_id": "NMWFMX40NVJBWVF6E6WADVQY51",
"is_locked": false,
"nodes": {
"nodes_count": 2
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
"user_name": "Owner"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": true
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
}
}
}
Get Single Project
Retrieve detailed information about a specific project.
Response
https://tellstree.com/api/projects/{id}{
"data": {
"project": {
"title": "API Test Project 1789341534",
"description": "Created by automated test",
"media": null,
"is_public": false,
"created_at": "2026-09-13T23:18:54.000000Z",
"updated_at": "2026-09-13T23:18:54.000000Z",
"project_id": "NMWFMX40NVJBWVF6E6WADVQY51",
"is_locked": false,
"nodes": {
"nodes_count": 2
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
"user_name": "Owner"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": true
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
}
}
}
Update Project
Update an existing project's properties, theme, or design.
🔒 Lock Management
Lock/unlock functionality is integrated into the update endpoint:
- •
is_locked: true- Lock project for current user - •
is_locked: false- Unlock project (only by lock owner) - • Response includes
is_locked: true/false - • Auto-unlock: Locks expire automatically after 300 seconds when project is accessed
Response
https://tellstree.com/api/projects/{id}{
"data": {
"project": {
"title": "API Test Project 1789341534 updated",
"description": "Created by automated test",
"media": null,
"is_public": false,
"created_at": "2026-09-13T23:18:54.000000Z",
"updated_at": "2026-09-13T23:18:54.000000Z",
"project_id": "NMWFMX40NVJBWVF6E6WADVQY51",
"is_locked": true,
"nodes": {
"nodes_count": 2
},
"edges": {
"edges_count": 0
},
"members": {
"members_count": 1,
"owner": {
"user_id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
"user_name": "Owner"
}
},
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story"
},
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original"
},
"capabilities": {
"userCanDelete": true
},
"comments": {
"comments_count": 0,
"comments_rating": 0
}
}
}
}
Delete Project
Permanently delete a project and all its content.
Response
https://tellstree.com/api/projects/{id}
Poll for Activity Updates
Retrieve IDs of resources that have been modified since a given timestamp. Enables real-time collaborative editing. Authentication required.
Headers
Authorization
Bearer {your_jwt_token}
Query Parameters
since
Unix timestamp - only return activities after this time (optional)
Response
https://tellstree.com/api/projects/{id}/activity{
"nodes": [
"SGQ4A9SQRXWYK1Y1TJ09S5D1QZ"
],
"edges": [],
"users": [],
"timestamp": 1789328271
}
📋 Nodes
Nodes are the building blocks of your story. Each node represents a narrative element like a scene, chapter or character. A Node can contain text, media, and interactive elements.
/api/nodes
List all nodes
/api/nodes
Create new node
/api/nodes?query[include]=ids
Get specific nodes (lazy loading)
/api/nodes/{node}
Get node details
/api/nodes/{node}
Update node
/api/nodes/{node}
Delete node
List Nodes
Retrieve all nodes or filter by project, including their content, position, and metadata.
Query Parameters
query[project_id]- Filter by project ID (required)query[page]- Page number (optional, default: 1)query[per_page]- Items per page (optional, default: 20)
Response
https://tellstree.com/api/nodes{
"data": {
"nodes": [
{
"node_id": "PKDJSHNTAAACVDPR22JAV4F7P6",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "start",
"label": "Start",
"content": [],
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-18T03:06:52.000000Z",
"outgoing_edges_count": 4,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "G1EA86336NCVQSX6K7SQPR2V0G",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "end",
"label": "End",
"content": [],
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-15T01:10:44.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 4,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "character",
"label": "Wilhelm Tell",
"content": {
"name": "Wilhelm Tell",
"description": "A silent hero of justice - a man of few words, but unshakable principles. He values freedom over obedience, and would rather risk death than bow to a tyrant."
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "YM17E03PC6FY6FKGKV9V5QH792",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "character",
"label": "Walter Tell",
"content": {
"name": "Walter Tell",
"description": "Wilhelm Tells son."
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "QNKW04Z1ET7HTCGC4A3CA8PGW0",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Trust me!",
"content": {
"message": "Trust me!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17"
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-19T14:34:59.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "122Q411CBPB1VSFWYJ3VS8AB4F",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Are you sure you won\u00b4t kill me?",
"content": {
"message": "Are you sure you won\u00b4t kill me?",
"speaker": "YM17E03PC6FY6FKGKV9V5QH792",
"speaker_int_backup": 4
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-19T14:03:06.000000Z",
"outgoing_edges_count": 4,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "8FJW80RHSQE75PMD4CCKYMJ5RN",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "You are right. I can't do that.",
"content": {
"message": "You are right. I can't do that.",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-15T01:11:13.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "NKZKBJBHZQ7WKHH8P9FJ2MMSD4",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Trust me son!",
"content": {
"message": "Trust me son!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "SMAQ85Q79CYZZVCGXCP61B971X",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Son just stop shaking!",
"content": {
"message": "Son just stop shaking!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "GG4Q99Q64Q1W7753R9R0M03HGS",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog",
"label": "Apple Shot Talk",
"content": {
"title": "Apple Shot Talk",
"description": "Wilhelm wants his son to calm down."
},
"media": [],
"created_at": "2025-12-18T03:10:33.000000Z",
"updated_at": "2025-12-18T03:10:33.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "Z1GQ4GPM30V2JHJ3V841KWP01Z",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "scene",
"label": "The Apple Shot",
"content": {
"title": "The Apple Shot",
"description": "The famous apple shot scene."
},
"media": [],
"created_at": "2025-12-18T03:15:59.000000Z",
"updated_at": "2025-12-18T03:15:59.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "BCSVNRRE72XMV9QDBNASZTH00T",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 1",
"content": {
"title": "Chapter 1",
"summary": "This is the very first chapter."
},
"media": [],
"created_at": "2025-12-18T03:17:30.000000Z",
"updated_at": "2025-12-18T03:17:30.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "PE2051MQEYT7ER5HSDBTQZ56MB",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 2",
"content": {
"title": "Chapter 2",
"summary": "This is the second chapter."
},
"media": [],
"created_at": "2025-12-18T03:20:29.000000Z",
"updated_at": "2025-12-18T03:20:29.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "ARXTM2EZ77E67QWXDWPH3WAEVE",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 3",
"content": {
"title": "Chapter 3",
"summary": "The third chapter starts here"
},
"media": [],
"created_at": "2025-12-18T03:23:05.000000Z",
"updated_at": "2025-12-18T03:23:05.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "XKJ2CFDBTCZ8KND6CKB8D4YABX",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 4",
"content": {
"title": "Chapter 4",
"summary": "The fourth chapter is here"
},
"media": [],
"created_at": "2025-12-18T03:24:45.000000Z",
"updated_at": "2025-12-18T03:24:45.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "F9H3JTDHC3HNEE6MV8BJ4ATFMV",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Stay calm!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "Stay calm!",
"speaker_int_backup": "3"
},
"media": [],
"created_at": "2026-02-12T16:44:43.000000Z",
"updated_at": "2026-02-12T16:44:43.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "KBJA1EX8G1J2S18QW8X1932K7V",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Run!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "Run!"
},
"media": [],
"created_at": "2026-02-15T02:34:02.000000Z",
"updated_at": "2026-02-19T14:34:36.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "D1J0J8C1WQK3673W9YQR9ZSGMQ",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "A little left!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "A little left!"
},
"media": [],
"created_at": "2026-02-15T02:54:05.000000Z",
"updated_at": "2026-02-19T14:03:59.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "V4TE0HWAB311WD64HBFDASKC3G",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Yes!",
"content": {
"speaker": "YM17E03PC6FY6FKGKV9V5QH792",
"message": "Yes!"
},
"media": [],
"created_at": "2026-02-18T03:08:23.000000Z",
"updated_at": "2026-02-19T14:34:45.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "FVX1ECBDPZCWG3ZG6BFDY7PN3C",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "E2E: lokaler Pruefknoten (Thea 13.09.2026)",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "E2E: lokaler Pruefknoten (Thea 13.09.2026)"
},
"media": [],
"created_at": "2026-09-13T03:48:15.000000Z",
"updated_at": "2026-09-13T03:48:15.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 20,
"total_items": 20,
"page": 1
}
}
}
Load Specific Nodes
Get specific nodes by IDs for lazy loading in the TellsTreeGraph editor. Used for performance optimization when working with large projects.
Query Parameters
query[project_id]- Required project IDquery[include]- Comma-separated node IDs- • Returns canvas-ready node data
- • Optimized for editor performance
Response
https://tellstree.com/api/nodes{
"data": {
"nodes": [
{
"node_id": "PKDJSHNTAAACVDPR22JAV4F7P6",
"type": "start",
"label": "Start",
"content": [],
"media": [],
"compactView": null,
"detailView": null,
"resolvedProps": []
},
{
"node_id": "G1EA86336NCVQSX6K7SQPR2V0G",
"type": "end",
"label": "End",
"content": [],
"media": [],
"compactView": null,
"detailView": null,
"resolvedProps": []
},
{
"node_id": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"type": "character",
"label": "Wilhelm Tell",
"content": {
"name": "Wilhelm Tell",
"description": "A silent hero of justice - a man of few words, but unshakable principles. He values freedom over obedience, and would rather risk death than bow to a tyrant."
},
"media": [],
"compactView": null,
"detailView": null,
"resolvedProps": {
"header": "Wilhelm Tell",
"content": "A silent hero of justice - a man of few words, but unshakable principles. He values freedom over obedience, and would rather risk death than bow to a tyrant.",
"image": "",
"imageAlign": "top"
}
}
]
}
}
Create Node
Create a new node. Nodes can exist independently or be associated with a project via project_id.
Required Fields
title- Node title
Optional Fields
project_id- Associate with projectcontent- Node content/texttype- Node typeposition_x- X coordinateposition_y- Y coordinateproperties- Custom properties
Response
https://tellstree.com/api/nodes{
"data": {
"node": {
"node_id": "XTA5WRKZ83SPYBV358ZM3W8DWN",
"project_id": "64EVPGQQB6G9GNA954F6SECPN6",
"type": "character",
"label": "API Test Character 1789328277",
"content": {
"name": "API Test Character 1789328277",
"description": "Node created by automated API test"
},
"media": [],
"created_at": "2026-09-13T19:37:57.000000Z",
"updated_at": "2026-09-13T19:37:57.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
}
}
}
Get Node
Retrieve detailed information about a specific node, including all its properties and metadata.
URL Parameters
project- Project IDnode- Node ID
Response
https://tellstree.com/api/nodes/{node}{
"data": {
"nodes": [
{
"node_id": "PKDJSHNTAAACVDPR22JAV4F7P6",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "start",
"label": "Start",
"content": [],
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-18T03:06:52.000000Z",
"outgoing_edges_count": 4,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "G1EA86336NCVQSX6K7SQPR2V0G",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "end",
"label": "End",
"content": [],
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-15T01:10:44.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 4,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "character",
"label": "Wilhelm Tell",
"content": {
"name": "Wilhelm Tell",
"description": "A silent hero of justice - a man of few words, but unshakable principles. He values freedom over obedience, and would rather risk death than bow to a tyrant."
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "YM17E03PC6FY6FKGKV9V5QH792",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "character",
"label": "Walter Tell",
"content": {
"name": "Walter Tell",
"description": "Wilhelm Tells son."
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "QNKW04Z1ET7HTCGC4A3CA8PGW0",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Trust me!",
"content": {
"message": "Trust me!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17"
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-19T14:34:59.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "122Q411CBPB1VSFWYJ3VS8AB4F",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Are you sure you won\u00b4t kill me?",
"content": {
"message": "Are you sure you won\u00b4t kill me?",
"speaker": "YM17E03PC6FY6FKGKV9V5QH792",
"speaker_int_backup": 4
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-19T14:03:06.000000Z",
"outgoing_edges_count": 4,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "8FJW80RHSQE75PMD4CCKYMJ5RN",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "You are right. I can't do that.",
"content": {
"message": "You are right. I can't do that.",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2026-02-15T01:11:13.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "NKZKBJBHZQ7WKHH8P9FJ2MMSD4",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Trust me son!",
"content": {
"message": "Trust me son!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "SMAQ85Q79CYZZVCGXCP61B971X",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Son just stop shaking!",
"content": {
"message": "Son just stop shaking!",
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"speaker_int_backup": 3
},
"media": [],
"created_at": "2025-12-17T15:11:39.000000Z",
"updated_at": "2025-12-17T15:11:39.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "GG4Q99Q64Q1W7753R9R0M03HGS",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog",
"label": "Apple Shot Talk",
"content": {
"title": "Apple Shot Talk",
"description": "Wilhelm wants his son to calm down."
},
"media": [],
"created_at": "2025-12-18T03:10:33.000000Z",
"updated_at": "2025-12-18T03:10:33.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "Z1GQ4GPM30V2JHJ3V841KWP01Z",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "scene",
"label": "The Apple Shot",
"content": {
"title": "The Apple Shot",
"description": "The famous apple shot scene."
},
"media": [],
"created_at": "2025-12-18T03:15:59.000000Z",
"updated_at": "2025-12-18T03:15:59.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "BCSVNRRE72XMV9QDBNASZTH00T",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 1",
"content": {
"title": "Chapter 1",
"summary": "This is the very first chapter."
},
"media": [],
"created_at": "2025-12-18T03:17:30.000000Z",
"updated_at": "2025-12-18T03:17:30.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "PE2051MQEYT7ER5HSDBTQZ56MB",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 2",
"content": {
"title": "Chapter 2",
"summary": "This is the second chapter."
},
"media": [],
"created_at": "2025-12-18T03:20:29.000000Z",
"updated_at": "2025-12-18T03:20:29.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "ARXTM2EZ77E67QWXDWPH3WAEVE",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 3",
"content": {
"title": "Chapter 3",
"summary": "The third chapter starts here"
},
"media": [],
"created_at": "2025-12-18T03:23:05.000000Z",
"updated_at": "2025-12-18T03:23:05.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "XKJ2CFDBTCZ8KND6CKB8D4YABX",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "chapter",
"label": "Chapter 4",
"content": {
"title": "Chapter 4",
"summary": "The fourth chapter is here"
},
"media": [],
"created_at": "2025-12-18T03:24:45.000000Z",
"updated_at": "2025-12-18T03:24:45.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "F9H3JTDHC3HNEE6MV8BJ4ATFMV",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Stay calm!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "Stay calm!",
"speaker_int_backup": "3"
},
"media": [],
"created_at": "2026-02-12T16:44:43.000000Z",
"updated_at": "2026-02-12T16:44:43.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "KBJA1EX8G1J2S18QW8X1932K7V",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Run!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "Run!"
},
"media": [],
"created_at": "2026-02-15T02:34:02.000000Z",
"updated_at": "2026-02-19T14:34:36.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "D1J0J8C1WQK3673W9YQR9ZSGMQ",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "A little left!",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "A little left!"
},
"media": [],
"created_at": "2026-02-15T02:54:05.000000Z",
"updated_at": "2026-02-19T14:03:59.000000Z",
"outgoing_edges_count": 1,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "V4TE0HWAB311WD64HBFDASKC3G",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "Yes!",
"content": {
"speaker": "YM17E03PC6FY6FKGKV9V5QH792",
"message": "Yes!"
},
"media": [],
"created_at": "2026-02-18T03:08:23.000000Z",
"updated_at": "2026-02-19T14:34:45.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 1,
"is_locked": false,
"locked_by": null,
"locked_at": null
},
{
"node_id": "FVX1ECBDPZCWG3ZG6BFDY7PN3C",
"project_id": "01KHFBZSS300011X6EQ7H267R2",
"type": "dialog-entry",
"label": "E2E: lokaler Pruefknoten (Thea 13.09.2026)",
"content": {
"speaker": "JVRMME1XQVKFZT5W4KHGNFHQ17",
"message": "E2E: lokaler Pruefknoten (Thea 13.09.2026)"
},
"media": [],
"created_at": "2026-09-13T03:48:15.000000Z",
"updated_at": "2026-09-13T03:48:15.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": false,
"locked_by": null,
"locked_at": null
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 20,
"total_items": 20,
"page": 1
}
}
}
Update Node
Update an existing node's content, position, properties, or other attributes.
🔒 Lock Management
Lock/unlock functionality is integrated into the update endpoint:
- •
is_locked: true- Lock node for current user - •
is_locked: false- Unlock node (only by lock owner) - • Response includes
is_locked: true/false - • Auto-unlock: Locks expire automatically after 300 seconds when node is accessed
Updatable Fields
title- Node titlecontent- Node contenttype- Node typeposition_x- X coordinateposition_y- Y coordinateproperties- Custom propertieslocked_by- Lock status (user_id or null)
Response
https://tellstree.com/api/nodes/{node}{
"data": {
"node": {
"node_id": "XTA5WRKZ83SPYBV358ZM3W8DWN",
"project_id": "64EVPGQQB6G9GNA954F6SECPN6",
"type": "character",
"label": "Updated API Test Character",
"content": {
"name": "Updated API Test Character",
"description": "Node created by automated API test"
},
"media": [],
"created_at": "2026-09-13T19:37:57.000000Z",
"updated_at": "2026-09-13T19:37:58.000000Z",
"outgoing_edges_count": 0,
"incoming_edges_count": 0,
"is_locked": true,
"locked_by": "01KHF8MP96QY9KMPXF67Z5ZE3R",
"locked_at": "2026-09-13 19:37:58"
}
}
}
Delete Node
Permanently delete a node from the project. This will also remove all connected edges.
Response
https://tellstree.com/api/nodes/{node}
?? Edges
Edges create connections between nodes, defining the flow and relationships in your interactive stories. They represent transitions, choices, and narrative pathways.
/api/edges
List all edges
/api/edges
Create new edge
/api/edges/{edge}
Get edge details
/api/edges/{edge}
Update edge
/api/edges/{edge}
Delete edge
Create Edge
Create a new edge connection between two nodes in a project.
Required Fields
source_node_id- ID of source nodetarget_node_id- ID of target node
Optional Fields
label- Display text for edgecondition- Edge activation condition
Response
https://tellstree.com/api/edges{
"data": {
"edge": {
"edge_id": "6EKQKTMPWTDECFB5T85THMZHRK",
"project_id": "3VXKJBDTYV0GDB8GN1WXTQV73X",
"from_node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"to_node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "connection",
"label": null,
"description": null,
"condition": null,
"created_at": "2026-09-13T19:37:53.000000Z",
"updated_at": "2026-09-13T19:37:53.000000Z",
"from_node": {
"node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"type": "character",
"label": "Edge API Node 1789328273"
},
"to_node": {
"node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "character",
"label": "Edge API Node 2 1789328273"
},
"is_locked": false
}
}
}
Get Edge
Retrieve detailed information about a specific edge, including source and target node details.
URL Parameters
project- Project IDedge- Edge ID
Response
https://tellstree.com/api/edges/{edge}{
"data": {
"edge": {
"edge_id": "6EKQKTMPWTDECFB5T85THMZHRK",
"project_id": "3VXKJBDTYV0GDB8GN1WXTQV73X",
"from_node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"to_node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "connection",
"label": null,
"description": null,
"condition": null,
"created_at": "2026-09-13T19:37:53.000000Z",
"updated_at": "2026-09-13T19:37:53.000000Z",
"from_node": {
"node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"type": "character",
"label": "Edge API Node 1789328273"
},
"to_node": {
"node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "character",
"label": "Edge API Node 2 1789328273"
},
"is_locked": false
}
}
}
Update Edge
Update properties of an existing edge. You can modify the label, condition, and connection endpoints.
🔒 Lock Management
Lock/unlock functionality is integrated into the update endpoint:
- •
is_locked: true- Lock edge for current user - •
is_locked: false- Unlock edge (only by lock owner) - • Response includes
is_locked: true/false - • Auto-unlock: Locks expire automatically after 300 seconds when edge is accessed
Request Body
source_node_id- Source node IDtarget_node_id- Target node IDlabel- Edge display labelcondition- Edge conditionlocked_by- Lock status (internal use only)
Response
https://tellstree.com/api/edges/{edge}{
"data": {
"edge": {
"edge_id": "6EKQKTMPWTDECFB5T85THMZHRK",
"project_id": "3VXKJBDTYV0GDB8GN1WXTQV73X",
"from_node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"to_node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "connection",
"label": null,
"description": null,
"condition": "updated condition",
"created_at": "2026-09-13T19:37:53.000000Z",
"updated_at": "2026-09-13T19:37:53.000000Z",
"from_node": {
"node_id": "YQZJ5HYCH15WZVGYJC636QA14S",
"type": "character",
"label": "Edge API Node 1789328273"
},
"to_node": {
"node_id": "J69H73NPTMDC8N9P9XMSRQQWGF",
"type": "character",
"label": "Edge API Node 2 1789328273"
},
"is_locked": true
}
}
}
Delete Edge
Permanently delete an edge connection. This action cannot be undone and will break the connection between nodes.
Response
https://tellstree.com/api/edges/{edge}
🎬 Media
Media files can be attached to projects, nodes, or edges. Support for images, videos, audio, and documents to enrich your interactive stories with multimedia content.
/api/media
List all media
/api/media
Upload new media
/api/media/{media}
Get media details
/api/media/{media}
Update media metadata
/api/media/{media}/visibility
Update visibility
/api/media/{media}
Delete media
List Media
Retrieve all media files or filter by project, node, or edge.
Query Parameters
project_id- Filter by project ID (optional)node_id- Filter by node ID (optional)edge_id- Filter by edge ID (optional)type- Filter by media type (optional)page- Page number (optional)per_page- Items per page (optional)
Response
https://tellstree.com/api/media{
"data": {
"media": [
{
"media_id": 1,
"filename": "hero-image.jpg",
"original_name": "Hero Image.jpg",
"mime_type": "image/jpeg",
"size": 1048576,
"path": "/storage/media/hero-image.jpg",
"url": "https://tellstree.com/storage/media/hero-image.jpg",
"project_id": 42,
"node_id": null,
"edge_id": null,
"visibility": "public",
"alt_text": "Hero image for opening scene",
"description": "Main visual for the story introduction",
"metadata": {
"width": 1920,
"height": 1080,
"aspect_ratio": "16:9"
},
"created_at": "2024-01-15T10:00:00.000000Z",
"updated_at": "2024-01-15T10:00:00.000000Z"
}
],
"pagination": {
"current_page": 1,
"total_pages": 3,
"per_page": 10,
"total_items": 25
}
},
"meta": {
"request_id": "req_67890",
"timestamp": "2024-01-15T10:00:00.000000Z"
}
}
Upload Media
Upload a new media file and attach it to a project, node, or edge.
Required Fields
file- Media file to upload
Optional Fields
project_id- Attach to projectnode_id- Attach to nodeedge_id- Attach to edgealt_text- Alternative textdescription- Media descriptionvisibility- public/private
Response
https://tellstree.com/api/media{
"data": {
"media_id": 123,
"filename": "uploaded-image.jpg",
"original_name": "My Image.jpg",
"mime_type": "image/jpeg",
"size": 2097152,
"path": "/storage/media/uploaded-image.jpg",
"url": "https://tellstree.com/storage/media/uploaded-image.jpg",
"project_id": 42,
"node_id": null,
"edge_id": null,
"visibility": "public",
"alt_text": "Uploaded image",
"description": "User uploaded media file",
"metadata": {
"width": 1600,
"height": 900,
"aspect_ratio": "16:9"
},
"created_at": "2024-01-15T10:30:00.000000Z",
"updated_at": "2024-01-15T10:30:00.000000Z"
},
"meta": {
"request_id": "req_12345",
"timestamp": "2024-01-15T10:30:00.000000Z"
}
}
Themes
Themes define the visual styling and appearance of your storytelling projects. Each theme contains color schemes, fonts, and layout configurations.
/api/themes
List all themes
/api/themes/{theme}
Get theme by domain
List All Themes
Retrieve a paginated list of all available themes. This is a public endpoint and does not require authentication.
Query Parameters
page- Page number (optional, default: 1)per_page- Items per page (optional, default: 15)
Response
https://tellstree.com/api/themes{
"data": {
"themes": [
{
"theme_id": "1MV932GAHRKYAF20PMV8M3F11H",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:14.000000Z",
"updated_at": "2026-09-13T17:21:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4VWMRXCMK22BBW6BQWCZB0WR7D",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:16.000000Z",
"updated_at": "2026-09-13T17:21:16.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "12AZWPS6DXWMTR2QG1GVRXSZCR",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:23:50.000000Z",
"updated_at": "2026-09-13T17:23:50.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "NAWR695ZCW1FRDJJHVBN3F5Y37",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:23:52.000000Z",
"updated_at": "2026-09-13T17:23:52.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "84H0WFMSV6QY8AX8HNY1M3674R",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:58.000000Z",
"updated_at": "2026-09-13T17:24:58.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "QMVDDGQ99PXXJCC1DQGCG0ZG4Z",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:00.000000Z",
"updated_at": "2026-09-13T17:25:00.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8Q33V4QXNT7E9EY1J1X12RP46F",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:32.000000Z",
"updated_at": "2026-09-13T17:25:32.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "Z86HTV6GGFAJMVK10CCWGJCYHA",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:37.000000Z",
"updated_at": "2026-09-13T17:25:37.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "24YXZY4XF45782B28QHCT91VTV",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:26:11.000000Z",
"updated_at": "2026-09-13T17:26:11.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "XDYCY4WYSDCXVJ3A7FP30SK9N2",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:26:13.000000Z",
"updated_at": "2026-09-13T17:26:13.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "FXYHBPD7FGGWJX0ESS88B904QB",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:27:04.000000Z",
"updated_at": "2026-09-13T17:27:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "B389DHZ2XHK08R9XEW54QFS4PQ",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:27:06.000000Z",
"updated_at": "2026-09-13T17:27:06.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "97A4VNGM58K65F0R26AE7CK2A4",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:29:01.000000Z",
"updated_at": "2026-09-13T17:29:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4JC01RC8CHA3Q48Y6FC9355VB6",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:29:07.000000Z",
"updated_at": "2026-09-13T17:29:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "PS7WF9Z9BDQ7JACGBMSBEEB773",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:26.000000Z",
"updated_at": "2026-09-13T17:30:26.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "9WYJ35D3P4BB8QZ97V8CFECWD5",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:29.000000Z",
"updated_at": "2026-09-13T17:30:29.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "0910RMD4R4AHWX7YGSGRB6ZAQ2",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:48.000000Z",
"updated_at": "2026-09-13T17:30:48.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "S5EME4BF0QGGMYX6NSZYJNHGFS",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:51.000000Z",
"updated_at": "2026-09-13T17:30:51.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8XV65RXXZQ5W01YRFFTRTWQ766",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:33.000000Z",
"updated_at": "2026-09-13T17:41:33.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "DK8XRYC6MN3KNT8CQZJT5C80RN",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:39.000000Z",
"updated_at": "2026-09-13T17:41:39.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "119V96P3780B9XMRRG9GGSFAYV",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:43.000000Z",
"updated_at": "2026-09-13T18:05:43.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "5YHZSKSMPGBD6JDESPA0C1V691",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:05.000000Z",
"updated_at": "2026-09-13T18:06:05.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "ZXTKHK2RQ91041JV6Z4VZ21TJ7",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "FHC3A463XQ2AS4Z57QRRQBP2TH",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:58.000000Z",
"updated_at": "2026-09-13T18:25:58.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "6NGAQGB5NKN05R3HB46HVDXDAK",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:25:19.000000Z",
"updated_at": "2026-09-13T19:25:19.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "81Q88DPZNCCE75E64678ZXZ69Z",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:26:26.000000Z",
"updated_at": "2026-09-13T19:26:26.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "Q857837AYHA7TABCW963J2SH4F",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:27:58.000000Z",
"updated_at": "2026-09-13T19:27:58.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "ARF71XVC5S1C8FVP96JM1DR2MD",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:01.000000Z",
"updated_at": "2026-09-13T19:28:01.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "2D7C5RTBQ5R3529PHHBPE4AXAM",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:30:42.000000Z",
"updated_at": "2026-09-13T19:30:42.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "QDZBJK68MGV9V79C7F4R7WHGEX",
"name": "Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:30:46.000000Z",
"updated_at": "2026-09-13T19:30:46.000000Z",
"statistics": {
"projects_count": 1,
"is_default": true
}
},
{
"theme_id": "V8HW2S3DK1GPBD85P1C0DKHAVK",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:09.000000Z",
"updated_at": "2026-09-13T17:21:09.000000Z",
"statistics": {
"projects_count": 500,
"is_default": true
}
},
{
"theme_id": "6TKYBX9TGJE21Q25C9RFFZMR6M",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "PF40S0ACPV7X21KH7Q1ZCJ9NBN",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "B50FYQXS4D81P5WTPFWV33GVAW",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YS4NWN1W1HKBD4V28XXHQ8SKR4",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "XFJBYJAYZN9C0QXGMPW8H8Q714",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "91E92S99JSK3TZECT141BQTD07",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "Q08FS8P0T55KB3XAJ3PXSRNY1E",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "HB010ENB9TJBAGR5MTSB7N46Q4",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "64FV462D4GXMQ0YER60KM895NG",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "26EX4XEHXTCBP7THBK7TQ1SGE1",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:24:23.000000Z",
"updated_at": "2026-09-13T17:24:23.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "FM4E652SW3C5ZFAETF4SATTHZS",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:03.000000Z",
"updated_at": "2026-09-13T17:25:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "T698QB4J950D41MXAZQF0Z9KZJ",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:03.000000Z",
"updated_at": "2026-09-13T17:25:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CABWGSP6PZGV35VN2JQD1WQ8S9",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:03.000000Z",
"updated_at": "2026-09-13T17:25:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "Z9CKHVC906AXBDVCJ9YQ4398XN",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "RYNKA1D7BKH18SP5Q45TT9QG84",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "77NWE0JGDKRJ1GR5CKRWK5GHCM",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "79CKW5VCYED48K3V31HQ5M7PR8",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "ZQ5AWY53G3TB52K6JPRN4GMBE3",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "K5ZJSK5CWVRYQSPZ1QPK6SDZGD",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YQA0J7BZT4WJE37V0W8Q6G3ZQ1",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "H8EF20YSFS8C1A3G8T47ZXPNPX",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DMNN807742Z4NE39EXXW5EV2ZH",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "EX6A918BHSJJQC8F8ZX1JSE0C3",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "GWRZJYRWDVYP3V67MPJNYNSGTF",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:04.000000Z",
"updated_at": "2026-09-13T17:25:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "TKDB7QRA07Y6341DQ5AE9ZSR2R",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:43.000000Z",
"updated_at": "2026-09-13T17:41:43.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CS0JKRHXFP774KT4YWZM9PA4EF",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:43.000000Z",
"updated_at": "2026-09-13T17:41:43.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "GF9FJ4D050NT8X24Q5R9DC246W",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4VHJYJZB5YVRKYYCNFXQE45H1F",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "2NF19K99D33G5RXKZRVBB7ACGD",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "HV75J8A2H6W340DJ4SAN29BS1V",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "VXYHVY01R6MR2116B59JVQW2S7",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "PZNW9CETB19SDAWJJ52TDPA328",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "WM1RC4VXJZ9KTNEX1C7B9J3E99",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:44.000000Z",
"updated_at": "2026-09-13T17:41:44.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4GXNXXP7YZKW0TV32SR0QWA5PE",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:45.000000Z",
"updated_at": "2026-09-13T17:41:45.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "40GVQWVTEMPSM7WK4R1FWGZQRD",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:45.000000Z",
"updated_at": "2026-09-13T17:41:45.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DQE58N3WX25ZRPHWYCW56VP36A",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:45.000000Z",
"updated_at": "2026-09-13T17:41:45.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "ZWQPHWJ4X8PGH19MZYYME6YFEG",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:45.000000Z",
"updated_at": "2026-09-13T17:41:45.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "PQDQZ3M2ZVSATBV13BGED3QGKA",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:38.000000Z",
"updated_at": "2026-09-13T18:05:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "H3GQWV2CQT096ZF8AZAA0BRNFW",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:38.000000Z",
"updated_at": "2026-09-13T18:05:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DF0V8HF9RGGBN9TT6XQYD8EJ2D",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:38.000000Z",
"updated_at": "2026-09-13T18:05:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "E4NY6N2TNW8ZXG9JJKW9T0ZDPK",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:38.000000Z",
"updated_at": "2026-09-13T18:05:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "EZVJE7DV0N1XDFNX3B0QTTR6XH",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:38.000000Z",
"updated_at": "2026-09-13T18:05:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "KD5198R8QHBSQWZRDZZQV43X5G",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:39.000000Z",
"updated_at": "2026-09-13T18:05:39.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "9V6YMM1Y94V0JJQFGSVMHCJWHZ",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:39.000000Z",
"updated_at": "2026-09-13T18:05:39.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "VTYY7WM80SJRRD6DBPWBAWJ1V9",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:40.000000Z",
"updated_at": "2026-09-13T18:05:40.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "TZ9B4MCZW5V8NJTNWRPKPW4635",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:40.000000Z",
"updated_at": "2026-09-13T18:05:40.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YA0MPVN0S5KJ4PB2WD96APDP7J",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:41.000000Z",
"updated_at": "2026-09-13T18:05:41.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "AJTZF7SXQ2G7Z8NH6EZD51HQ43",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:41.000000Z",
"updated_at": "2026-09-13T18:05:41.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "QV05YQA7D6S4KH4R3CHMBQNVD9",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:42.000000Z",
"updated_at": "2026-09-13T18:05:42.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "GJVTKX574WG44CCR70591Q2T8K",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:43.000000Z",
"updated_at": "2026-09-13T18:05:43.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4VYEBDFJP47XS3EJ31MBGQQB36",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "WHF9D96XWCQ74HGRNMYKRS41MG",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:02.000000Z",
"updated_at": "2026-09-13T18:06:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "S6DER5NTH418BEFCC4Q64ACMXP",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:02.000000Z",
"updated_at": "2026-09-13T18:06:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "RBVWVX2NGF492MT6KY214E9VAF",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:02.000000Z",
"updated_at": "2026-09-13T18:06:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "ZX2E6PBR5A7PPM74MYAT7H83WH",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:02.000000Z",
"updated_at": "2026-09-13T18:06:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "TKNJ38710PZ2CAH4R00X09QQM6",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:03.000000Z",
"updated_at": "2026-09-13T18:06:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "HK8GTZAAV5FCQQX4XZB2F3C998",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:03.000000Z",
"updated_at": "2026-09-13T18:06:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "NAK07DS43EJMX4P3HAEJV9AYXG",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:03.000000Z",
"updated_at": "2026-09-13T18:06:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "XVQ9KGYQ601R132D1C1A0RPE26",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:03.000000Z",
"updated_at": "2026-09-13T18:06:03.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CQ0HZTS4N0T4BEWZNFGWPDRCQE",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:04.000000Z",
"updated_at": "2026-09-13T18:06:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "QQZ14JXGSQ3BGA31EADKTDVMZS",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:04.000000Z",
"updated_at": "2026-09-13T18:06:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "G3NP50VNC5JC4MFN3DJJ6PF8T9",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:04.000000Z",
"updated_at": "2026-09-13T18:06:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CWB50S6XRSK0N492QHAZMF897R",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:05.000000Z",
"updated_at": "2026-09-13T18:06:05.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "AJFS0DQETSSEG2WFHGXAMNYDTN",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:05.000000Z",
"updated_at": "2026-09-13T18:06:05.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "SPBHX7C39CNPT6MDGF850A8EJ3",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4DW33BT36S5SCKDPY62G3RYT3F",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YMJWDB3WM4PD76NR5SCC1ZSG5Q",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "BYKB6J0D41H06FACVFYM84S87K",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "R3HZWW638JFXV1BDP5YYRD4D5X",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CHQWW8NN9R3X410RK5ZV0PXC7H",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:56.000000Z",
"updated_at": "2026-09-13T18:25:56.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "2H816YNYQ25MEFPMB1VTZ2WSJP",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YXX0P8M1B5SS8B2Q51ZGCV2Z37",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "T91F5H9VNS7NFPQ9PEP1GTB2PD",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "AWY2XKCG2FMX20P40NWN2VH132",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DFDA5MZH5VXJ0028V9RX2YDCRW",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "2MR3P1QSK8ENYGZWYFSEPF84DY",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "JGVG0M1C543C2E04VWA993FESK",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8PJ3MH5J5G24NN73Q17KDNER5Q",
"name": "Dialog-Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "WV5SV6ZRCNBGFP892EZDX12J9M",
"name": "Game Theme",
"domain": "game",
"created_at": "2025-12-17T15:11:38.000000Z",
"updated_at": "2025-12-17T15:11:38.000000Z",
"statistics": {
"projects_count": 4,
"is_default": false
},
"badge": [
"Game",
"Adventure",
"Interactive"
],
"version": "1.0.0",
"description": "Create an immersive game with scenes, characters, items and dialog.",
"nodes": {
"start": {
"name": "Start",
"description": "The origin of the narrative - the beginning of all paths",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "Start",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "StartNode",
"props": []
}
},
"end": {
"name": "End",
"description": "The conclusion of the narrative - where all paths converge",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "End",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "EndNode",
"props": []
}
},
"audio-segment": {
"name": "Audio Segment",
"description": "Background music or sound effect segment",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Title",
"isLabel": true,
"placeholder": "Audio segment title"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 2,
"placeholder": "Describe the audio mood..."
}
},
"media": {
"audio": {
"form": "upload",
"type": "file",
"label": "Audio File",
"formats": [
"mp3",
"wav",
"ogg"
],
"maxSize": "5MB"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Audio: {{self.content.title}}",
"content": "{{self.content.description}}"
}
}
},
"chapter": {
"name": "Chapter",
"description": "A chapter of the game",
"forms": {
"title": {
"label": "Title",
"form": "input",
"type": "string",
"required": true,
"isLabel": true,
"placeholder": "The title of the chapter."
},
"summary": {
"label": "Summary",
"form": "textarea",
"type": "string",
"required": false,
"rows": 4,
"placeholder": "Brief summary of the chapter."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Chapter: {{self.content.title}}",
"content": "{{self.content.summary}}"
}
}
},
"character": {
"name": "Character",
"description": "Character with properties and profile",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Character Name",
"isLabel": true,
"placeholder": "The name of the character."
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "The description of the character."
},
"traits": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Traits",
"rows": 3,
"placeholder": "Character traits (e.g. brave, shy...)"
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Character Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "2MB"
},
"avatar": {
"form": "upload",
"type": "file",
"label": "Avatar/Portrait",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "1MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}",
"imageAlign": "top"
}
}
},
"checkpoint": {
"name": "Checkpoint",
"description": "A save point or checkpoint in the game",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Checkpoint Name",
"isLabel": true,
"placeholder": "Name of the checkpoint"
},
"note": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Note",
"rows": 2,
"placeholder": "Optional note about this checkpoint"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Checkpoint: {{self.content.name}}",
"content": "{{self.content.note}}"
}
}
},
"dialog": {
"name": "Dialog",
"description": "Start of a conversation between characters",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Dialog Title",
"isLabel": true,
"placeholder": "What is the dialog about?"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Dialog description..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Dialog Start",
"content": "{{self.content.title}}: {{self.content.description}}"
}
}
},
"dialog-entry": {
"name": "Dialog Entry",
"description": "Individual speech contribution of a character",
"forms": {
"speaker": {
"form": "select",
"type": "string",
"required": true,
"label": "Speaker",
"options": [
{
"label": "{{node[{{character}}].content.name}}",
"value": "{{node[{{character}}].public_id}}"
}
],
"placeholder": "Select character..."
},
"message": {
"form": "contentarea",
"type": "string",
"required": true,
"label": "Message",
"isLabel": true,
"rows": 4,
"placeholder": "What does the character say?"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{node[id=(self.content.speaker)].content.name}}:",
"content": "\"{{self.content.message}}\"",
"image": "{{node[id=(self.content.speaker)].media.image}}",
"imageAlign": "left"
}
}
},
"effect": {
"name": "Effect",
"description": "A visual or gameplay effect",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Effect Name",
"isLabel": true,
"placeholder": "Name of the effect"
},
"type": {
"form": "select",
"type": "string",
"required": true,
"label": "Effect Type",
"options": [
{
"label": "Visual",
"value": "visual"
},
{
"label": "Audio",
"value": "audio"
},
{
"label": "Gameplay",
"value": "gameplay"
},
{
"label": "Status",
"value": "status"
}
]
},
"description": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Description",
"rows": 3,
"placeholder": "Describe the effect..."
},
"duration": {
"form": "input",
"type": "string",
"required": false,
"label": "Duration",
"placeholder": "Effect duration (optional)"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Effect: {{self.content.name}}",
"content": "{{self.content.description}}"
}
}
},
"environment-segment": {
"name": "Environment Segment",
"description": "Environmental narrative or atmosphere description",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Title",
"isLabel": true,
"placeholder": "Environment segment title"
},
"content": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Content",
"rows": 6,
"placeholder": "Describe the environment, atmosphere, sounds..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Environment",
"content": "{{self.content.content}}"
}
}
},
"event": {
"name": "Event",
"description": "A triggered event in the game",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Event Name",
"isLabel": true,
"placeholder": "Name of the event"
},
"trigger": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Trigger Condition",
"rows": 2,
"placeholder": "What triggers this event?"
},
"description": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Description",
"rows": 4,
"placeholder": "What happens when this event is triggered?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Event: {{self.content.name}}",
"content": "{{self.content.description}}"
}
}
},
"gameplay-segment": {
"name": "Gameplay Segment",
"description": "A segment of gameplay mechanics or instructions",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Title",
"isLabel": true,
"placeholder": "Gameplay segment title"
},
"mechanics": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Mechanics",
"rows": 5,
"placeholder": "Describe the gameplay mechanics..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Gameplay",
"content": "{{self.content.mechanics}}"
}
}
},
"inventory": {
"name": "Inventory",
"description": "An inventory container or system",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Inventory Name",
"isLabel": true,
"placeholder": "Name of the inventory"
},
"capacity": {
"form": "input",
"type": "string",
"required": false,
"label": "Capacity",
"placeholder": "Maximum capacity (optional)"
},
"note": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Note",
"rows": 2,
"placeholder": "Additional notes..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Inventory: {{self.content.name}}",
"content": "Capacity: {{self.content.capacity}}"
}
}
},
"item": {
"name": "Item",
"description": "An item that can be collected or used",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Item Name",
"isLabel": true,
"placeholder": "Name of the item"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 3,
"placeholder": "What is this item?"
},
"usage": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Usage",
"rows": 2,
"placeholder": "How can it be used?"
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Item Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "1MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}"
}
}
},
"location": {
"name": "Location",
"description": "A physical location in the game world",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Location Name",
"isLabel": true,
"placeholder": "Name of the location"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Describe the location..."
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Location Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "2MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}"
}
}
},
"object": {
"name": "Object",
"description": "An interactive object in the game",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Object Name",
"isLabel": true,
"placeholder": "Name of the object"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 3,
"placeholder": "What does it look like?"
},
"interaction": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Interaction",
"rows": 3,
"placeholder": "What happens when interacting with it?"
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Object Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "1MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}"
}
}
},
"quest": {
"name": "Quest",
"description": "A quest or mission for the player",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Quest Title",
"isLabel": true,
"placeholder": "Name of the quest"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "What is the quest about?"
},
"objective": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Objective",
"rows": 3,
"placeholder": "What must be accomplished?"
},
"reward": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Reward",
"rows": 2,
"placeholder": "What reward does the player receive?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Quest: {{self.content.title}}",
"content": "{{self.content.objective}}"
}
}
},
"scene": {
"name": "Scene",
"description": "A scene within a chapter",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Scene Title",
"isLabel": true,
"placeholder": "Name of the scene"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "What happens in this scene?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Scene: {{self.content.title}}",
"content": "{{self.content.description}}"
}
}
},
"stage": {
"name": "Stage",
"description": "A stage or phase within gameplay",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Stage Name",
"isLabel": true,
"placeholder": "Name of the stage"
},
"objective": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Objective",
"rows": 3,
"placeholder": "What must the player accomplish?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Stage: {{self.content.name}}",
"content": "{{self.content.objective}}"
}
}
},
"story-segment": {
"name": "Story Segment",
"description": "A segment of a story",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Segment Title",
"isLabel": true,
"placeholder": "What is the segment about?"
},
"content": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Content",
"rows": 4,
"placeholder": "Content of the story segment."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Story Segment",
"content": "{{self.content.title}}: {{self.content.content}}"
}
}
},
"task": {
"name": "Task",
"description": "A specific task within a quest or objective",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Task Name",
"isLabel": true,
"placeholder": "Name of the task"
},
"description": {
"form": "textarea",
"type": "string",
"required": true,
"label": "Description",
"rows": 3,
"placeholder": "What needs to be done?"
},
"optional": {
"form": "select",
"type": "string",
"required": false,
"label": "Optional",
"options": [
{
"label": "Required",
"value": "false"
},
{
"label": "Optional",
"value": "true"
}
]
}
},
"graph": {
"component": "Card",
"props": {
"header": "Task: {{self.content.name}}",
"content": "{{self.content.description}}"
}
}
},
"trait": {
"name": "Trait",
"description": "A character trait or attribute",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Trait Name",
"isLabel": true,
"placeholder": "Name of the trait"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 3,
"placeholder": "Describe the trait..."
},
"effect": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Effect",
"rows": 2,
"placeholder": "What effect does this trait have?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Trait: {{self.content.name}}",
"content": "{{self.content.description}}"
}
}
}
},
"node_types": [
"start",
"end",
"audio-segment",
"chapter",
"character",
"checkpoint",
"dialog",
"dialog-entry",
"effect",
"environment-segment",
"event",
"gameplay-segment",
"inventory",
"item",
"location",
"object",
"quest",
"scene",
"stage",
"story-segment",
"task",
"trait"
],
"edges": [
"flow",
"contains",
"link"
],
"startNode": "start",
"endNode": "end",
"graph": {
"nodes": [
"start",
"end",
"audio-segment",
"chapter",
"checkpoint",
"dialog",
"dialog-entry",
"effect",
"environment-segment",
"event",
"gameplay-segment",
"inventory",
"item",
"location",
"object",
"quest",
"scene",
"stage",
"story-segment",
"task",
"trait"
],
"edges": [
"flow",
"contains",
"link"
]
}
},
{
"theme_id": "612GBK8WMPTZ73X5D8DV3W4N89",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:21:17.000000Z",
"updated_at": "2026-09-13T17:21:17.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "RG4G081HZZHWXV0E1G9P6XNW5W",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:23:53.000000Z",
"updated_at": "2026-09-13T17:23:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "74C2HYDXF4YRKD5WEFG606S0G7",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:25:01.000000Z",
"updated_at": "2026-09-13T17:25:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "KD6FQWQDCZHTWRX4P9NATPEQ7Q",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:25:39.000000Z",
"updated_at": "2026-09-13T17:25:39.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "VWQ71WMNJG5EPKTDYFZ6PG21EP",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:26:14.000000Z",
"updated_at": "2026-09-13T17:26:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "XSW2XX5DJ073GG4QQDWEY6BY3T",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:27:07.000000Z",
"updated_at": "2026-09-13T17:27:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "W0M13EPZ1A3084W0C704MFJXFE",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:29:08.000000Z",
"updated_at": "2026-09-13T17:29:08.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "B7PXHYJ8MZ1CATV7M771H9VFTY",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:30:31.000000Z",
"updated_at": "2026-09-13T17:30:31.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "0CRN69ABD2F2MEHKPGQY7XSQBC",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:30:53.000000Z",
"updated_at": "2026-09-13T17:30:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "SMH6FR2FC3NPPNCDHEKXAKY3PA",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T17:41:41.000000Z",
"updated_at": "2026-09-13T17:41:41.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "4V8X9A6XR6P0DJJTJHKX603YBT",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T18:05:37.000000Z",
"updated_at": "2026-09-13T18:05:37.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "3GNCPJ3ARY64VS9KX576C43JK5",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "5Q6HGV832WEXZ6A78V3P21ZNCM",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "6WP63B566EP9JE1YT3QAHBY9CN",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T19:28:02.000000Z",
"updated_at": "2026-09-13T19:28:02.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "Q8HE5ZM1HK18V44VR5WQGC1NM3",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T19:28:46.000000Z",
"updated_at": "2026-09-13T19:28:46.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "8SBQFDCW0W30HG9RJWB5JW0ZJN",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T19:29:04.000000Z",
"updated_at": "2026-09-13T19:29:04.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "4TN9E6AMT7ZVJ8Z43GN5YDTEQ4",
"name": "Non-existent Theme",
"domain": "non-existent",
"created_at": "2026-09-13T19:30:47.000000Z",
"updated_at": "2026-09-13T19:30:47.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "7KAYSSA4749C3HCJ66GWYN0HKE",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:21:17.000000Z",
"updated_at": "2026-09-13T17:21:17.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "3TZARPNM20D971TZD7W37BRTNS",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:23:53.000000Z",
"updated_at": "2026-09-13T17:23:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "EXZEG5FP1MANXQAZ17W8D6TQJP",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:25:02.000000Z",
"updated_at": "2026-09-13T17:25:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "ND0F20NWXGPWYCWNCXJS6XC8N6",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:25:39.000000Z",
"updated_at": "2026-09-13T17:25:39.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "5RSW1H16ZW09QA5KKT2C9DDN21",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:26:14.000000Z",
"updated_at": "2026-09-13T17:26:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "K365CWZERE3PC85W8YK4F643WS",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:27:07.000000Z",
"updated_at": "2026-09-13T17:27:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "R2JEKQSH1EH7JZM2CNTJZ5ERHH",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:29:08.000000Z",
"updated_at": "2026-09-13T17:29:08.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "SD4B3P4AY04GK1ETHQC4CNVYJ6",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:30:31.000000Z",
"updated_at": "2026-09-13T17:30:31.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "D8NTV312QKEC8806M9E8JNSYM1",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:30:53.000000Z",
"updated_at": "2026-09-13T17:30:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "J8351MBMQ9JGVT7T3B36GB61PK",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T17:41:41.000000Z",
"updated_at": "2026-09-13T17:41:41.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "6M8GQJCET2YHF567W8Y4ZM9WN2",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T18:05:37.000000Z",
"updated_at": "2026-09-13T18:05:37.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "XJTEDWE0H5N661R315Z0PTNZG2",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "6NY24NGHTD4BHGEDXT5TXJ8BW1",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T18:25:57.000000Z",
"updated_at": "2026-09-13T18:25:57.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "K8EFV3MZH3K2NH35D3ZAJXPWFM",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T19:28:03.000000Z",
"updated_at": "2026-09-13T19:28:03.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "2J6F0NYA2ARJ18VTE1S9HGM4KG",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T19:28:46.000000Z",
"updated_at": "2026-09-13T19:28:46.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "MQS83KSY0WPJXDN0KYWZK8227Q",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T19:29:04.000000Z",
"updated_at": "2026-09-13T19:29:04.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "C6GDH7FGYAW7JE32KA5ES5EHHN",
"name": "Simple Theme",
"domain": "simple",
"created_at": "2026-09-13T19:30:47.000000Z",
"updated_at": "2026-09-13T19:30:47.000000Z",
"statistics": {
"projects_count": 1,
"is_default": false
}
},
{
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story",
"created_at": "2025-12-17T15:11:38.000000Z",
"updated_at": "2025-12-17T15:11:38.000000Z",
"statistics": {
"projects_count": 5170,
"is_default": false
},
"badge": "Story",
"version": "1.0.0",
"description": "Interactive stories with characters, dialogs, chapters and scenes",
"nodes": {
"start": {
"name": "Start",
"description": "The origin of the narrative - the beginning of all paths",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "Start",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "StartNode",
"props": []
}
},
"end": {
"name": "End",
"description": "The conclusion of the narrative - where all paths converge",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "End",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "EndNode",
"props": []
}
},
"character": {
"name": "Character",
"description": "Character with properties and profile",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Character Name",
"isLabel": true,
"placeholder": "Enter character name..."
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Character description..."
},
"traits": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Traits",
"rows": 3,
"placeholder": "Character traits (e.g. brave, shy...)"
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Character Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "2MB"
},
"avatar": {
"form": "upload",
"type": "file",
"label": "Avatar/Portrait",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "1MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}",
"imageAlign": "top"
}
}
},
"dialog": {
"name": "Dialog",
"description": "Start of a conversation between characters",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Dialog Title",
"isLabel": true,
"placeholder": "What is the dialog about?"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Dialog description..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Dialog Start",
"content": "{{self.content.title}}: {{self.content.description}}"
}
}
},
"dialog-entry": {
"name": "Dialog Entry",
"description": "Individual speech contribution of a character",
"forms": {
"speaker": {
"form": "select",
"type": "string",
"required": true,
"label": "Speaker",
"options": [
{
"label": "{{node[{{character}}].content.name}}",
"value": "{{node[{{character}}].public_id}}"
}
],
"placeholder": "Select character..."
},
"message": {
"form": "contentarea",
"type": "string",
"required": true,
"label": "Message",
"isLabel": true,
"rows": 4,
"placeholder": "What does the character say?"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{node[id=(self.content.speaker)].content.name}}:",
"content": "\"{{self.content.message}}\"",
"image": "{{node[id=(self.content.speaker)].media.image}}",
"imageAlign": "left"
}
}
},
"chapter": {
"name": "Chapter",
"description": "A chapter of the game",
"forms": {
"title": {
"label": "Title",
"form": "input",
"type": "string",
"required": true,
"isLabel": true,
"placeholder": "The title of the chapter."
},
"summary": {
"label": "Summary",
"form": "textarea",
"type": "string",
"required": false,
"rows": 4,
"placeholder": "Brief summary of the chapter."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Chapter: {{self.content.title}}",
"content": "{{self.content.summary}}"
}
}
},
"scene": {
"name": "Scene",
"description": "A scene within a chapter",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Scene Title",
"isLabel": true,
"placeholder": "Name of the scene"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "What happens in this scene?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Scene: {{self.content.title}}",
"content": "{{self.content.description}}"
}
}
},
"story-segment": {
"name": "Story Segment",
"description": "A segment of a story",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Segment Title",
"isLabel": true,
"placeholder": "What is the segment about?"
},
"content": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Content",
"rows": 4,
"placeholder": "Content of the story segment."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Story Segment",
"content": "{{self.content.title}}: {{self.content.content}}"
}
}
}
},
"node_types": [
"start",
"end",
"character",
"dialog",
"dialog-entry",
"chapter",
"scene",
"story-segment"
],
"edges": [
"flow",
"contains",
"link"
],
"startNode": "start",
"endNode": "end",
"graph": {
"nodes": [
"start",
"end",
"character",
"dialog",
"dialog-entry",
"chapter",
"scene",
"story-segment"
],
"edges": [
"flow",
"contains",
"link"
]
}
},
{
"theme_id": "2XJVMN1E10E2733VFSQ3Q5E9FA",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:17.000000Z",
"updated_at": "2026-09-13T17:21:17.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8ADCE40WDRQMC5H5BK377QK4WZ",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:17.000000Z",
"updated_at": "2026-09-13T17:21:17.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8W3X8C5G1JY0KAKY6P3V4KM211",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:21:17.000000Z",
"updated_at": "2026-09-13T17:21:17.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "D4GM8N66GX0GTPJZPHXJHCSNS6",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:23:53.000000Z",
"updated_at": "2026-09-13T17:23:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "J85EYZFFA60GXYS1T4RWB993S8",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:23:53.000000Z",
"updated_at": "2026-09-13T17:23:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "F795APTET0BRVB4KDDD838AASP",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:23:53.000000Z",
"updated_at": "2026-09-13T17:23:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "HEJP8DMHNEJQZ3T1N1ZA8BKSF4",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:01.000000Z",
"updated_at": "2026-09-13T17:25:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DTPSY73ZWZ7TPBFZX4ZGJQDPNR",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:01.000000Z",
"updated_at": "2026-09-13T17:25:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4AYJS9EGPB0W9G1XJ01WB7T1T4",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:01.000000Z",
"updated_at": "2026-09-13T17:25:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "7T1HA2AT4001PQSAXJCW15G9VF",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:38.000000Z",
"updated_at": "2026-09-13T17:25:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "B23PPT1PX1J9AMM4RTZPGBZKX8",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:38.000000Z",
"updated_at": "2026-09-13T17:25:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "85W6KDDAWVNX1TM385KXQ6SH7P",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:25:38.000000Z",
"updated_at": "2026-09-13T17:25:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "JZVZA7N7J37XRM5TYWMBRYGCVX",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:26:14.000000Z",
"updated_at": "2026-09-13T17:26:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "RHVTPZHTGCPVAF6A9STAATWE6A",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:26:14.000000Z",
"updated_at": "2026-09-13T17:26:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "JV314N3RVMD3N843VBQFYN1WM0",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:26:14.000000Z",
"updated_at": "2026-09-13T17:26:14.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "AG0XW54NN6NNV3JSZS75VF4898",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:27:07.000000Z",
"updated_at": "2026-09-13T17:27:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "NK69FYN6PSF16KKWYRP4AFQNBP",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:27:07.000000Z",
"updated_at": "2026-09-13T17:27:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DR9QHT5MYMG72NSDY3CV1P74PR",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:27:07.000000Z",
"updated_at": "2026-09-13T17:27:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8DZDST0SC267YGJX12VWAY6E3Y",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:29:07.000000Z",
"updated_at": "2026-09-13T17:29:07.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "N1EPFRDM3HKWCBBA5E6R5CTGZY",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:29:08.000000Z",
"updated_at": "2026-09-13T17:29:08.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "SQ35MHEM8V662ZNJ4BR3EDFETB",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:29:08.000000Z",
"updated_at": "2026-09-13T17:29:08.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "8MFZ4WFHYEWQQSP0X8BH6W0PTD",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:30.000000Z",
"updated_at": "2026-09-13T17:30:30.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "691C9P0GYTPKDAD6PST0N9VXXJ",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:30.000000Z",
"updated_at": "2026-09-13T17:30:30.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "0QRRSXYBQCH7RGR3QJQAN4X6HH",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:30.000000Z",
"updated_at": "2026-09-13T17:30:30.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "27E1Z2NTJS9PF1226XHXDCTVX7",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:52.000000Z",
"updated_at": "2026-09-13T17:30:52.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "9AN36D1TNS4KWAW9FPGZRJJAPB",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:53.000000Z",
"updated_at": "2026-09-13T17:30:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "3AJFAARNDK10STV0EMRVCKZ1MP",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:30:53.000000Z",
"updated_at": "2026-09-13T17:30:53.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "2KP7W0PZR2DQ3YQVYEGKXD09KK",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:40.000000Z",
"updated_at": "2026-09-13T17:41:40.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "10118RYKZXZ5J5V0GREZ7YB5Q6",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T17:41:40.000000Z",
"updated_at": "2026-09-13T17:41:40.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "R55XN78VAVNS2WFB9CFCB8AVB2",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:37.000000Z",
"updated_at": "2026-09-13T18:05:37.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "D9E10S9XDJV1H82BQPAMRC8J7T",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:37.000000Z",
"updated_at": "2026-09-13T18:05:37.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "9DVQ352VG1ZNWW6S141TY43YQK",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:05:37.000000Z",
"updated_at": "2026-09-13T18:05:37.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "GD66HZ24RH2SQM2N638H9GC843",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "4C47MQYMY7YPJJ7J03T5G3BJMF",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "25HMK9MJ4B4HW5TE5YAX24NEQD",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:06:01.000000Z",
"updated_at": "2026-09-13T18:06:01.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "K7TK1Z3GMMECJB8X8XG686KX7P",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:58.000000Z",
"updated_at": "2026-09-13T18:25:58.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "1YND3QP4ASWPSG68JY8N8YX4QE",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:58.000000Z",
"updated_at": "2026-09-13T18:25:58.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "0SGDA1T84GGMM300E1416AX9HM",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T18:25:58.000000Z",
"updated_at": "2026-09-13T18:25:58.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "MFA1EECYY8Q8MCFPZG6Z74VH5W",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:02.000000Z",
"updated_at": "2026-09-13T19:28:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "Q1ZJCSWVGG87NX1HCYSNV4WEFC",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:02.000000Z",
"updated_at": "2026-09-13T19:28:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DYNC59CAYWKG7AR9J9HSDEC7DY",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:02.000000Z",
"updated_at": "2026-09-13T19:28:02.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "DSDMGJY50TSYMY1ZEQ2C3DRHW2",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:46.000000Z",
"updated_at": "2026-09-13T19:28:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "CMKBFFE8M99NVSAKPZJRR13G93",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:46.000000Z",
"updated_at": "2026-09-13T19:28:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "YAR6NY30SGK51FR1E6TWCPK76E",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:28:46.000000Z",
"updated_at": "2026-09-13T19:28:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "RRJ50M3WNEPMTF8NQDVMYFX2PF",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:29:04.000000Z",
"updated_at": "2026-09-13T19:29:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "JN68XT2SWBVT52GG9GABVX098B",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:29:04.000000Z",
"updated_at": "2026-09-13T19:29:04.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "700G4MAJ1EV5W0P3HC2QCAD1SF",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:29:05.000000Z",
"updated_at": "2026-09-13T19:29:05.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "BP5M7VVQNKFQ67SXA1FSQRW92X",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:30:46.000000Z",
"updated_at": "2026-09-13T19:30:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "VQY38TEZP95MVXCZPJQKAPDNV7",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:30:46.000000Z",
"updated_at": "2026-09-13T19:30:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "509Z7JX31RYE97N0KVQ8RV9SN8",
"name": "Test Dialog Theme",
"domain": "dialog",
"created_at": "2026-09-13T19:30:46.000000Z",
"updated_at": "2026-09-13T19:30:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": true
}
},
{
"theme_id": "B9HWW9DPM4FSC8QSYF1H9TS5Q2",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:21:57.000000Z",
"updated_at": "2026-09-13T17:21:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "B7PEPSEHRWKREXZYP68T0FCMBC",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:24:46.000000Z",
"updated_at": "2026-09-13T17:24:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "GACXDQADHJGC5ZPYYRCV1EVNVP",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:25:25.000000Z",
"updated_at": "2026-09-13T17:25:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "55C3PX6PSH5MPW3SEYGK8VPW8D",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:26:25.000000Z",
"updated_at": "2026-09-13T17:26:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "JRX2Q525XCRS4E5ZEESRZ0TZV7",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:28:11.000000Z",
"updated_at": "2026-09-13T17:28:11.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "6KR4S8ARD8X13KCVD4H8YGV8C9",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:29:19.000000Z",
"updated_at": "2026-09-13T17:29:19.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "CPDZMS526HXGFDK8YBTJ5J6XPB",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:29:43.000000Z",
"updated_at": "2026-09-13T17:29:43.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "ZZKNJX1GJ8TBQ5RVQ91KKYZNTP",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:31:13.000000Z",
"updated_at": "2026-09-13T17:31:13.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "FCY50X2T68FBVKE260WX104932",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:36:24.000000Z",
"updated_at": "2026-09-13T17:36:24.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "7G4KDQKBBSVK8HF0K2X7BYKP7B",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:51:34.000000Z",
"updated_at": "2026-09-13T17:51:34.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "EHT5WB31SARWBY35J74WQ374TX",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T17:55:29.000000Z",
"updated_at": "2026-09-13T17:55:29.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "AMG9ZQSJQ8KS5CMN59SMJ4ECE2",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:24:27.000000Z",
"updated_at": "2026-09-13T19:24:27.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "66DF6P6GPJ0690WVTW9RPJ6MPM",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:25:32.000000Z",
"updated_at": "2026-09-13T19:25:32.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "ZAYXH05AFSCJVH5C6NKPYG83GS",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:26:50.000000Z",
"updated_at": "2026-09-13T19:26:50.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "DMG89J6FFRT96K7T5QQ6M40MQF",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:29:25.000000Z",
"updated_at": "2026-09-13T19:29:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "2SGPG8P3C1TCHXQBXJX6TR7VFS",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:31:11.000000Z",
"updated_at": "2026-09-13T19:31:11.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "3WJKDNHZBW5H1521A9V1VW9XD4",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:31:49.000000Z",
"updated_at": "2026-09-13T19:31:49.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "BVY28VSYCKDW3NNK9J76D7W80J",
"name": "unique_name_1",
"domain": "unique_domain_1",
"created_at": "2026-09-13T19:36:38.000000Z",
"updated_at": "2026-09-13T19:36:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "THSYG59DCT11KT7QPRP44REZCD",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:21:57.000000Z",
"updated_at": "2026-09-13T17:21:57.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "B5BD49XSCZQM3PRWN6RE0SYA16",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:24:46.000000Z",
"updated_at": "2026-09-13T17:24:46.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "FR7Y4ATJE2FFWMKJ46DHAQDX9H",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:25:25.000000Z",
"updated_at": "2026-09-13T17:25:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "FE0SRMC539JYQ87349THG94BJS",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:26:25.000000Z",
"updated_at": "2026-09-13T17:26:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "NZF1F4T559J77AWTK2G8MJQZZ0",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:28:11.000000Z",
"updated_at": "2026-09-13T17:28:11.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "SBXQYRF4JCT4WJ58RP9PMPP15K",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:29:19.000000Z",
"updated_at": "2026-09-13T17:29:19.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "JEWXK18C5WQCE7AP8YR8REQBWR",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:29:43.000000Z",
"updated_at": "2026-09-13T17:29:43.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "V3E2VWM83P48V215P18E6WXRWF",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:31:13.000000Z",
"updated_at": "2026-09-13T17:31:13.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "AZE9EJ55SJN1F5BYNFZ7XNKCBW",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:36:24.000000Z",
"updated_at": "2026-09-13T17:36:24.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "TGYZPT7YD34R04WK0BVZHQ1V56",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:51:34.000000Z",
"updated_at": "2026-09-13T17:51:34.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "AW03NC85JPQ15MJ4QE8BSE95BB",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T17:55:29.000000Z",
"updated_at": "2026-09-13T17:55:29.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "JN6VM1242J9WBF84V2W84E716S",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:24:27.000000Z",
"updated_at": "2026-09-13T19:24:27.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "MBAKBVFB6ED9Q6DCRJYWYFG0PW",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:25:32.000000Z",
"updated_at": "2026-09-13T19:25:32.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "KB91SS0D3ZE39M0EB4G8MJZD9E",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:26:50.000000Z",
"updated_at": "2026-09-13T19:26:50.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "WXATS5BMB8VE060P16V1KQZDK6",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:29:25.000000Z",
"updated_at": "2026-09-13T19:29:25.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "XJTHNWN9GQ5VZ6N64HNG7ZM1KW",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:31:11.000000Z",
"updated_at": "2026-09-13T19:31:11.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "VF8S9Y68X06Y39DMMGAJMQEN32",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:31:49.000000Z",
"updated_at": "2026-09-13T19:31:49.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"theme_id": "E5Y4YNBKCTHC77QC0WHSZ8PNYE",
"name": "unique_name_2",
"domain": "unique_domain_2",
"created_at": "2026-09-13T19:36:38.000000Z",
"updated_at": "2026-09-13T19:36:38.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
}
]
},
"meta": {
"total_count": 231,
"timestamp": "2026-09-13T19:38:09.220549Z"
}
}
Get Specific Theme
Retrieve detailed information about a specific theme by its domain. This is a public endpoint and does not require authentication.
URL Parameters
theme- The unique domain identifier of the theme (e.g., "dialog")
Response
https://tellstree.com/api/themes/{slug}{
"data": {
"theme": {
"theme_id": "QDEET0HVSC5CRJPJ5BJJAA3TRQ",
"name": "Story Theme",
"domain": "story",
"created_at": "2025-12-17T15:11:38.000000Z",
"updated_at": "2025-12-17T15:11:38.000000Z",
"statistics": {
"projects_count": 5170,
"is_default": false
},
"badge": "Story",
"version": "1.0.0",
"description": "Interactive stories with characters, dialogs, chapters and scenes",
"nodes": {
"start": {
"name": "Start",
"description": "The origin of the narrative - the beginning of all paths",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "Start",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "StartNode",
"props": []
}
},
"end": {
"name": "End",
"description": "The conclusion of the narrative - where all paths converge",
"forms": {
"label": {
"form": "input",
"label": "Label",
"placeholder": "End",
"required": false,
"isLabel": true
}
},
"graph": {
"component": "EndNode",
"props": []
}
},
"character": {
"name": "Character",
"description": "Character with properties and profile",
"forms": {
"name": {
"form": "input",
"type": "string",
"required": true,
"label": "Character Name",
"isLabel": true,
"placeholder": "Enter character name..."
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Character description..."
},
"traits": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Traits",
"rows": 3,
"placeholder": "Character traits (e.g. brave, shy...)"
}
},
"media": {
"image": {
"form": "upload",
"type": "file",
"label": "Character Image",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "2MB"
},
"avatar": {
"form": "upload",
"type": "file",
"label": "Avatar/Portrait",
"formats": [
"jpg",
"jpeg",
"png",
"gif"
],
"maxSize": "1MB"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{self.content.name}}",
"content": "{{self.content.description}}",
"image": "{{self.media.image}}",
"imageAlign": "top"
}
}
},
"dialog": {
"name": "Dialog",
"description": "Start of a conversation between characters",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Dialog Title",
"isLabel": true,
"placeholder": "What is the dialog about?"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "Dialog description..."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Dialog Start",
"content": "{{self.content.title}}: {{self.content.description}}"
}
}
},
"dialog-entry": {
"name": "Dialog Entry",
"description": "Individual speech contribution of a character",
"forms": {
"speaker": {
"form": "select",
"type": "string",
"required": true,
"label": "Speaker",
"options": [
{
"label": "{{node[{{character}}].content.name}}",
"value": "{{node[{{character}}].public_id}}"
}
],
"placeholder": "Select character..."
},
"message": {
"form": "contentarea",
"type": "string",
"required": true,
"label": "Message",
"isLabel": true,
"rows": 4,
"placeholder": "What does the character say?"
}
},
"graph": {
"component": "MediaCard",
"props": {
"header": "{{node[id=(self.content.speaker)].content.name}}:",
"content": "\"{{self.content.message}}\"",
"image": "{{node[id=(self.content.speaker)].media.image}}",
"imageAlign": "left"
}
}
},
"chapter": {
"name": "Chapter",
"description": "A chapter of the game",
"forms": {
"title": {
"label": "Title",
"form": "input",
"type": "string",
"required": true,
"isLabel": true,
"placeholder": "The title of the chapter."
},
"summary": {
"label": "Summary",
"form": "textarea",
"type": "string",
"required": false,
"rows": 4,
"placeholder": "Brief summary of the chapter."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Chapter: {{self.content.title}}",
"content": "{{self.content.summary}}"
}
}
},
"scene": {
"name": "Scene",
"description": "A scene within a chapter",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Scene Title",
"isLabel": true,
"placeholder": "Name of the scene"
},
"description": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Description",
"rows": 4,
"placeholder": "What happens in this scene?"
}
},
"graph": {
"component": "Card",
"props": {
"header": "Scene: {{self.content.title}}",
"content": "{{self.content.description}}"
}
}
},
"story-segment": {
"name": "Story Segment",
"description": "A segment of a story",
"forms": {
"title": {
"form": "input",
"type": "string",
"required": true,
"label": "Segment Title",
"isLabel": true,
"placeholder": "What is the segment about?"
},
"content": {
"form": "textarea",
"type": "string",
"required": false,
"label": "Content",
"rows": 4,
"placeholder": "Content of the story segment."
}
},
"graph": {
"component": "Card",
"props": {
"header": "Story Segment",
"content": "{{self.content.title}}: {{self.content.content}}"
}
}
}
},
"node_types": [
"start",
"end",
"character",
"dialog",
"dialog-entry",
"chapter",
"scene",
"story-segment"
],
"edges": [
"flow",
"contains",
"link"
],
"startNode": "start",
"endNode": "end",
"graph": {
"nodes": [
"start",
"end",
"character",
"dialog",
"dialog-entry",
"chapter",
"scene",
"story-segment"
],
"edges": [
"flow",
"contains",
"link"
]
}
}
},
"meta": {
"timestamp": "2026-09-13T19:38:09.323832Z"
}
}
✨ Designs
Designs provide specific styling configurations within themes, allowing fine-grained control over the visual presentation of story elements.
/api/designs
List all designs
/api/designs/{design}
Get design by domain
List All Designs
Retrieve a list of all available designs. This is a public endpoint and does not require authentication.
Response
https://tellstree.com/api/designs{
"data": {
"designs": [
{
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original",
"created_at": "2025-12-17T15:11:38.000000Z",
"updated_at": "2025-12-17T15:11:38.000000Z",
"statistics": {
"projects_count": 5258,
"is_default": false
},
"version": "1.0.0",
"description": "The original design recipe for TellsTree - timeless, refined, and expertly crafted.",
"author": "TellsTree Team",
"category": "classic",
"preview": "foundation-preview.jpg",
"colors": {
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"accent": "#10B981",
"background": "#F8FAFC",
"surface": "#FFFFFF",
"text": {
"primary": "#1F2937",
"secondary": "#6B7280",
"muted": "#9CA3AF"
},
"border": "#E5E7EB",
"shadow": "rgba(0, 0, 0, 0.1)"
},
"typography": {
"fontFamily": {
"primary": "Inter, sans-serif",
"heading": "Inter, sans-serif",
"code": "JetBrains Mono, monospace"
},
"fontSize": {
"xs": "0.75rem",
"sm": "0.875rem",
"base": "1rem",
"lg": "1.125rem",
"xl": "1.25rem",
"2xl": "1.5rem",
"3xl": "1.875rem"
},
"fontWeight": {
"normal": "400",
"medium": "500",
"semibold": "600",
"bold": "700"
},
"lineHeight": {
"tight": "1.25",
"normal": "1.5",
"relaxed": "1.75"
}
},
"spacing": {
"xs": "0.25rem",
"sm": "0.5rem",
"md": "1rem",
"lg": "1.5rem",
"xl": "2rem",
"2xl": "3rem"
},
"borderRadius": {
"sm": "0.25rem",
"md": "0.375rem",
"lg": "0.5rem",
"xl": "0.75rem",
"full": "9999px"
},
"shadows": {
"sm": "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
"md": "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
"lg": "0 10px 15px -3px rgba(0, 0, 0, 0.1)",
"xl": "0 20px 25px -5px rgba(0, 0, 0, 0.1)"
},
"components": [
"Card",
"Circle",
"SpeechBubble",
"CharacterBadge",
"MediaCard",
"StartNode",
"EndNode",
"EdgeLabel"
]
},
{
"design_id": "MSW92SWMCSMK1W3E5WX5TNKBRG",
"name": "Original",
"domain": "universal",
"created_at": "2026-09-13T17:21:09.000000Z",
"updated_at": "2026-09-13T17:21:09.000000Z",
"statistics": {
"projects_count": 452,
"is_default": true
},
"version": "1.0.0",
"description": "The original design recipe for TellsTree - timeless, refined, and expertly crafted.",
"author": "TellsTree Team",
"category": "classic",
"preview": "foundation-preview.jpg",
"colors": {
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"accent": "#10B981",
"background": "#F8FAFC",
"surface": "#FFFFFF",
"text": {
"primary": "#1F2937",
"secondary": "#6B7280",
"muted": "#9CA3AF"
},
"border": "#E5E7EB",
"shadow": "rgba(0, 0, 0, 0.1)"
},
"typography": {
"fontFamily": {
"primary": "Inter, sans-serif",
"heading": "Inter, sans-serif",
"code": "JetBrains Mono, monospace"
},
"fontSize": {
"xs": "0.75rem",
"sm": "0.875rem",
"base": "1rem",
"lg": "1.125rem",
"xl": "1.25rem",
"2xl": "1.5rem",
"3xl": "1.875rem"
},
"fontWeight": {
"normal": "400",
"medium": "500",
"semibold": "600",
"bold": "700"
},
"lineHeight": {
"tight": "1.25",
"normal": "1.5",
"relaxed": "1.75"
}
},
"spacing": {
"xs": "0.25rem",
"sm": "0.5rem",
"md": "1rem",
"lg": "1.5rem",
"xl": "2rem",
"2xl": "3rem"
},
"borderRadius": {
"sm": "0.25rem",
"md": "0.375rem",
"lg": "0.5rem",
"xl": "0.75rem",
"full": "9999px"
},
"shadows": {
"sm": "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
"md": "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
"lg": "0 10px 15px -3px rgba(0, 0, 0, 0.1)",
"xl": "0 20px 25px -5px rgba(0, 0, 0, 0.1)"
},
"components": [
"Card",
"Circle",
"SpeechBubble",
"CharacterBadge",
"MediaCard",
"StartNode",
"EndNode",
"EdgeLabel"
]
},
{
"design_id": "FR7RM1CHXRFE0YSX0T0MXYJ2WY",
"name": "unique_test_1",
"domain": "test_domain_1",
"created_at": "2026-09-13T17:20:26.000000Z",
"updated_at": "2026-09-13T17:20:26.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
},
{
"design_id": "5FN8QQS4PPQ5G0F9SKQNEVRK7N",
"name": "unique_test_2",
"domain": "test_domain_2",
"created_at": "2026-09-13T17:20:26.000000Z",
"updated_at": "2026-09-13T17:20:26.000000Z",
"statistics": {
"projects_count": 0,
"is_default": false
}
}
]
},
"meta": {
"total_count": 4,
"timestamp": "2026-09-13T19:37:53.117634Z"
}
}
Get Specific Design
Retrieve detailed configuration for a specific design by its domain identifier.
URL Parameters
design- The domain identifier of the design
Response
https://tellstree.com/api/designs/{design}{
"data": {
"design": {
"design_id": "1YMJCVSPEM79S5N7DM5XY54D4T",
"name": "Original",
"domain": "original",
"created_at": "2025-12-17T15:11:38.000000Z",
"updated_at": "2025-12-17T15:11:38.000000Z",
"statistics": {
"projects_count": 5258,
"is_default": false
},
"version": "1.0.0",
"description": "The original design recipe for TellsTree - timeless, refined, and expertly crafted.",
"author": "TellsTree Team",
"category": "classic",
"preview": "foundation-preview.jpg",
"colors": {
"primary": "#3B82F6",
"secondary": "#8B5CF6",
"accent": "#10B981",
"background": "#F8FAFC",
"surface": "#FFFFFF",
"text": {
"primary": "#1F2937",
"secondary": "#6B7280",
"muted": "#9CA3AF"
},
"border": "#E5E7EB",
"shadow": "rgba(0, 0, 0, 0.1)"
},
"typography": {
"fontFamily": {
"primary": "Inter, sans-serif",
"heading": "Inter, sans-serif",
"code": "JetBrains Mono, monospace"
},
"fontSize": {
"xs": "0.75rem",
"sm": "0.875rem",
"base": "1rem",
"lg": "1.125rem",
"xl": "1.25rem",
"2xl": "1.5rem",
"3xl": "1.875rem"
},
"fontWeight": {
"normal": "400",
"medium": "500",
"semibold": "600",
"bold": "700"
},
"lineHeight": {
"tight": "1.25",
"normal": "1.5",
"relaxed": "1.75"
}
},
"spacing": {
"xs": "0.25rem",
"sm": "0.5rem",
"md": "1rem",
"lg": "1.5rem",
"xl": "2rem",
"2xl": "3rem"
},
"borderRadius": {
"sm": "0.25rem",
"md": "0.375rem",
"lg": "0.5rem",
"xl": "0.75rem",
"full": "9999px"
},
"shadows": {
"sm": "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
"md": "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
"lg": "0 10px 15px -3px rgba(0, 0, 0, 0.1)",
"xl": "0 20px 25px -5px rgba(0, 0, 0, 0.1)"
},
"components": [
"Card",
"Circle",
"SpeechBubble",
"CharacterBadge",
"MediaCard",
"StartNode",
"EndNode",
"EdgeLabel"
]
}
},
"meta": {
"timestamp": "2026-09-13T19:37:53.142567Z"
}
}
💬 Comments
Comments enable collaborative feedback and discussion within projects. Team members can leave notes, suggestions, and feedback to improve the narrative experience.
/api/commentsList all comments/api/commentsCreate new comment/api/comments/{comment}Get comment details/api/comments/{comment}Update comment/api/comments/{comment}Delete commentList Comments
Retrieve all comments or filter by project to see discussions and feedback.
Query Parameters
project_id- Filter by project ID (optional)user_id- Filter by author (optional)status- Filter by status (optional)page- Page number (optional)per_page- Items per page (optional)Response
https://tellstree.com/api/commentsCreate Comment
Add a new comment or feedback to a project for collaborative discussion.
Required Fields
content- Comment textproject_id- Project to attach comment toOptional Fields
priority- low/medium/highnode_id- Related node IDposition- UI position datatags- Array of tagsResponse
https://tellstree.com/api/comments