# Mixvideo Workflow API Documentation ## Overview This document describes the REST API endpoints for the Mixvideo Workflow service, which provides video generation capabilities with Google OAuth integration, payment processing, and template management. ## Base URL ``` https://mixvideo-workflow.bowong.cc/ ``` ## Authentication Most endpoints require authentication via OAuth tokens or API keys. Include tokens in the Authorization header: ``` Authorization: Bearer ``` --- ## Auth Controller (`/auth/google`) ### Google OAuth Authentication #### `GET /auth/google/authorize` Initiates Google OAuth authorization flow. **Query Parameters:** - `redirect_url` (optional): URL to redirect after authorization - `scopes` (optional): Comma-separated OAuth scopes (default: openid,email,profile) **Response:** - Redirects to Google OAuth consent screen --- #### `GET /auth/google/callback` Handles OAuth callback from Google. **Query Parameters:** - `code`: Authorization code from Google - `state`: State parameter for CSRF protection - `error` (optional): Error code if authorization failed **Success Response (200):** ```json { "success": true, "code": 200, "message": "OAuth authorization successful", "data": { "user": { "id": "user_id", "email": "user@example.com", "name": "User Name" }, "access_token": "ya29.xxx", "expires_in": 3600 } } ``` --- #### `POST /auth/google/refresh` Refreshes OAuth access token. **Request Body:** ```json { "refresh_token": "refresh_token_here", "user_id": "optional_user_id" } ``` **Response (200):** ```json { "success": true, "code": 200, "message": "Token refreshed successfully", "data": { "access_token": "new_access_token", "expires_in": 3600, "scope": "openid email profile" } } ``` --- #### `GET /auth/google/userinfo` Retrieves user information from Google. **Headers:** - `Authorization: Bearer ` OR - Query parameter: `access_token=` **Response (200):** ```json { "success": true, "code": 200, "message": "User info retrieved successfully", "data": { "id": "user_id", "email": "user@example.com", "name": "User Name", "picture": "https://..." } } ``` --- #### `POST /auth/google/revoke` Revokes OAuth token. **Request Body:** ```json { "token": "token_to_revoke", "user_id": "optional_user_id" } ``` **Response (200):** ```json { "success": true, "code": 200, "message": "Token revoked successfully" } ``` --- ## Payment Controller (`/payment`) ### Stripe Payment Integration #### `POST /payment/checkout/:templateCode` Creates Stripe checkout session for a template. **Path Parameters:** - `templateCode`: Template identifier **Request Body:** ```json { "userId": "user_123", "metadata": { "imageUrl": "https://example.com/image.jpg" } } ``` **Response (200):** ```json { "code": 200, "message": "Checkout session created successfully", "data": { "sessionId": "cs_xxx", "url": "https://checkout.stripe.com/pay/cs_xxx", "paymentId": "payment_123" }, "timestamp": "2024-01-01T00:00:00Z", "traceId": "trace_123" } ``` --- #### `POST /payment/webhook` Handles Stripe webhook events. **Headers:** - `stripe-signature`: Stripe webhook signature **Request Body:** Raw webhook payload from Stripe **Response (200):** ```json { "code": 200, "message": "Webhook processed successfully" } ``` --- #### `GET /payment/success` Handles successful payment callback. **Query Parameters:** - `session_id`: Stripe session ID - `payment_id`: Internal payment ID **Response (200):** ```json { "code": 200, "message": "Payment successful, template execution started", "data": { "payment": { "id": "payment_123", "status": "completed", "templateCode": "template_001" }, "execution": { "executionId": "exec_123", "taskId": "task_123" } } } ``` --- #### `GET /payment/cancel` Handles payment cancellation. **Query Parameters:** - `session_id`: Stripe session ID - `payment_id`: Internal payment ID **Response (200):** ```json { "code": 200, "message": "Payment cancelled", "data": { "payment": { "id": "payment_123", "status": "cancelled" } } } ``` --- #### `GET /payment/history` Retrieves user payment history. **Query Parameters:** - `userId`: User identifier **Response (200):** ```json { "code": 200, "message": "Payment history retrieved successfully", "data": { "payments": [ { "id": "payment_123", "templateCode": "template_001", "status": "completed", "amount": 1000, "currency": "usd", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 1 } } ``` --- #### `POST /payment/refund/:paymentId` Processes refund for a payment. **Path Parameters:** - `paymentId`: Payment identifier **Request Body:** ```json { "reason": "user_request", "amount": 1000, "metadata": { "note": "Customer requested refund" } } ``` **Response (200):** ```json { "code": 200, "message": "Refund processed successfully", "data": { "refundId": "re_xxx", "amount": 1000, "status": "succeeded" } } ``` --- #### `GET /payment/:paymentId` Retrieves payment details. **Path Parameters:** - `paymentId`: Payment identifier **Response (200):** ```json { "code": 200, "message": "Payment details retrieved successfully", "data": { "id": "payment_123", "templateCode": "template_001", "userId": "user_123", "status": "completed", "amount": 1000, "currency": "usd", "stripeSessionId": "cs_xxx", "executionId": "exec_123", "createdAt": "2024-01-01T00:00:00Z" } } ``` --- #### `GET /payment/health` Payment service health check. **Response (200):** ```json { "code": 200, "message": "Payment service is healthy", "data": { "timestamp": "2024-01-01T00:00:00Z", "service": "PaymentController" } } ``` --- ## Task Controller (`/task`) ### Task Management #### `GET /task/:taskId` Retrieves task status and details. **Path Parameters:** - `taskId`: Task identifier **Response (200):** ```json { "code": 200, "message": "Task status retrieved", "data": { "id": "task_123", "status": "completed", "progress": 100, "result": { "videoUrl": "https://example.com/output.mp4" }, "createdAt": "2024-01-01T00:00:00Z", "completedAt": "2024-01-01T00:05:00Z" } } ``` --- #### `POST /task` Creates a new task. **Request Body:** ```json { "type": "video_generation", "templateCode": "template_001", "userId": "user_123", "parameters": { "imageUrl": "https://example.com/input.jpg" } } ``` **Response (200):** ```json { "code": 200, "message": "Sent message to the queue", "data": "task_123" } ``` --- #### `POST /task/:taskId` Creates task with specific ID. **Path Parameters:** - `taskId`: Desired task identifier **Request Body:** ```json { "type": "video_generation", "templateCode": "template_001", "parameters": { "imageUrl": "https://example.com/input.jpg" } } ``` **Response (200):** ```json { "code": 200, "message": "Sent message to the queue", "data": "task_123" } ``` --- ## Template Controller (`/templates`) ### Template Management #### `GET /templates` Retrieves all active templates. **Response (200):** ```json { "code": 200, "message": "Templates retrieved successfully", "data": { "templates": [ { "code": "template_001", "name": "AI Video Generator", "description": "Generate videos from images using AI", "creditCost": 10, "templateType": "VIDEO", "isActive": true, "tags": ["ai", "video", "generation"] } ], "total": 1 } } ``` --- #### `GET /templates/get/:code` Retrieves specific template by code. **Path Parameters:** - `code`: Template code **Response (200):** ```json { "code": 200, "message": "Template retrieved successfully", "data": { "code": "template_001", "name": "AI Video Generator", "description": "Generate videos from images using AI", "creditCost": 10, "templateType": "VIDEO", "workflow": "video-generation-workflow", "isActive": true, "stripeProductId": "prod_xxx", "createdAt": "2024-01-01T00:00:00Z" } } ``` --- #### `POST /templates` Creates a new template. **Request Body:** ```json { "code": "template_002", "name": "New Template", "description": "Template description", "workflow": "workflow-name", "creditCost": 15, "version": "1.0.0", "templateType": "IMAGE", "tags": ["new", "template"], "imageModel": "dall-e-3", "imagePrompt": "Generate image based on: {prompt}" } ``` **Response (200):** ```json { "code": 200, "message": "Template created successfully", "data": { "code": "template_002", "stripeProductId": "prod_yyy", "stripePriceId": "price_yyy" } } ``` --- #### `PUT /templates/update/:code` Updates existing template. **Path Parameters:** - `code`: Template code **Request Body:** ```json { "name": "Updated Template Name", "description": "Updated description", "creditCost": 20, "isActive": true } ``` **Response (200):** ```json { "code": 200, "message": "Template updated successfully", "data": { "updated": true, "stripeSynced": true } } ``` --- #### `DELETE /templates/delete/:code` Deletes template. **Path Parameters:** - `code`: Template code **Response (200):** ```json { "code": 200, "message": "Template deleted successfully", "data": { "deleted": true } } ``` --- #### `POST /templates/execute/:code` Executes template workflow. **Path Parameters:** - `code`: Template code **Request Body:** ```json { "userId": "user_123", "imageUrl": "https://example.com/input.jpg" } ``` **Response (200):** ```json { "code": 200, "message": "Template execution started", "data": { "executionId": "exec_123", "taskId": "task_123", "status": "running" } } ``` --- #### `POST /templates/activate/:code` Activates template and syncs to Stripe. **Path Parameters:** - `code`: Template code **Response (200):** ```json { "code": 200, "message": "Template activated successfully", "data": { "isActive": true, "stripeSynced": true } } ``` --- #### `POST /templates/deactivate/:code` Deactivates template. **Path Parameters:** - `code`: Template code **Response (200):** ```json { "code": 200, "message": "Template deactivated successfully", "data": { "isActive": false, "stripeSynced": true } } ``` --- #### `POST /templates/sync/:code` Syncs template to Stripe. **Path Parameters:** - `code`: Template code **Request Body (optional):** ```json { "forceUpdate": true } ``` **Response (200):** ```json { "code": 200, "message": "Template sync completed", "data": { "synced": true, "stripeProductId": "prod_xxx", "stripePriceId": "price_xxx" } } ``` --- #### `GET /templates/execution/:taskId/progress` Gets execution progress. **Path Parameters:** - `taskId`: Task identifier **Response (200):** ```json { "code": 200, "message": "Execution progress retrieved", "data": { "taskId": "task_123", "executionId": "exec_123", "status": "completed", "progress": 100, "result": { "videoUrl": "https://example.com/output.mp4" } } } ``` --- #### `GET /templates/executions/user/:userId` Gets user execution history. **Path Parameters:** - `userId`: User identifier **Response (200):** ```json { "code": 200, "message": "User executions retrieved successfully", "data": { "executions": [ { "executionId": "exec_123", "templateCode": "template_001", "status": "completed", "createdAt": "2024-01-01T00:00:00Z" } ], "total": 1 } } ``` --- #### `POST /templates/bulk` Performs bulk operations on templates. **Request Body:** ```json { "templateCodes": ["template_001", "template_002"], "operation": "sync_stripe" } ``` **Response (200):** ```json { "code": 200, "message": "Bulk operation completed", "data": { "successful": ["template_001", "template_002"], "failed": [], "total": 2 } } ``` --- #### `GET /templates/sync-all-stripe` Syncs all templates to Stripe. **Response (200):** ```json { "code": 200, "message": "All templates synced to Stripe", "data": { "successful": 10, "failed": 0, "total": 10 } } ``` --- #### `GET /templates/sync-status` Checks template-Stripe sync status. **Response (200):** ```json { "code": 200, "message": "Sync status retrieved", "data": { "totalTemplates": 10, "withStripeProduct": 8, "activeTemplates": 9, "needsSync": 1, "templates": [ { "code": "template_001", "name": "Template Name", "isActive": true, "hasStripeProduct": true, "lastStripeSyncAt": "2024-01-01T00:00:00Z" } ] } } ``` --- #### `GET /templates/verify-sync/:code` Verifies template Stripe sync status. **Path Parameters:** - `code`: Template code **Response (200):** ```json { "code": 200, "message": "Template sync verified successfully", "data": { "templateCode": "template_001", "synced": true, "issues": [], "stripeProductId": "prod_xxx", "stripePriceId": "price_xxx", "recommendations": ["Template is properly synced with Stripe"] } } ``` --- #### `GET /templates/diagnose-stripe` Diagnoses Stripe environment and configuration. **Response (200):** ```json { "code": 200, "message": "Stripe environment is healthy", "data": { "environment": "test", "apiKeyValid": true, "issues": [], "accountInfo": { "chargesEnabled": true, "country": "US" }, "recommendations": ["Stripe configuration appears healthy"] } } ``` --- #### `GET /templates/health` Template service health check. **Response (200):** ```json { "code": 200, "message": "Template service is healthy", "data": { "totalTemplates": 10, "timestamp": "2024-01-01T00:00:00Z", "service": "TemplateService" } } ``` --- #### `GET /templates/init` Initializes templates from JSON data. **Response (200):** ```json { "code": 200, "message": "Templates initialization completed", "data": { "total": 10, "imported": 9, "failed": 1, "details": [ { "code": "template_001", "status": "success" }, { "code": "template_002", "status": "error", "error": "Template already exists" } ] } } ``` --- #### `POST /templates/test/create` Creates a test template for development. **Response (200):** ```json { "code": 200, "message": "Test template created successfully", "data": { "code": "test-image-generation", "stripeProductId": "prod_test", "stripePriceId": "price_test" } } ``` --- ## Error Responses All endpoints return standardized error responses: **Error Response Format:** ```json { "code": 400, "message": "Error description", "timestamp": "2024-01-01T00:00:00Z", "traceId": "trace_123" } ``` **Common HTTP Status Codes:** - `200` - Success - `400` - Bad Request (validation errors, missing parameters) - `401` - Unauthorized (missing or invalid authentication) - `404` - Not Found (resource not found) - `500` - Internal Server Error (server-side errors) ## Rate Limiting API endpoints may be subject to rate limiting. Check response headers for rate limit information: - `X-RateLimit-Limit`: Requests per time window - `X-RateLimit-Remaining`: Remaining requests in current window - `X-RateLimit-Reset`: Time when rate limit resets ## Data Types ### Template Types - `IMAGE` - Image generation templates - `VIDEO` - Video generation templates ### Payment Status - `pending` - Payment initiated but not completed - `completed` - Payment successfully processed - `failed` - Payment failed - `cancelled` - Payment cancelled by user - `refunded` - Payment refunded ### Task Status - `pending` - Task queued but not started - `running` - Task currently executing - `completed` - Task finished successfully - `failed` - Task failed with error ### Refund Reasons - `user_request` - User requested refund - `technical_issue` - Technical problem occurred - `duplicate` - Duplicate payment - `fraudulent` - Fraudulent transaction