{ "openapi": "3.1.0", "info": { "title": "CelebAI Video Generation API", "description": "AI-powered celebrity video generation platform that creates personalized videos with lip-sync technology", "contact": { "name": "CelebAI Team", "email": "support@celebai.com" }, "license": { "name": "MIT", "url": "https://opensource.org/licenses/MIT" }, "version": "1.0.0" }, "servers": [ { "url": "http://localhost:8080", "description": "Local development server" }, { "url": "https://api.celebai.com", "description": "Production server" } ], "paths": { "/api/auth/forgot-password": { "post": { "tags": [ "Auth" ], "summary": "Forgot password", "operationId": "forgot_password", "requestBody": { "description": "Email address for password reset request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ForgotPasswordRequest" } } }, "required": true }, "responses": { "200": { "description": "Password reset email sent", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ForgotPasswordResponse" } } } } } } }, "/api/auth/google": { "get": { "tags": [ "Auth" ], "summary": "Google OAuth redirect", "operationId": "google_auth_redirect", "responses": { "302": { "description": "Redirect to Google OAuth consent screen" }, "500": { "description": "Internal server error", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/google/callback": { "get": { "tags": [ "Auth" ], "summary": "Google OAuth callback", "operationId": "google_auth_callback", "parameters": [ { "name": "code", "in": "query", "description": "Authorization code from Google", "required": true, "schema": { "type": "string" } }, { "name": "state", "in": "query", "description": "State parameter for CSRF protection", "required": true, "schema": { "type": "string" } } ], "responses": { "302": { "description": "Redirect to frontend application" }, "400": { "description": "Invalid authorization code or state", "content": { "text/plain": { "schema": { "type": "string" } } } }, "500": { "description": "Internal server error", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/login": { "post": { "tags": [ "Auth" ], "summary": "User login", "operationId": "login", "requestBody": { "description": "User login credentials including email and password", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginRequest" } } }, "required": true }, "responses": { "200": { "description": "Login successful", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LoginResponse" } } } }, "400": { "description": "Invalid credentials or email not verified", "content": { "text/plain": { "schema": { "type": "string" } } } }, "500": { "description": "Internal server error", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/logout": { "get": { "tags": [ "Auth" ], "summary": "Logout", "operationId": "logout", "responses": { "200": { "description": "Successfully logged out", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LogoutResponse" } } } } } } }, "/api/auth/me": { "get": { "tags": [ "Auth" ], "summary": "Get current user info", "operationId": "get_me", "responses": { "200": { "description": "Current user information", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserInfoResponse" }, "example": { "created_at": "2023-01-01T00:00:00", "email": "user@example.com", "id": "d290f1ee-6c54-4b01-90e6-d701748f0851" } } } }, "401": { "description": "Not authenticated", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/register": { "post": { "tags": [ "Auth" ], "summary": "User registration", "operationId": "register", "requestBody": { "description": "User registration data including email and password", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterRequest" } } }, "required": true }, "responses": { "200": { "description": "Registration successful", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterResponse" } } } }, "400": { "description": "Invalid input or email already exists", "content": { "text/plain": { "schema": { "type": "string" } } } }, "500": { "description": "Internal server error", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/reset-password": { "post": { "tags": [ "Auth" ], "summary": "Reset password", "operationId": "reset_password", "requestBody": { "description": "Password reset token and new password", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResetPasswordRequest" } } }, "required": true }, "responses": { "200": { "description": "Password reset successful", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResetPasswordResponse" } } } }, "400": { "description": "Invalid token or password", "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/api/auth/verify-email": { "get": { "tags": [ "Auth" ], "summary": "Email verification", "operationId": "verify_email", "parameters": [ { "name": "token", "in": "query", "description": "Email verification token", "required": true, "schema": { "type": "string" } } ], "responses": { "302": { "description": "Redirect to frontend after verification" }, "400": { "description": "Invalid or expired token", "content": { "text/plain": { "schema": { "type": "string" } } } }, "500": { "description": "Internal server error", "content": { "text/plain": { "schema": { "type": "string" } } } } } } } }, "components": { "schemas": { "AuthProvider": { "type": "string", "description": "Authentication provider types supported by the system", "enum": [ "google", "email", "both" ] }, "ForgotPasswordRequest": { "type": "object", "description": "Request body for password reset", "required": [ "email" ], "properties": { "email": { "type": "string", "description": "User's email address", "example": "user@example.com" } }, "example": { "email": "user@example.com" } }, "ForgotPasswordResponse": { "type": "object", "description": "Response for password reset request", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "Status message" } }, "example": { "message": "If the email exists in our system, a password reset link has been sent." } }, "LoginRequest": { "type": "object", "description": "Request body for user login", "required": [ "email", "password" ], "properties": { "email": { "type": "string", "description": "User's email address" }, "password": { "type": "string", "description": "User's password" } }, "example": { "email": "user@example.com", "password": "password123" } }, "LoginResponse": { "type": "object", "description": "Response for successful user login", "required": [ "message", "user" ], "properties": { "message": { "type": "string", "description": "Success message" }, "user": { "$ref": "#/components/schemas/UserInfo", "description": "User information" } }, "example": { "message": "Login successful", "user": { "auth_provider": "email", "display_name": "John Doe", "email": "user@example.com", "email_verified": true, "id": "d290f1ee-6c54-4b01-90e6-d701748f0851" } } }, "LogoutResponse": { "type": "object", "description": "Response for successful logout", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "Success message" } }, "example": { "message": "Logged out successfully" } }, "RegisterRequest": { "type": "object", "description": "Request body for user registration.", "required": [ "email", "password" ], "properties": { "email": { "type": "string", "description": "User's email address" }, "password": { "type": "string", "description": "User's password (minimum 8 characters)" } }, "example": { "email": "user@example.com", "password": "password123" } }, "RegisterResponse": { "type": "object", "description": "Response for successful user registration", "required": [ "message", "user_id" ], "properties": { "message": { "type": "string", "description": "Success message" }, "user_id": { "type": "string", "format": "uuid", "description": "Unique identifier of the registered user" } }, "example": { "message": "Registration successful. Please check your email for verification.", "user_id": "d290f1ee-6c54-4b01-90e6-d701748f0851" } }, "ResetPasswordRequest": { "type": "object", "description": "Request body for password reset confirmation", "required": [ "token", "new_password" ], "properties": { "new_password": { "type": "string", "description": "New password (minimum 8 characters)" }, "token": { "type": "string", "description": "Password reset token" } }, "example": { "new_password": "newpassword123", "token": "550e8400-e29b-41d4-a716-446655440000" } }, "ResetPasswordResponse": { "type": "object", "description": "Response for successful password reset", "required": [ "message" ], "properties": { "message": { "type": "string", "description": "Success message" } }, "example": { "message": "Password has been reset successfully" } }, "UserInfo": { "type": "object", "description": "User information for API responses and internal use", "required": [ "id", "email", "auth_provider", "email_verified" ], "properties": { "auth_provider": { "$ref": "#/components/schemas/AuthProvider", "description": "Authentication provider used by the user" }, "avatar_url": { "type": [ "string", "null" ], "description": "URL to user's avatar image" }, "created_at": { "type": [ "string", "null" ], "format": "date-time", "description": "Timestamp when user was created" }, "display_name": { "type": [ "string", "null" ], "description": "User's display name" }, "email": { "type": "string", "description": "User's email address" }, "email_verified": { "type": "boolean", "description": "Whether the user's email has been verified" }, "id": { "type": "string", "format": "uuid", "description": "Unique user identifier" }, "last_login": { "type": [ "string", "null" ], "format": "date-time", "description": "Timestamp of user's last login" } } }, "UserInfoResponse": { "type": "object", "description": "Simplified user information for public API responses", "required": [ "id", "email" ], "properties": { "created_at": { "type": [ "string", "null" ], "format": "date-time", "description": "Timestamp when user was created", "example": "2023-01-01T00:00:00" }, "email": { "type": "string", "description": "User's email address", "example": "user@example.com" }, "id": { "type": "string", "format": "uuid", "description": "Unique user identifier", "example": "d290f1ee-6c54-4b01-90e6-d701748f0851" } } } } }, "tags": [ { "name": "Generation", "description": "Audio and video generation endpoints" }, { "name": "Auth", "description": "Authentication and authorization endpoints" }, { "name": "Webhook", "description": "Webhook endpoints for external service callbacks" }, { "name": "Characters", "description": "Character and video clip management endpoints" } ] }