{ "openapi": "3.1.0", "info": { "title": "Lonestone API", "description": "The Lonestone API description", "version": "1.0", "contact": {} }, "tags": [ { "name": "@lonestone", "description": "" } ], "servers": [], "paths": { "/api": { "get": { "operationId": "AppController_getHello", "tags": [ "App" ], "parameters": [], "responses": { "200": { "description": "" } } } }, "/api/posts/{postSlug}/comments": { "post": { "operationId": "CommentsController_createComment", "tags": [ "Comments" ], "parameters": [ { "name": "postSlug", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Schema for creating a comment", "content": { "application/json": { "schema": { "type": "object", "properties": { "content": { "type": "string", "minLength": 1, "maxLength": 1000 }, "parentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "content" ], "additionalProperties": false, "title": "CreateCommentSchema", "description": "Schema for creating a comment" } } } }, "responses": { "200": { "description": "Schema for a comment", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentSchema" } } } } } }, "get": { "operationId": "CommentsController_getComments", "tags": [ "Comments" ], "parameters": [ { "name": "filter", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/CommentsController_getComments_filterArray" }, "description": "Filtering query string, in the format of \"property:rule[:value];property:rule[:value];...\"\n
Available rules: eq, neq, gt, gte, lt, lte, like, nlike, in, nin, isnull, isnotnull \n
Available properties: content", "style": "form", "explode": false }, { "name": "sort", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/CommentsController_getComments_sortArray" }, "description": "Schema for sorting items", "style": "form", "explode": false }, { "name": "offset", "required": true, "in": "query", "schema": { "default": 0, "description": "Starting position of the query", "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, { "name": "pageSize", "required": true, "in": "query", "schema": { "default": 20, "description": "Number of items to return", "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "postSlug", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Schema for a paginated list of comments", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentsSchema" } } } } } } }, "/api/posts/{postSlug}/comments/count": { "get": { "operationId": "CommentsController_getCommentCount", "tags": [ "Comments" ], "parameters": [ { "name": "postSlug", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } } } }, "/api/posts/{postSlug}/comments/{commentId}/replies": { "get": { "operationId": "CommentsController_getCommentReplies", "tags": [ "Comments" ], "parameters": [ { "name": "sort", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/CommentsController_getCommentReplies_sortArray" }, "description": "Schema for sorting items", "style": "form", "explode": false }, { "name": "offset", "required": true, "in": "query", "schema": { "default": 0, "description": "Starting position of the query", "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, { "name": "pageSize", "required": true, "in": "query", "schema": { "default": 20, "description": "Number of items to return", "type": "integer", "minimum": 1, "maximum": 100 } }, { "name": "commentId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "postSlug", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Schema for a paginated list of comments", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CommentsSchema" } } } } } } }, "/api/posts/{postSlug}/comments/{commentId}": { "delete": { "operationId": "CommentsController_deleteComment", "tags": [ "Comments" ], "parameters": [ { "name": "commentId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "postSlug", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } } } }, "/api/admin/posts": { "post": { "operationId": "PostController_createPost", "tags": [ "Admin Posts" ], "parameters": [], "requestBody": { "required": true, "description": "Schema for creating/updating a post", "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "content": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "text" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "image" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "video" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false } ], "title": "PostContentSchema", "description": "Schema for content items (text, image, video)", "type": "object" } } }, "required": [ "title", "content" ], "additionalProperties": false, "title": "CreatePostSchema", "description": "Schema for creating/updating a post" } } } }, "responses": { "200": { "description": "Schema for a user's post", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPostSchema" } } } } } }, "get": { "operationId": "PostController_getUserPosts", "tags": [ "Admin Posts" ], "parameters": [ { "name": "filter", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/PostController_getUserPosts_filterArray" }, "description": "Filtering query string, in the format of \"property:rule[:value];property:rule[:value];...\"\n
Available rules: eq, neq, gt, gte, lt, lte, like, nlike, in, nin, isnull, isnotnull \n
Available properties: title", "style": "form", "explode": false }, { "name": "sort", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/PostController_getUserPosts_sortArray" }, "description": "Schema for sorting items", "style": "form", "explode": false }, { "name": "offset", "required": true, "in": "query", "schema": { "default": 0, "description": "Starting position of the query", "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, { "name": "pageSize", "required": true, "in": "query", "schema": { "default": 20, "description": "Number of items to return", "type": "integer", "minimum": 1, "maximum": 100 } } ], "responses": { "200": { "description": "Schema for a list of user's posts", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPostsSchema" } } } } } } }, "/api/admin/posts/{id}": { "put": { "operationId": "PostController_updatePost", "tags": [ "Admin Posts" ], "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Schema for updating a post", "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "content": { "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "text" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "image" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "video" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false } ], "title": "PostContentSchema", "description": "Schema for content items (text, image, video)", "type": "object" } } }, "additionalProperties": false, "title": "UpdatePostSchema", "description": "Schema for updating a post" } } } }, "responses": { "200": { "description": "Schema for a user's post", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPostSchema" } } } } } }, "get": { "operationId": "PostController_getUserPost", "tags": [ "Admin Posts" ], "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Schema for a user's post", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserPostSchema" } } } } } } }, "/api/admin/posts/{id}/publish": { "patch": { "operationId": "PostController_publishPost", "tags": [ "Admin Posts" ], "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } } } }, "/api/admin/posts/{id}/unpublish": { "patch": { "operationId": "PostController_unpublishPost", "tags": [ "Admin Posts" ], "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } } } }, "/api/public/posts/random": { "get": { "operationId": "PublicPostController_getRandomPost", "tags": [ "Public Posts" ], "parameters": [], "responses": { "200": { "description": "A public post", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicPostSchema" } } } } } } }, "/api/public/posts/{slug}": { "get": { "operationId": "PublicPostController_getPost", "tags": [ "Public Posts" ], "parameters": [ { "name": "slug", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "A public post", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicPostSchema" } } } } } } }, "/api/public/posts": { "get": { "operationId": "PublicPostController_getPosts", "tags": [ "Public Posts" ], "parameters": [ { "name": "filter", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/PublicPostController_getPosts_filterArray" }, "description": "Filtering query string, in the format of \"property:rule[:value];property:rule[:value];...\"\n
Available rules: eq, neq, gt, gte, lt, lte, like, nlike, in, nin, isnull, isnotnull \n
Available properties: title", "style": "form", "explode": false }, { "name": "sort", "required": false, "in": "query", "schema": { "$ref": "#/components/schemas/PublicPostController_getPosts_sortArray" }, "description": "Schema for sorting items", "style": "form", "explode": false }, { "name": "offset", "required": true, "in": "query", "schema": { "default": 0, "description": "Starting position of the query", "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, { "name": "pageSize", "required": true, "in": "query", "schema": { "default": 20, "description": "Number of items to return", "type": "integer", "minimum": 1, "maximum": 100 } } ], "responses": { "200": { "description": "A list of public posts", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicPostsSchema" } } } } } } }, "/api/ai/generate-text": { "post": { "operationId": "AiExampleController_generateText", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for simple text generation with a single prompt", "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" } }, "required": [ "prompt" ], "additionalProperties": false, "title": "GenerateTextRequest", "description": "Request for simple text generation with a single prompt" } } } }, "responses": { "200": { "description": "Response from text generation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateTextResponse" } } } } } } }, "/api/ai/generate-object": { "post": { "operationId": "AiExampleController_generateObject", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for structured object generation with a predefined schema type", "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe" ] }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" } }, "required": [ "prompt", "schemaType" ], "additionalProperties": false, "title": "GenerateObjectRequest", "description": "Request for structured object generation with a predefined schema type" } } } }, "responses": { "200": { "description": "Response from structured object generation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateObjectResponse" } } } } } } }, "/api/ai/chat": { "post": { "operationId": "AiExampleController_chat", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for multi-turn AI conversation with message history. schemaType can be used to request structured output.", "content": { "application/json": { "schema": { "type": "object", "properties": { "messages": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "role": { "type": "string", "enum": [ "user", "assistant", "system", "tool" ] }, "content": { "type": "string" }, "metadata": { "type": "object", "properties": { "isConsideredSystemMessage": { "type": "boolean" }, "usage": { "description": "Total token usage for the message, including tools calls and reasoning steps", "type": "object", "properties": { "promptTokens": { "type": "number" }, "completionTokens": { "type": "number" }, "totalTokens": { "type": "number" } }, "required": [ "promptTokens", "completionTokens", "totalTokens" ], "additionalProperties": false, "title": "TokenUsage" }, "finishReason": { "type": "string" }, "timestamp": { "description": "ISO 8601 timestamp when the message was created", "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, "toolCalls": { "description": "Tool calls made to generate the message", "type": "array", "items": { "type": "object", "properties": { "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "toolCallId", "toolName", "args" ], "additionalProperties": false, "title": "ToolCall", "description": "A tool call made by the AI" } }, "reasonning": { "description": "Reasoning text for the message", "type": "string" }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe", "none" ], "title": "ChatSchemaType", "description": "Predefined schema types for testing structured output" } }, "additionalProperties": false } }, "required": [ "role", "content" ], "additionalProperties": false, "title": "ChatMessageWithSchemaType", "description": "A message with optional schemaType metadata for identifying structured output" } }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe", "none" ], "title": "ChatSchemaType", "description": "Predefined schema types for testing structured output" } }, "required": [ "messages" ], "additionalProperties": false, "title": "ChatRequest", "description": "Request for multi-turn AI conversation with message history. schemaType can be used to request structured output." } } } }, "responses": { "200": { "description": "Response from AI chat conversation", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ChatResponse" } } } } } } }, "/api/ai/stream-text": { "post": { "operationId": "AiExampleController_streamText", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for streaming text generation with a single prompt", "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" } }, "required": [ "prompt" ], "additionalProperties": false, "title": "StreamTextRequest", "description": "Request for streaming text generation with a single prompt" } } } }, "responses": { "201": { "description": "" } } } }, "/api/ai/stream-object": { "post": { "operationId": "AiExampleController_streamObject", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for streaming structured object generation", "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe" ] }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" } }, "required": [ "prompt", "schemaType" ], "additionalProperties": false, "title": "StreamObjectRequest", "description": "Request for streaming structured object generation" } } } }, "responses": { "201": { "description": "" } } } }, "/api/ai/stream-chat": { "post": { "operationId": "AiExampleController_streamChat", "tags": [ "AiExample" ], "parameters": [], "requestBody": { "required": true, "description": "Request for streaming multi-turn AI conversation", "content": { "application/json": { "schema": { "type": "object", "properties": { "messages": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "role": { "type": "string", "enum": [ "user", "assistant", "system", "tool" ] }, "content": { "type": "string" }, "metadata": { "type": "object", "properties": { "isConsideredSystemMessage": { "type": "boolean" }, "usage": { "description": "Total token usage for the message, including tools calls and reasoning steps", "type": "object", "properties": { "promptTokens": { "type": "number" }, "completionTokens": { "type": "number" }, "totalTokens": { "type": "number" } }, "required": [ "promptTokens", "completionTokens", "totalTokens" ], "additionalProperties": false, "title": "TokenUsage" }, "finishReason": { "type": "string" }, "timestamp": { "description": "ISO 8601 timestamp when the message was created", "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, "toolCalls": { "description": "Tool calls made to generate the message", "type": "array", "items": { "type": "object", "properties": { "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "toolCallId", "toolName", "args" ], "additionalProperties": false, "title": "ToolCall", "description": "A tool call made by the AI" } }, "reasonning": { "description": "Reasoning text for the message", "type": "string" }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe", "none" ], "title": "ChatSchemaType", "description": "Predefined schema types for testing structured output" } }, "additionalProperties": false } }, "required": [ "role", "content" ], "additionalProperties": false, "title": "ChatMessageWithSchemaType", "description": "A message with optional schemaType metadata for identifying structured output" } }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" } }, "required": [ "messages" ], "additionalProperties": false, "title": "StreamChatRequest", "description": "Request for streaming multi-turn AI conversation" } } } }, "responses": { "201": { "description": "" } } } } }, "components": { "schemas": { "GenerateTextRequest": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" } }, "required": [ "prompt" ], "additionalProperties": false, "title": "GenerateTextRequest", "description": "Request for simple text generation with a single prompt" }, "GenerateObjectRequest": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe" ] }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" } }, "required": [ "prompt", "schemaType" ], "additionalProperties": false, "title": "GenerateObjectRequest", "description": "Request for structured object generation with a predefined schema type" }, "ChatRequest": { "type": "object", "properties": { "messages": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/ChatMessageWithSchemaType" } }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" }, "schemaType": { "$ref": "#/components/schemas/ChatSchemaType" } }, "required": [ "messages" ], "additionalProperties": false, "title": "ChatRequest", "description": "Request for multi-turn AI conversation with message history. schemaType can be used to request structured output." }, "StreamTextRequest": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" } }, "required": [ "prompt" ], "additionalProperties": false, "title": "StreamTextRequest", "description": "Request for streaming text generation with a single prompt" }, "StreamObjectRequest": { "type": "object", "properties": { "prompt": { "type": "string", "minLength": 1 }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe" ] }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" } }, "required": [ "prompt", "schemaType" ], "additionalProperties": false, "title": "StreamObjectRequest", "description": "Request for streaming structured object generation" }, "StreamChatRequest": { "type": "object", "properties": { "messages": { "minItems": 1, "type": "array", "items": { "$ref": "#/components/schemas/ChatMessageWithSchemaType" } }, "model": { "type": "string", "enum": [ "OPENAI_GPT_5_NANO", "GOOGLE_GEMINI_3_FLASH", "CLAUDE_HAIKU_3_5", "CLAUDE_OPUS_4_5", "MISTRAL_SMALL" ] }, "options": { "$ref": "#/components/schemas/AiGenerateOptions" } }, "required": [ "messages" ], "additionalProperties": false, "title": "StreamChatRequest", "description": "Request for streaming multi-turn AI conversation" }, "CreateCommentSchema": { "type": "object", "properties": { "content": { "type": "string", "minLength": 1, "maxLength": 1000 }, "parentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "content" ], "additionalProperties": false, "title": "CreateCommentSchema", "description": "Schema for creating a comment" }, "CreatePostSchema": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "content": { "type": "array", "items": { "$ref": "#/components/schemas/PostContentSchema" } } }, "required": [ "title", "content" ], "additionalProperties": false, "title": "CreatePostSchema", "description": "Schema for creating/updating a post" }, "UpdatePostSchema": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "content": { "type": "array", "items": { "$ref": "#/components/schemas/PostContentSchema" } } }, "additionalProperties": false, "title": "UpdatePostSchema", "description": "Schema for updating a post" }, "GenerateTextResponse": { "type": "object", "properties": { "usage": { "$ref": "#/components/schemas/TokenUsage" }, "finishReason": { "type": "string" }, "result": { "type": "string" } }, "required": [ "result" ], "additionalProperties": false, "title": "GenerateTextResponse", "description": "Response from text generation" }, "TokenUsage": { "type": "object", "properties": { "promptTokens": { "type": "number" }, "completionTokens": { "type": "number" }, "totalTokens": { "type": "number" } }, "required": [ "promptTokens", "completionTokens", "totalTokens" ], "additionalProperties": false, "title": "TokenUsage", "description": "Token usage information for an AI generation" }, "GenerateObjectResponse": { "type": "object", "properties": { "usage": { "$ref": "#/components/schemas/TokenUsage" }, "finishReason": { "type": "string" }, "result": {} }, "required": [ "result" ], "additionalProperties": false, "title": "GenerateObjectResponse", "description": "Response from structured object generation" }, "ChatResponse": { "type": "object", "properties": { "usage": { "$ref": "#/components/schemas/TokenUsage" }, "finishReason": { "type": "string" }, "result": { "type": "string" }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ChatMessageWithSchemaType" } }, "toolCalls": { "type": "array", "items": { "$ref": "#/components/schemas/ToolCall" } }, "toolResults": { "type": "array", "items": { "$ref": "#/components/schemas/ToolResult" } } }, "required": [ "result", "messages" ], "additionalProperties": false, "title": "ChatResponse", "description": "Response from AI chat conversation" }, "ChatMessageWithSchemaType": { "type": "object", "properties": { "role": { "type": "string", "enum": [ "user", "assistant", "system", "tool" ] }, "content": { "type": "string" }, "metadata": { "type": "object", "properties": { "isConsideredSystemMessage": { "type": "boolean" }, "usage": { "description": "Total token usage for the message, including tools calls and reasoning steps", "type": "object", "properties": { "promptTokens": { "type": "number" }, "completionTokens": { "type": "number" }, "totalTokens": { "type": "number" } }, "required": [ "promptTokens", "completionTokens", "totalTokens" ], "additionalProperties": false, "title": "TokenUsage" }, "finishReason": { "type": "string" }, "timestamp": { "description": "ISO 8601 timestamp when the message was created", "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, "toolCalls": { "description": "Tool calls made to generate the message", "type": "array", "items": { "type": "object", "properties": { "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "toolCallId", "toolName", "args" ], "additionalProperties": false, "title": "ToolCall", "description": "A tool call made by the AI" } }, "reasonning": { "description": "Reasoning text for the message", "type": "string" }, "schemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe", "none" ], "title": "ChatSchemaType", "description": "Predefined schema types for testing structured output" } }, "additionalProperties": false } }, "required": [ "role", "content" ], "additionalProperties": false, "title": "ChatMessageWithSchemaType", "description": "A message with optional schemaType metadata for identifying structured output" }, "ToolCall": { "type": "object", "properties": { "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "toolCallId", "toolName", "args" ], "additionalProperties": false, "title": "ToolCall", "description": "A tool call made by the AI" }, "ChatSchemaType": { "type": "string", "enum": [ "userProfile", "task", "product", "recipe", "none" ], "title": "ChatSchemaType", "description": "Predefined schema types for testing structured output" }, "ToolResult": { "type": "object", "properties": { "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "result": {} }, "required": [ "toolCallId", "toolName", "result" ], "additionalProperties": false, "title": "ToolResult", "description": "The result of a tool call" }, "CommentSchema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "content": { "type": "string" }, "authorName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "user": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" } }, "required": [ "id", "name" ], "additionalProperties": false }, { "type": "null" } ] }, "parentId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "replyIds": { "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "replyCount": { "type": "number" } }, "required": [ "id", "content", "authorName", "createdAt", "user", "parentId" ], "additionalProperties": false, "title": "CommentSchema", "description": "Schema for a comment" }, "CommentsSchema": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/CommentSchema" } }, "meta": { "type": "object", "properties": { "offset": { "type": "number" }, "pageSize": { "type": "number" }, "itemCount": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "offset", "pageSize", "itemCount", "hasMore" ], "additionalProperties": false } }, "required": [ "data", "meta" ], "additionalProperties": false, "title": "CommentsSchema", "description": "Schema for a paginated list of comments" }, "UserPostSchema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "slug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "title": { "type": "string" }, "content": { "type": "array", "items": { "$ref": "#/components/schemas/PostContentSchema" } }, "versions": { "type": "array", "items": { "$ref": "#/components/schemas/PostVersionSchema" } }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "type": { "type": "string", "enum": [ "published", "draft" ] }, "commentCount": { "type": "number" } }, "required": [ "id", "title", "content", "versions", "type" ], "additionalProperties": false, "title": "UserPostSchema", "description": "Schema for a user's post" }, "PostContentSchema": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "text" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "image" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "video" }, "data": { "type": "string" } }, "required": [ "type", "data" ], "additionalProperties": false } ], "title": "PostContentSchema", "description": "Schema for content items (text, image, video)", "type": "object" }, "PostVersionSchema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "title": { "type": "string" }, "createdAt": { "type": "string" } }, "required": [ "id", "title", "createdAt" ], "additionalProperties": false, "title": "PostVersionSchema", "description": "Schema for a post version" }, "UserPostsSchema": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "slug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "title": { "type": "string" }, "versions": { "type": "array", "items": { "$ref": "#/components/schemas/PostVersionSchema" } }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "type": { "type": "string", "enum": [ "published", "draft" ] }, "commentCount": { "type": "number" }, "contentPreview": { "$ref": "#/components/schemas/PostContentSchema" } }, "required": [ "id", "title", "versions", "type", "contentPreview" ], "additionalProperties": false } }, "meta": { "type": "object", "properties": { "offset": { "type": "number" }, "pageSize": { "type": "number" }, "itemCount": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "offset", "pageSize", "itemCount", "hasMore" ], "additionalProperties": false } }, "required": [ "data", "meta" ], "additionalProperties": false, "title": "UserPostsSchema", "description": "Schema for a list of user's posts" }, "PublicPostSchema": { "type": "object", "properties": { "title": { "type": "string" }, "author": { "type": "object", "properties": { "name": { "type": "string" } }, "required": [ "name" ], "additionalProperties": false }, "content": { "type": "array", "items": { "$ref": "#/components/schemas/PostContentSchema" } }, "publishedAt": { "type": "string" }, "slug": { "type": "string" }, "commentCount": { "type": "number" } }, "required": [ "title", "author", "content", "publishedAt" ], "additionalProperties": false, "title": "PublicPostSchema", "description": "A public post" }, "PublicPostsSchema": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string" }, "author": { "type": "object", "properties": { "name": { "type": "string" } }, "required": [ "name" ], "additionalProperties": false }, "publishedAt": { "type": "string" }, "slug": { "type": "string" }, "commentCount": { "type": "number" }, "contentPreview": { "$ref": "#/components/schemas/PostContentSchema" } }, "required": [ "title", "author", "publishedAt", "contentPreview" ], "additionalProperties": false } }, "meta": { "type": "object", "properties": { "offset": { "type": "number" }, "pageSize": { "type": "number" }, "itemCount": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "offset", "pageSize", "itemCount", "hasMore" ], "additionalProperties": false } }, "required": [ "data", "meta" ], "additionalProperties": false, "title": "PublicPostsSchema", "description": "A list of public posts" }, "AiCoreMessage": { "type": "object", "properties": { "role": { "type": "string", "enum": [ "user", "assistant", "system", "tool" ] }, "content": { "type": "string" }, "metadata": { "type": "object", "properties": { "isConsideredSystemMessage": { "type": "boolean" }, "usage": { "$ref": "#/components/schemas/TokenUsage" }, "finishReason": { "type": "string" }, "timestamp": { "description": "ISO 8601 timestamp when the message was created", "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, "toolCalls": { "description": "Tool calls made to generate the message", "type": "array", "items": { "$ref": "#/components/schemas/ToolCall" } }, "reasonning": { "description": "Reasoning text for the message", "type": "string" } }, "additionalProperties": false } }, "required": [ "role", "content" ], "additionalProperties": false, "title": "AiCoreMessage", "description": "A message in the conversation history following Vercel AI SDK patterns" }, "AiStreamEvent": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "chunk" }, "text": { "type": "string" } }, "required": [ "type", "text" ], "additionalProperties": false, "title": "AiStreamTextChunkEvent", "description": "A text chunk event during streaming" }, { "type": "object", "properties": { "type": { "type": "string", "const": "tool-call" }, "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "args": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "type", "toolCallId", "toolName", "args" ], "additionalProperties": false, "title": "AiStreamToolCallEvent", "description": "Event when a tool is being called during streaming" }, { "type": "object", "properties": { "type": { "type": "string", "const": "tool-result" }, "toolCallId": { "type": "string" }, "toolName": { "type": "string" }, "result": {} }, "required": [ "type", "toolCallId", "toolName", "result" ], "additionalProperties": false, "title": "AiStreamToolResultEvent", "description": "Event when a tool returns a result during streaming" }, { "type": "object", "properties": { "type": { "type": "string", "const": "done" }, "fullText": { "type": "string" }, "usage": { "type": "object", "properties": { "promptTokens": { "type": "number" }, "completionTokens": { "type": "number" }, "totalTokens": { "type": "number" } }, "required": [ "promptTokens", "completionTokens", "totalTokens" ], "additionalProperties": false, "title": "AiStreamUsage", "description": "Token usage information for the stream" }, "finishReason": { "type": "string" } }, "required": [ "type", "fullText" ], "additionalProperties": false, "title": "AiStreamDoneEvent", "description": "Final event when streaming is complete" }, { "type": "object", "properties": { "type": { "type": "string", "const": "error" }, "message": { "type": "string" } }, "required": [ "type", "message" ], "additionalProperties": false, "title": "AiStreamErrorEvent", "description": "Error event during streaming" } ], "title": "AiStreamEvent", "description": "SSE event for AI text streaming with tool support", "type": "object" }, "Task": { "type": "object", "properties": { "title": { "type": "string" }, "description": { "type": "string" }, "priority": { "type": "string", "enum": [ "low", "medium", "high" ] }, "dueDate": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } } }, "required": [ "title", "description", "priority" ], "additionalProperties": false, "title": "Task", "description": "A task" }, "Product": { "type": "object", "properties": { "name": { "type": "string" }, "price": { "type": "number" }, "description": { "type": "string" }, "category": { "type": "string" }, "inStock": { "type": "boolean" }, "features": { "type": "array", "items": { "type": "string" } } }, "required": [ "name", "price", "description", "category", "inStock" ], "additionalProperties": false, "title": "Product", "description": "A product" }, "Recipe": { "type": "object", "properties": { "name": { "type": "string" }, "description": { "type": "string" }, "prepTime": { "type": "string" }, "cookTime": { "type": "string" }, "servings": { "type": "number" }, "difficulty": { "type": "string", "enum": [ "easy", "medium", "hard" ] }, "ingredients": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "quantity": { "type": "string" } }, "required": [ "name", "quantity" ], "additionalProperties": false } }, "instructions": { "type": "array", "items": { "type": "string" } }, "tips": { "type": "array", "items": { "type": "string" } } }, "required": [ "name", "description", "prepTime", "cookTime", "servings", "difficulty", "ingredients", "instructions" ], "additionalProperties": false, "title": "Recipe", "description": "A recipe" }, "UserProfile": { "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" }, "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "bio": { "type": "string" }, "skills": { "type": "array", "items": { "type": "string" } } }, "required": [ "name", "age", "email" ], "additionalProperties": false, "title": "UserProfile", "description": "A user profile" }, "AiGenerateOptions": { "type": "object", "properties": { "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "exclusiveMinimum": 0 }, "topP": { "type": "number", "minimum": 0, "maximum": 1 }, "frequencyPenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "presencePenalty": { "type": "number", "minimum": -2, "maximum": 2 }, "maxSteps": { "type": "number", "exclusiveMinimum": 0 }, "stopWhen": { "type": "number", "exclusiveMinimum": 0 }, "telemetry": { "type": "object", "properties": { "langfuseTraceName": { "type": "string", "description": "This enables Langfuse telemetry. Several LLM call can use the same traceName and will be merged into the same trace in Langfuse UI." }, "langfuseOriginalPrompt": { "description": "The original prompt that was used to generate the response. (Use prompt.toJSON())", "type": "string" }, "functionId": { "description": "This is the function ID that will be used to identify the LLM call in Langfuse UI. The Langfuse Span will be named after this function ID.", "type": "string" } }, "required": [ "langfuseTraceName" ], "additionalProperties": false }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "additionalProperties": false, "title": "AiGenerateOptions", "description": "Options for an AI generation" }, "PaginationQuerySchema": { "type": "object", "properties": { "offset": { "default": 0, "description": "Starting position of the query", "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "pageSize": { "default": 20, "description": "Number of items to return", "type": "integer", "minimum": 1, "maximum": 100 } }, "required": [ "offset", "pageSize" ], "additionalProperties": false, "title": "PaginationQuerySchema", "description": "Schema for pagination query" }, "SortingQueryStringSchema": { "title": "SortingQueryStringSchema", "description": "Schema for sorting items", "example": "name:asc,age:desc", "type": "string", "items": { "title": "SortingStringSchema", "description": "Schema for sorting items", "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" }, { "type": "string", "const": "createdAt" } ] }, "direction": { "type": "string", "enum": [ "asc", "desc" ] } }, "required": [ "property", "direction" ], "additionalProperties": false }, "format": "sort" }, "FilterQueryStringSchema": { "title": "FilterQueryStringSchema", "description": "Filtering query string, in the format of \"property:rule[:value];property:rule[:value];...\"\n
Available rules: eq, neq, gt, gte, lt, lte, like, nlike, in, nin, isnull, isnotnull \n
Available properties: title", "example": "name:eq:John;age:gt:30", "type": "string", "items": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" } ] }, "rule": { "type": "string", "enum": [ "eq", "neq", "gt", "gte", "lt", "lte", "like", "nlike", "in", "nin", "isnull", "isnotnull" ] }, "value": { "type": "string" } }, "required": [ "property", "rule" ], "additionalProperties": false, "title": "FilteringSchema", "description": "Schema for a single filtering item" }, "format": "filter" }, "CommentsController_postSlug": { "type": "string" }, "CommentsController_getComments_filterItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "content" } ] }, "rule": { "type": "string", "enum": [ "eq", "neq", "gt", "gte", "lt", "lte", "like", "nlike", "in", "nin", "isnull", "isnotnull" ] }, "value": { "type": "string" } }, "required": [ "property", "rule" ], "additionalProperties": false }, "CommentsController_getComments_filterArray": { "type": "array", "items": { "$ref": "#/components/schemas/CommentsController_getComments_filterItem" } }, "CommentsController_getComments_sortItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "createdAt" }, { "type": "string", "const": "authorName" } ] }, "direction": { "type": "string", "enum": [ "asc", "desc" ] } }, "required": [ "property", "direction" ], "additionalProperties": false }, "CommentsController_getComments_sortArray": { "type": "array", "items": { "$ref": "#/components/schemas/CommentsController_getComments_sortItem" } }, "CommentsController_getCommentReplies_sortItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "createdAt" }, { "type": "string", "const": "authorName" } ] }, "direction": { "type": "string", "enum": [ "asc", "desc" ] } }, "required": [ "property", "direction" ], "additionalProperties": false }, "CommentsController_getCommentReplies_sortArray": { "type": "array", "items": { "$ref": "#/components/schemas/CommentsController_getCommentReplies_sortItem" } }, "PostController_getUserPosts_filterItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" } ] }, "rule": { "type": "string", "enum": [ "eq", "neq", "gt", "gte", "lt", "lte", "like", "nlike", "in", "nin", "isnull", "isnotnull" ] }, "value": { "type": "string" } }, "required": [ "property", "rule" ], "additionalProperties": false }, "PostController_getUserPosts_filterArray": { "type": "array", "items": { "$ref": "#/components/schemas/PostController_getUserPosts_filterItem" } }, "PostController_getUserPosts_sortItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" }, { "type": "string", "const": "createdAt" } ] }, "direction": { "type": "string", "enum": [ "asc", "desc" ] } }, "required": [ "property", "direction" ], "additionalProperties": false }, "PostController_getUserPosts_sortArray": { "type": "array", "items": { "$ref": "#/components/schemas/PostController_getUserPosts_sortItem" } }, "PublicPostController_getPosts_filterItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" } ] }, "rule": { "type": "string", "enum": [ "eq", "neq", "gt", "gte", "lt", "lte", "like", "nlike", "in", "nin", "isnull", "isnotnull" ] }, "value": { "type": "string" } }, "required": [ "property", "rule" ], "additionalProperties": false }, "PublicPostController_getPosts_filterArray": { "type": "array", "items": { "$ref": "#/components/schemas/PublicPostController_getPosts_filterItem" } }, "PublicPostController_getPosts_sortItem": { "type": "object", "properties": { "property": { "anyOf": [ { "type": "string", "const": "title" }, { "type": "string", "const": "createdAt" } ] }, "direction": { "type": "string", "enum": [ "asc", "desc" ] } }, "required": [ "property", "direction" ], "additionalProperties": false }, "PublicPostController_getPosts_sortArray": { "type": "array", "items": { "$ref": "#/components/schemas/PublicPostController_getPosts_sortItem" } } } } }