API Documentation

Complete guide to integrating with TellsTree's powerful storytelling API.

Quick Start

Get up and running with the TellsTree API in minutes

1
Get JWT Token
2
Make API Calls
3
Start Building

Features

✓
RESTful API
CRUD operations & consistent JSON responses
✓
No Complex Setup
Get JWT Token → Make API Calls → Start Building
✓
Copy & Paste Examples
Working code for JavaScript, Python, PHP, cURL
✓
Clear Error Messages
HTTP status codes and RFC 7807 compliant error messages
✓
Generous Limits
60 api calls per minute

Ressources

Projects /api/projects
Nodes /api/nodes
Edges /api/edges
Media /api/media
Comments /api/comments
Themes /api/themes
Designs /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 window
  • X-RateLimit-RemainingRemaining requests in the current window
  • Retry-AfterSeconds to wait before retry (429 responses only)
API 300 requests/minute General API limit (optimized for graph editor)
AUTH 5 attempts/minute Login attempts
REFRESH 30 requests/minute Token refresh
REG 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).

2xx 200, 201, 204 Success responses
4xx 400, 401, 403, 404, 422, 429 Client errors
5xx 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.

POST /api/auth/login Login / Obtain token
GET /api/auth/me Get current user info
POST /api/auth/refresh Refresh token
POST /api/auth/logout Logout / Invalidate token
GET /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 email
  • password - Your account password

Response

200 Success / Login successful
401 Authentication failed / Invalid credentials
422 Validation failed / Missing fields
429 Too Many Requests / Rate limited
POSThttps://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

200 Success / Token refreshed
401 Unauthorized / Invalid refresh token
403 Forbidden / Token expired
POSThttps://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

200 Success / User information
401 Unauthorized / Missing or invalid token
GEThttps://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

204 No Content / Logout successful
401 Unauthorized / Invalid token
POSThttps://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

200 Success / Public keys
GEThttps://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/projects
Authorization: Bearer eyJ0eXAiOiJKV1Q...
Accept: application/json
GEThttps://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).

GET /api/projects List all projects
POST /api/projects Create project
GET /api/projects/{id} Get project
PUT /api/projects/{id} Update project
DELETE /api/projects/{id} Delete project
GET /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

200 Success, Returns paginated list of public projects
GEThttps://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

200 Success, Returns paginated list of user's projects
401 Unauthorized, Invalid or missing token
GEThttps://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

201 Created, data.project{} (Complete Project object with theme, design, nodes, edges, members, capabilities, comments)
422 Invalid data, Validation errors in data.errors{}
401 Unauthorized, Invalid token
POSThttps://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

200 Success, Returns complete project details
404 Project not found
403 Forbidden, No access
GEThttps://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

200 Success, Project updated successfully
422 Invalid data, Validation errors
404 Project not found
403 Forbidden, No permission
PUThttps://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

204 No Content, Project deleted successfully
404 Project not found
403 Forbidden, No permission
DELETEhttps://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

200 Success, Returns activity updates since timestamp
401 Unauthorized, Invalid or missing token
403 Forbidden, User is not a project member
GEThttps://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.

GET /api/nodes List all nodes
POST /api/nodes Create new node
GET /api/nodes?query[include]=ids Get specific nodes (lazy loading)
GET /api/nodes/{node} Get node details
PUT /api/nodes/{node} Update node
DELETE /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

200 Success / Nodes list
400 Missing project_id parameter
401 Unauthorized / Invalid token
GEThttps://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 ID
  • query[include] - Comma-separated node IDs
  • • Returns canvas-ready node data
  • • Optimized for editor performance

Response

200 Success / Nodes loaded
400 Missing project_id
GEThttps://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 project
  • content - Node content/text
  • type - Node type
  • position_x - X coordinate
  • position_y - Y coordinate
  • properties - Custom properties

Response

201 Created / Node created
422 Invalid data / Validation failed
401 Unauthorized / Invalid token
POSThttps://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 ID
  • node - Node ID

Response

200 Success / Node details
404 Node not found
403 Forbidden / No access
GEThttps://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 title
  • content - Node content
  • type - Node type
  • position_x - X coordinate
  • position_y - Y coordinate
  • properties - Custom properties
  • locked_by - Lock status (user_id or null)

