Files
LangBot/docs/service-api-openapi.json
Copilot a076ce5756 feat: Add API key authentication system for external service access (#1757)
* Initial plan

* feat: Add API key authentication system backend

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* feat: Add API key management UI in frontend sidebar

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* fix: Correct import paths in API controller groups

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* fix: Address code review feedback - add i18n and validation

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* refactor: Enable API key auth on existing endpoints instead of creating separate service API

- Added USER_TOKEN_OR_API_KEY auth type that accepts both authentication methods
- Removed separate /api/service/v1/models endpoints
- Updated existing endpoints (models, bots, pipelines) to accept API keys
- External services can now use API keys to access all existing LangBot APIs
- Updated documentation to reflect unified API approach

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* docs: Add OpenAPI specification for API key authenticated endpoints

Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>

* chore: rename openapi spec

* perf: ui and i18n

* fix: ui bug

* chore: tidy docs

* chore: fix linter errors

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RockChinQ <45992437+RockChinQ@users.noreply.github.com>
Co-authored-by: Junyan Qin <rockchinq@gmail.com>
2025-11-07 14:08:11 +08:00

1944 lines
48 KiB
JSON

{
"openapi": "3.0.3",
"info": {
"title": "LangBot API with API Key Authentication",
"description": "LangBot external service API documentation. These endpoints support API Key authentication \nfor external systems to programmatically access LangBot resources.\n\n**Authentication Methods:**\n- User Token (via `Authorization: Bearer <token>`)\n- API Key (via `X-API-Key: <key>` or `Authorization: Bearer <key>`)\n\nAll endpoints documented here accept BOTH authentication methods.\n",
"version": "4.4.1",
"contact": {
"name": "LangBot",
"url": "https://langbot.app"
},
"license": {
"name": "AGPL-3.0",
"url": "https://github.com/langbot-app/LangBot/blob/master/LICENSE"
}
},
"servers": [
{
"url": "http://localhost:5300",
"description": "Local development server"
}
],
"tags": [
{
"name": "Models - LLM",
"description": "Large Language Model management operations"
},
{
"name": "Models - Embedding",
"description": "Embedding model management operations"
},
{
"name": "Bots",
"description": "Bot instance management operations"
},
{
"name": "Pipelines",
"description": "Pipeline configuration management operations"
}
],
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"paths": {
"/api/v1/provider/models/llm": {
"get": {
"tags": [
"Models - LLM"
],
"summary": "List all LLM models",
"description": "Retrieve a list of all configured LLM models",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"models": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LLMModel"
}
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
},
"post": {
"tags": [
"Models - LLM"
],
"summary": "Create a new LLM model",
"description": "Create and configure a new LLM model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LLMModelCreate"
}
}
}
},
"responses": {
"200": {
"description": "Model created successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid",
"example": "550e8400-e29b-41d4-a716-446655440000"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
}
}
},
"/api/v1/provider/models/llm/{model_uuid}": {
"get": {
"tags": [
"Models - LLM"
],
"summary": "Get a specific LLM model",
"description": "Retrieve details of a specific LLM model by UUID",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"model": {
"$ref": "#/components/schemas/LLMModel"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"put": {
"tags": [
"Models - LLM"
],
"summary": "Update an LLM model",
"description": "Update the configuration of an existing LLM model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LLMModelUpdate"
}
}
}
},
"responses": {
"200": {
"description": "Model updated successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"delete": {
"tags": [
"Models - LLM"
],
"summary": "Delete an LLM model",
"description": "Remove an LLM model from the system",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"responses": {
"200": {
"description": "Model deleted successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
},
"/api/v1/provider/models/llm/{model_uuid}/test": {
"post": {
"tags": [
"Models - LLM"
],
"summary": "Test an LLM model",
"description": "Test the connectivity and functionality of an LLM model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"description": "Model configuration to test"
}
}
}
},
"responses": {
"200": {
"description": "Model test successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
},
"500": {
"$ref": "#/components/responses/InternalServerError"
}
}
}
},
"/api/v1/provider/models/embedding": {
"get": {
"tags": [
"Models - Embedding"
],
"summary": "List all embedding models",
"description": "Retrieve a list of all configured embedding models",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"models": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EmbeddingModel"
}
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
},
"post": {
"tags": [
"Models - Embedding"
],
"summary": "Create a new embedding model",
"description": "Create and configure a new embedding model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EmbeddingModelCreate"
}
}
}
},
"responses": {
"200": {
"description": "Model created successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
}
},
"/api/v1/provider/models/embedding/{model_uuid}": {
"get": {
"tags": [
"Models - Embedding"
],
"summary": "Get a specific embedding model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"model": {
"$ref": "#/components/schemas/EmbeddingModel"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"put": {
"tags": [
"Models - Embedding"
],
"summary": "Update an embedding model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/EmbeddingModelUpdate"
}
}
}
},
"responses": {
"200": {
"description": "Model updated successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"delete": {
"tags": [
"Models - Embedding"
],
"summary": "Delete an embedding model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"responses": {
"200": {
"description": "Model deleted successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
},
"/api/v1/provider/models/embedding/{model_uuid}/test": {
"post": {
"tags": [
"Models - Embedding"
],
"summary": "Test an embedding model",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"$ref": "#/components/parameters/ModelUUID"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Model test successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
},
"/api/v1/platform/bots": {
"get": {
"tags": [
"Bots"
],
"summary": "List all bots",
"description": "Retrieve a list of all configured bot instances",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"bots": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Bot"
}
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
},
"post": {
"tags": [
"Bots"
],
"summary": "Create a new bot",
"description": "Create and configure a new bot instance",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BotCreate"
}
}
}
},
"responses": {
"200": {
"description": "Bot created successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
}
},
"/api/v1/platform/bots/{bot_uuid}": {
"get": {
"tags": [
"Bots"
],
"summary": "Get a specific bot",
"description": "Retrieve details of a specific bot instance",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "bot_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
"description": "Bot UUID"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"bot": {
"$ref": "#/components/schemas/Bot"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"put": {
"tags": [
"Bots"
],
"summary": "Update a bot",
"description": "Update the configuration of an existing bot instance",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "bot_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BotUpdate"
}
}
}
},
"responses": {
"200": {
"description": "Bot updated successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"delete": {
"tags": [
"Bots"
],
"summary": "Delete a bot",
"description": "Remove a bot instance from the system",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "bot_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Bot deleted successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
},
"/api/v1/platform/bots/{bot_uuid}/logs": {
"post": {
"tags": [
"Bots"
],
"summary": "Get bot event logs",
"description": "Retrieve event logs for a specific bot",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "bot_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"from_index": {
"type": "integer",
"default": -1,
"description": "Starting index for logs (-1 for latest)"
},
"max_count": {
"type": "integer",
"default": 10,
"description": "Maximum number of logs to retrieve"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"logs": {
"type": "array",
"items": {
"type": "object"
}
},
"total_count": {
"type": "integer"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
}
},
"/api/v1/pipelines": {
"get": {
"tags": [
"Pipelines"
],
"summary": "List all pipelines",
"description": "Retrieve a list of all configured pipelines",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "sort_by",
"in": "query",
"schema": {
"type": "string",
"default": "created_at"
},
"description": "Field to sort by"
},
{
"name": "sort_order",
"in": "query",
"schema": {
"type": "string",
"enum": [
"ASC",
"DESC"
],
"default": "DESC"
},
"description": "Sort order"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"pipelines": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Pipeline"
}
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
},
"post": {
"tags": [
"Pipelines"
],
"summary": "Create a new pipeline",
"description": "Create and configure a new pipeline",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PipelineCreate"
}
}
}
},
"responses": {
"200": {
"description": "Pipeline created successfully",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
}
},
"/api/v1/pipelines/_/metadata": {
"get": {
"tags": [
"Pipelines"
],
"summary": "Get pipeline metadata",
"description": "Retrieve metadata and configuration options for pipelines",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"configs": {
"type": "object"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
}
}
},
"/api/v1/pipelines/{pipeline_uuid}": {
"get": {
"tags": [
"Pipelines"
],
"summary": "Get a specific pipeline",
"description": "Retrieve details of a specific pipeline",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "pipeline_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"properties": {
"pipeline": {
"$ref": "#/components/schemas/Pipeline"
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"put": {
"tags": [
"Pipelines"
],
"summary": "Update a pipeline",
"description": "Update the configuration of an existing pipeline",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "pipeline_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PipelineUpdate"
}
}
}
},
"responses": {
"200": {
"description": "Pipeline updated successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"delete": {
"tags": [
"Pipelines"
],
"summary": "Delete a pipeline",
"description": "Remove a pipeline from the system",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "pipeline_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Pipeline deleted successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
},
"/api/v1/pipelines/{pipeline_uuid}/extensions": {
"get": {
"tags": [
"Pipelines"
],
"summary": "Get pipeline extensions",
"description": "Retrieve extensions and plugins configured for a pipeline",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "pipeline_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
},
"put": {
"tags": [
"Pipelines"
],
"summary": "Update pipeline extensions",
"description": "Update the extensions configuration for a pipeline",
"security": [
{
"ApiKeyAuth": []
},
{
"BearerAuth": []
}
],
"parameters": [
{
"name": "pipeline_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
},
"responses": {
"200": {
"description": "Extensions updated successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuccessResponse"
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/NotFoundError"
}
}
}
}
},
"components": {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "X-API-Key",
"description": "API Key authentication using X-API-Key header.\nExample: `X-API-Key: lbk_your_api_key_here`\n"
},
"BearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "Bearer token authentication. Can be either a user JWT token or an API key.\nExample: `Authorization: Bearer <token_or_key>`\n"
}
},
"parameters": {
"ModelUUID": {
"name": "model_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
"description": "Model UUID"
}
},
"schemas": {
"LLMModel": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"example": "GPT-4"
},
"description": {
"type": "string",
"example": "OpenAI GPT-4 model"
},
"requester": {
"type": "string",
"example": "openai-chat-completions"
},
"requester_config": {
"type": "object",
"properties": {
"model": {
"type": "string",
"example": "gpt-4"
},
"args": {
"type": "object"
}
}
},
"api_keys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"keys": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"abilities": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"chat",
"vision"
]
},
"extra_args": {
"type": "object"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"LLMModelCreate": {
"type": "object",
"required": [
"name",
"requester",
"requester_config",
"api_keys"
],
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"requester": {
"type": "string"
},
"requester_config": {
"type": "object"
},
"api_keys": {
"type": "array",
"items": {
"type": "object"
}
},
"abilities": {
"type": "array",
"items": {
"type": "string"
}
},
"extra_args": {
"type": "object"
}
}
},
"LLMModelUpdate": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"requester_config": {
"type": "object"
},
"api_keys": {
"type": "array",
"items": {
"type": "object"
}
},
"abilities": {
"type": "array",
"items": {
"type": "string"
}
},
"extra_args": {
"type": "object"
}
}
},
"EmbeddingModel": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"requester": {
"type": "string"
},
"requester_config": {
"type": "object"
},
"api_keys": {
"type": "array",
"items": {
"type": "object"
}
},
"extra_args": {
"type": "object"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"EmbeddingModelCreate": {
"type": "object",
"required": [
"name",
"requester",
"requester_config",
"api_keys"
],
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"requester": {
"type": "string"
},
"requester_config": {
"type": "object"
},
"api_keys": {
"type": "array",
"items": {
"type": "object"
}
},
"extra_args": {
"type": "object"
}
}
},
"EmbeddingModelUpdate": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"requester_config": {
"type": "object"
},
"api_keys": {
"type": "array",
"items": {
"type": "object"
}
},
"extra_args": {
"type": "object"
}
}
},
"Bot": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"adapter": {
"type": "string",
"example": "telegram"
},
"config": {
"type": "object"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"BotCreate": {
"type": "object",
"required": [
"name",
"adapter",
"config"
],
"properties": {
"name": {
"type": "string"
},
"adapter": {
"type": "string"
},
"config": {
"type": "object"
}
}
},
"BotUpdate": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"config": {
"type": "object"
}
}
},
"Pipeline": {
"type": "object",
"properties": {
"uuid": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"config": {
"type": "object"
},
"is_default": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"PipelineCreate": {
"type": "object",
"required": [
"name",
"config"
],
"properties": {
"name": {
"type": "string"
},
"config": {
"type": "object"
}
}
},
"PipelineUpdate": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"config": {
"type": "object"
}
}
},
"SuccessResponse": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": 0
},
"msg": {
"type": "string",
"example": "ok"
},
"data": {
"type": "object",
"nullable": true
}
}
},
"ErrorResponse": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"example": -1
},
"msg": {
"type": "string",
"example": "Error message"
}
}
}
},
"responses": {
"UnauthorizedError": {
"description": "Authentication required or invalid credentials",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"no_auth": {
"value": {
"code": -1,
"msg": "No valid authentication provided (user token or API key required)"
}
},
"invalid_key": {
"value": {
"code": -1,
"msg": "Invalid API key"
}
}
}
}
}
},
"NotFoundError": {
"description": "Resource not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"example": {
"code": -1,
"msg": "Resource not found"
}
}
}
},
"InternalServerError": {
"description": "Internal server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"example": {
"code": -2,
"msg": "Internal server error"
}
}
}
}
}
}
}