{
  "openapi": "3.0.3",
  "info": {
    "title": "Aitomaker - Universal AI Aggregator API",
    "description": "Universal API for accessing multiple AI providers (OpenAI, Anthropic, Google, DeepSeek, Perplexity, RunwayML, etc.) for text, image, audio and video generation through a unified interface.",
    "version": "1.0.0",
    "contact": {
      "name": "Aitomaker Support",
      "url": "https://aitomaker.com"
    }
  },
  "servers": [
    {
      "url": "https://api.aitomaker.com",
      "description": "Production API server"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    },
    {
      "ApiKeyAuth": []
    }
  ],
  "paths": {
    "/v1/models": {
      "get": {
        "tags": ["Models"],
        "summary": "List available models",
        "description": "Returns a list of available AI models from all providers",
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "description": "Filter by provider name",
            "schema": {
              "type": "string",
              "enum": ["openai", "anthropic", "google", "deepseek", "perplexity", "runwayml", "aitomaker"]
            }
          },
          {
            "name": "generation",
            "in": "query",
            "description": "Filter by generation type",
            "schema": {
              "type": "string",
              "enum": ["text", "image", "audio", "video"]
            }
          },
          {
            "name": "params",
            "in": "query",
            "description": "Include model parameters configuration",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "example": "models"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Model"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/models/{provider}/{model}": {
      "get": {
        "tags": ["Models"],
        "summary": "Get model information",
        "description": "Returns detailed information about a specific model",
        "parameters": [
          {
            "name": "provider",
            "in": "path",
            "required": true,
            "description": "Provider name",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "path",
            "required": true,
            "description": "Model name",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Model"
                }
              }
            }
          },
          "404": {
            "description": "Model not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/chats": {
      "get": {
        "tags": ["Chats"],
        "summary": "List chats",
        "description": "Returns a list of user's chats",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "example": "list"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Chat"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": ["Chats"],
        "summary": "Create chat",
        "description": "Creates a new chat conversation",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Chat title"
                  },
                  "first_message": {
                    "type": "string",
                    "description": "First user message (optional)"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Chat created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Chat UUID"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/chats/{id}": {
      "get": {
        "tags": ["Chats"],
        "summary": "Get chat",
        "description": "Returns chat details",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Chat UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Chat"
                }
              }
            }
          },
          "404": {
            "description": "Chat not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/chats/{id}/messages": {
      "get": {
        "tags": ["Chats"],
        "summary": "Get chat messages",
        "description": "Returns all messages in a chat",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Chat UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "example": "messages"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Message"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/chats/{id}/delete": {
      "post": {
        "tags": ["Chats"],
        "summary": "Delete chat",
        "description": "Deletes a chat and all its messages",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Chat UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Chat deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/chats/completions": {
      "post": {
        "tags": ["Chats"],
        "summary": "Chat completion",
        "description": "Generates AI response in a chat conversation (OpenAI-compatible endpoint)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChatCompletionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChatCompletionResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient balance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/completions": {
      "post": {
        "tags": ["Completions"],
        "summary": "Text completion",
        "description": "Generates text completion from a prompt",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompletionRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompletionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/generations": {
      "get": {
        "tags": ["Generations"],
        "summary": "List generations",
        "description": "Returns a list of user's media generations",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Filter by status",
            "schema": {
              "type": "string",
              "enum": ["pending", "processing", "downloading", "completed", "failed"]
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Filter by type",
            "schema": {
              "type": "string",
              "enum": ["image", "audio", "video"]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results",
            "schema": {
              "type": "integer",
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Offset for pagination",
            "schema": {
              "type": "integer",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerationsList"
                }
              }
            }
          }
        }
      }
    },
    "/v1/generations/{id}": {
      "get": {
        "tags": ["Generations"],
        "summary": "Get generation status",
        "description": "Returns the status of a specific generation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Generation UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenerationStatus"
                }
              }
            }
          },
          "404": {
            "description": "Generation not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v1/generations/image": {
      "post": {
        "tags": ["Generations"],
        "summary": "Generate image",
        "description": "Creates a new image generation request",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImageGenerationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImageGenerationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/generations/audio": {
      "post": {
        "tags": ["Generations"],
        "summary": "Generate audio",
        "description": "Creates a new audio generation request",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AudioGenerationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AudioGenerationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/generations/video": {
      "post": {
        "tags": ["Generations"],
        "summary": "Generate video",
        "description": "Creates a new video generation request",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoGenerationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoGenerationResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/files": {
      "get": {
        "tags": ["Files"],
        "summary": "List files",
        "description": "Returns a list of user's uploaded and generated files",
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FilesList"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": ["Files"],
        "summary": "Upload file",
        "description": "Uploads a file to the CDN",
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  },
                  "purpose": {
                    "type": "string",
                    "default": "assistants"
                  }
                },
                "required": ["file"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "File uploaded successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileUploadResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/{id}": {
      "get": {
        "tags": ["Files"],
        "summary": "Get file",
        "description": "Returns file information",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "File UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/File"
                }
              }
            }
          },
          "404": {
            "description": "File not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": ["Files"],
        "summary": "Delete file",
        "description": "Deletes a file from CDN and database",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "File UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "File deleted successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "object": {
                      "type": "string",
                      "example": "file"
                    },
                    "deleted": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/{id}/rename": {
      "post": {
        "tags": ["Files"],
        "summary": "Rename file",
        "description": "Renames a file",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "File UUID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "New file name (without extension)"
                  }
                },
                "required": ["name"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "File renamed successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "object": {
                      "type": "string",
                      "example": "file"
                    },
                    "name": {
                      "type": "string"
                    },
                    "renamed": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "API key as Bearer token in Authorization header"
      },
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "API key in custom X-API-Key header"
      }
    },
    "schemas": {
      "Model": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Model ID in format provider/model-name",
            "example": "openai/gpt-4"
          },
          "name": {
            "type": "string",
            "description": "Model name",
            "example": "gpt-4"
          },
          "title": {
            "type": "string",
            "description": "Model display title"
          },
          "description": {
            "type": "string",
            "description": "Model description"
          },
          "provider": {
            "type": "string",
            "description": "Provider name",
            "example": "openai"
          },
          "provider_title": {
            "type": "string",
            "description": "Provider display title"
          },
          "context": {
            "type": "integer",
            "description": "Maximum context window size"
          },
          "generations": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["text", "image", "audio", "video"]
            },
            "description": "Supported generation types"
          },
          "pricing": {
            "type": "object",
            "description": "Model pricing information"
          },
          "is_quick_select": {
            "type": "boolean",
            "description": "Whether model should appear in quick select"
          },
          "parameters": {
            "type": "object",
            "description": "Available model parameters"
          }
        }
      },
      "Chat": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Chat UUID"
          },
          "title": {
            "type": "string",
            "description": "Chat title"
          },
          "status": {
            "type": "string",
            "enum": ["new", "active", "archived"],
            "description": "Chat status"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "Message": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Message UUID"
          },
          "role": {
            "type": "string",
            "enum": ["user", "assistant", "system"],
            "description": "Message role"
          },
          "content": {
            "type": "string",
            "description": "Message content"
          },
          "status": {
            "type": "string",
            "enum": ["pending", "completed", "error"],
            "description": "Message status"
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/File"
            },
            "description": "Message attachments"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "ChatCompletionRequest": {
        "type": "object",
        "required": ["model", "messages"],
        "properties": {
          "model": {
            "type": "string",
            "description": "Model ID in format provider/model-name",
            "example": "openai/gpt-4"
          },
          "messages": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "role": {
                  "type": "string",
                  "enum": ["system", "user", "assistant"]
                },
                "content": {
                  "type": "string"
                }
              }
            }
          },
          "chat": {
            "type": "string",
            "description": "Chat UUID to save conversation history (optional)"
          },
          "temperature": {
            "type": "number",
            "minimum": 0,
            "maximum": 2,
            "description": "Sampling temperature"
          },
          "max_tokens": {
            "type": "integer",
            "description": "Maximum tokens to generate"
          },
          "top_p": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Nucleus sampling parameter"
          },
          "stream": {
            "type": "boolean",
            "description": "Whether to stream response",
            "default": false
          }
        }
      },
      "ChatCompletionResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique completion ID"
          },
          "object": {
            "type": "string",
            "example": "chat.completion"
          },
          "model": {
            "type": "string",
            "description": "Model used"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number",
            "description": "Generation time in seconds"
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer"
                },
                "message": {
                  "type": "object",
                  "properties": {
                    "role": {
                      "type": "string",
                      "example": "assistant"
                    },
                    "content": {
                      "type": "string"
                    }
                  }
                },
                "finish_reason": {
                  "type": "string",
                  "enum": ["stop", "length", "content_filter"]
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          }
        }
      },
      "CompletionRequest": {
        "type": "object",
        "required": ["model", "prompt"],
        "properties": {
          "model": {
            "type": "string",
            "description": "Model ID in format provider/model-name"
          },
          "prompt": {
            "type": "string",
            "description": "Text prompt"
          },
          "temperature": {
            "type": "number"
          },
          "max_tokens": {
            "type": "integer"
          },
          "top_p": {
            "type": "number"
          }
        }
      },
      "CompletionResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "text.completion"
          },
          "model": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "choices": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "index": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                },
                "finish_reason": {
                  "type": "string"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/Usage"
          }
        }
      },
      "ImageGenerationRequest": {
        "type": "object",
        "required": ["model", "prompt"],
        "properties": {
          "model": {
            "type": "string",
            "description": "Model ID in format provider/model-name",
            "example": "openai/dall-e-3"
          },
          "prompt": {
            "type": "string",
            "description": "Image generation prompt"
          },
          "size": {
            "type": "string",
            "description": "Image size",
            "example": "1024x1024"
          },
          "quality": {
            "type": "string",
            "enum": ["standard", "hd"]
          },
          "n": {
            "type": "integer",
            "description": "Number of images to generate",
            "default": 1
          },
          "response_format": {
            "type": "string",
            "enum": ["url", "b64_json"]
          }
        }
      },
      "ImageGenerationResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "image.generation"
          },
          "model": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": ["pending", "processing", "completed", "failed"]
          },
          "task_id": {
            "type": "string",
            "description": "Task ID for async generation"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                },
                "b64_json": {
                  "type": "string"
                },
                "revised_prompt": {
                  "type": "string"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/MediaUsage"
          }
        }
      },
      "AudioGenerationRequest": {
        "type": "object",
        "required": ["model", "prompt"],
        "properties": {
          "model": {
            "type": "string",
            "description": "Model ID in format provider/model-name"
          },
          "prompt": {
            "type": "string",
            "description": "Audio generation prompt or text to speech"
          },
          "voice": {
            "type": "string",
            "description": "Voice type"
          }
        }
      },
      "AudioGenerationResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "audio.generation"
          },
          "model": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "task_id": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/MediaUsage"
          }
        }
      },
      "VideoGenerationRequest": {
        "type": "object",
        "required": ["model", "prompt"],
        "properties": {
          "model": {
            "type": "string",
            "description": "Model ID in format provider/model-name",
            "example": "runwayml/gen-3-alpha"
          },
          "prompt": {
            "type": "string",
            "description": "Video generation prompt"
          },
          "duration": {
            "type": "integer",
            "description": "Video duration in seconds"
          },
          "aspect_ratio": {
            "type": "string",
            "description": "Video aspect ratio",
            "example": "16:9"
          }
        }
      },
      "VideoGenerationResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "video.generation"
          },
          "model": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "task_id": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "duration": {
            "type": "number"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                },
                "thumbnail": {
                  "type": "string"
                },
                "duration": {
                  "type": "integer"
                },
                "mime_type": {
                  "type": "string"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/MediaUsage"
          }
        }
      },
      "GenerationsList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": ["image", "audio", "video"]
                },
                "model": {
                  "type": "string"
                },
                "provider": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "prompt": {
                  "type": "string"
                },
                "created": {
                  "type": "string",
                  "format": "date-time"
                },
                "files": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/File"
                  }
                },
                "error": {
                  "type": "string"
                },
                "cost": {
                  "type": "string"
                },
                "generation_time": {
                  "type": "number"
                },
                "usage": {
                  "type": "object"
                }
              }
            }
          },
          "total": {
            "type": "integer"
          }
        }
      },
      "GenerationStatus": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "generation.status"
          },
          "model": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "task_id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": ["pending", "processing", "downloading", "completed", "failed"]
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "thumbnail": {
                  "type": "string"
                },
                "duration": {
                  "type": "integer"
                },
                "mime": {
                  "type": "string"
                },
                "expires": {
                  "type": "string",
                  "format": "date-time",
                  "description": "URL expiration time (ISO 8601)"
                }
              }
            }
          },
          "usage": {
            "$ref": "#/components/schemas/MediaUsage"
          }
        }
      },
      "File": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "File UUID"
          },
          "type": {
            "type": "string",
            "enum": ["image", "video", "audio", "document"]
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "description": "File size in bytes"
          },
          "mime_type": {
            "type": "string"
          },
          "duration": {
            "type": "integer",
            "description": "Duration in seconds (for audio/video)"
          },
          "dimensions": {
            "type": "object",
            "properties": {
              "width": {
                "type": "integer"
              },
              "height": {
                "type": "integer"
              }
            }
          }
        }
      },
      "FilesList": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/File"
            }
          },
          "total": {
            "type": "integer"
          }
        }
      },
      "FileUploadResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string",
            "example": "file"
          },
          "bytes": {
            "type": "integer"
          },
          "created_at": {
            "type": "integer",
            "description": "Unix timestamp"
          },
          "filename": {
            "type": "string"
          },
          "purpose": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        }
      },
      "Usage": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "input_tokens": {
            "type": "integer"
          },
          "output_tokens": {
            "type": "integer"
          },
          "total_tokens": {
            "type": "integer"
          },
          "input_spend": {
            "type": "string"
          },
          "output_spend": {
            "type": "string"
          },
          "total_spend": {
            "type": "string"
          }
        }
      },
      "MediaUsage": {
        "type": "object",
        "properties": {
          "model": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "media_seconds": {
            "type": "integer"
          },
          "media_count": {
            "type": "integer"
          },
          "total_spend": {
            "type": "string"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "param": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Models",
      "description": "Operations with AI models"
    },
    {
      "name": "Chats",
      "description": "Chat conversations management"
    },
    {
      "name": "Completions",
      "description": "Text completion operations"
    },
    {
      "name": "Generations",
      "description": "Image, audio, and video generation"
    },
    {
      "name": "Files",
      "description": "File management operations"
    }
  ]
}