Response

200 Success / Node updated
422 Invalid data / Validation failed
404 Node not found
403 Forbidden / No permission
PUThttps://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

204 Success / No Content
404 Node not found
403 Forbidden / No permission
DELETEhttps://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.

GET /api/edges List all edges
POST /api/edges Create new edge
GET /api/edges/{edge} Get edge details
PUT /api/edges/{edge} Update edge
DELETE /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 node
  • target_node_id - ID of target node

Optional Fields

  • label - Display text for edge
  • condition - Edge activation condition

Response

201 Created / Edge created
422 Invalid data / Validation failed
404 Source/target node not found
POSThttps://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 ID
  • edge - Edge ID

Response

200 Success / Edge details
404 Edge not found
403 Forbidden / No access
GEThttps://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 ID
  • target_node_id - Target node ID
  • label - Edge display label
  • condition - Edge condition
  • locked_by - Lock status (internal use only)

Response

200 Success / Edge updated
422 Invalid data / Validation failed
404 Edge not found
403 Forbidden / No permission
PUThttps://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

204 Success / No Content
404 Edge not found
403 Forbidden / No permission
DELETEhttps://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.

GET /api/media List all media
POST /api/media Upload new media
GET /api/media/{media} Get media details
PUT /api/media/{media} Update media metadata
PATCH /api/media/{media}/visibility Update visibility
DELETE /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

200 Success / Media list
401 Unauthorized / Invalid token
403 Forbidden / No access
GEThttps://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 project
  • node_id - Attach to node
  • edge_id - Attach to edge
  • alt_text - Alternative text
  • description - Media description
  • visibility - public/private

Response

201 Created / Media uploaded
422 Invalid file / Validation failed
413 Payload Too Large / File too big
415 Unsupported Media Type
POSThttps://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"
    }
}

💬 Comments

Comments enable collaborative feedback and discussion within projects. Team members can leave notes, suggestions, and feedback to improve the narrative experience.

GET /api/comments List all comments
POST /api/comments Create new comment
GET /api/comments/{comment} Get comment details
PUT /api/comments/{comment} Update comment
DELETE /api/comments/{comment} Delete comment

List 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

200 Success / Comments list
401 Unauthorized / Invalid token
403 Forbidden / No access
GEThttps://tellstree.com/api/comments
{
    "data": {
        "comments": [
            {
                "id": "0FH7VYX9QCVS4RXKGW09QJPG9V",
                "project_id": "691NAT4PP8N5Q4357QFWM6HKB9",
                "user_id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
                "content": "{\"content\":\"API Test Comment content with enough length\",\"rating\":4,\"project_id\":\"691NAT4PP8N5Q4357QFWM6HKB9\"}",
                "rating": 4,
                "created_at": "2026-09-13T19:37:52.000000Z"
            }
        ]
    }
}

Create Comment

Add a new comment or feedback to a project for collaborative discussion.

Required Fields

  • content - Comment text
  • project_id - Project to attach comment to

Optional Fields

  • priority - low/medium/high
  • node_id - Related node ID
  • position - UI position data
  • tags - Array of tags

Response

201 Created / Comment created
422 Invalid data / Validation failed
404 Project not found
403 Forbidden / No access
POSThttps://tellstree.com/api/comments
{
    "data": {
        "comment": {
            "id": "0FH7VYX9QCVS4RXKGW09QJPG9V",
            "project_id": "691NAT4PP8N5Q4357QFWM6HKB9",
            "user_id": "01KHF8MP96QY9KMPXF67Z5ZE3R",
            "content": "{\"content\":\"API Test Comment content with enough length\",\"rating\":4,\"project_id\":\"691NAT4PP8N5Q4357QFWM6HKB9\"}",
            "rating": 4,
            "created_at": "2026-09-13T19:37:52.000000Z"
        }
    }
}

Themes

Themes define the visual styling and appearance of your storytelling projects. Each theme contains color schemes, fonts, and layout configurations.

GET /api/themes List all themes
GET /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

200 Success / Themes list
GEThttps://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

200 Success / Theme details
404 Theme not found
GEThttps://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.

GET /api/designs List all designs
GET /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

200 Success / Designs list
GEThttps://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

200 Success / Design details
404 Design not found
GEThttps://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"
    }
}