{
  "openapi": "3.1.0",
  "info": {
    "title": "sora-2-pro-remix Interface",
    "description": "Create high-quality secondary creations based on videos already generated on EvoLink, making variations and remixes to original videos through video IDs, supporting higher quality output",
    "license": {
      "name": "MIT"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.evolink.ai",
      "description": "Production environment"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/v1/videos/generations": {
      "post": {
        "summary": "sora-2-pro-remix Interface",
        "description": "- Sora 2 Pro Remix (sora-2-pro-remix) model supports high-quality secondary creation based on videos generated or remixed by Sora2/Sora2Pro\n- Make variations to videos by inputting original video ID and prompt\n- Supports standard and high quality output modes\n- Asynchronous processing mode, use the returned task ID to [query](/en/api-manual/task-management/get-task-detail)\n- Generated video links are valid for 24 hours, please save them promptly\n\n**Note:**\n- Requires video ID generated or remixed by Sora2/Sora2Pro as the base\n- Sora2 Pro Remix's content moderation mechanism is very strict, tasks may fail due to this",
        "operationId": "createVideoGeneration",
        "tags": [
          "Video Generation"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VideoGenerationRequest"
              },
              "examples": {
                "text_to_video": {
                  "summary": "Video Remix",
                  "value": {
                    "model": "sora-2-pro-remix",
                    "base_video_task_id": "task-unified-1757169743-7cvnl5zw",
                    "prompt": "add a dog"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Video generation task created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VideoGenerationResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 400,
                    "message": "Invalid duration parameter",
                    "type": "invalid_request_error",
                    "param": "duration",
                    "fallback_suggestion": "use duration between 1-12 seconds"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized, invalid or expired token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 401,
                    "message": "Invalid or expired token",
                    "type": "authentication_error"
                  }
                }
              }
            }
          },
          "402": {
            "description": "Insufficient quota, recharge required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 402,
                    "message": "Insufficient quota",
                    "type": "insufficient_quota_error",
                    "fallback_suggestion": "https://evolink.ai/dashboard/billing"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Access denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 403,
                    "message": "Access denied for this model",
                    "type": "permission_error",
                    "param": "model"
                  }
                }
              }
            }
          },
          "404": {
            "description": "Resource not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 404,
                    "message": "Specified model not found",
                    "type": "not_found_error",
                    "param": "model",
                    "fallback_suggestion": "sora-2-pro-remix"
                  }
                }
              }
            }
          },
          "413": {
            "description": "Request entity too large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 413,
                    "message": "Image file too large",
                    "type": "request_too_large_error",
                    "param": "image_urls",
                    "fallback_suggestion": "compress image to under 4MB"
                  }
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 429,
                    "message": "Rate limit exceeded",
                    "type": "rate_limit_error",
                    "fallback_suggestion": "retry after 60 seconds"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 500,
                    "message": "Internal server error",
                    "type": "internal_server_error",
                    "fallback_suggestion": "try again later"
                  }
                }
              }
            }
          },
          "502": {
            "description": "Upstream service error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 502,
                    "message": "Upstream AI service unavailable",
                    "type": "upstream_error",
                    "fallback_suggestion": "try different model"
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service temporarily unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": {
                    "code": 503,
                    "message": "Service temporarily unavailable",
                    "type": "service_unavailable_error",
                    "fallback_suggestion": "retry after 30 seconds"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "VideoGenerationRequest": {
        "type": "object",
        "required": [
          "model",
          "base_video_task_id",
          "prompt"
        ],
        "properties": {
          "model": {
            "type": "string",
            "description": "Video generation model name",
            "default": "sora-2-pro-remix",
            "example": "sora-2-pro-remix"
          },
          "base_video_task_id": {
            "type": "string",
            "description": "Original video task ID, must be a video task ID generated or remixed by Sora2/Sora2Pro",
            "example": "task-unified-1757169743-7cvnl5zw"
          },
          "prompt": {
            "type": "string",
            "description": "Prompt describing what kind of video to generate, limited to 2000 tokens",
            "example": "A cat playing piano",
            "maxLength": 2000
          },
          "aspect_ratio": {
            "type": "string",
            "description": "Video aspect ratio, `16:9` generates landscape video, `9:16` generates portrait video",
            "enum": [
              "16:9",
              "9:16"
            ],
            "example": "16:9"
          },
          "duration": {
            "type": "integer",
            "description": "Specifies the generated video duration (seconds), default is `15`, representing `15 seconds`\n\n**Note:**\n- Currently only supports `15`, `25` values, representing `15 seconds`, `25 seconds`\n- Billing is based on the `duration` value, higher duration costs more",
            "example": 15
          },
          "remove_watermark": {
            "type": "boolean",
            "description": "Whether to remove video watermark, by default it will be removed\n\n**Note:**\n- `true`: Remove watermark, this is the default value\n- `false`: Keep watermark",
            "example": true
          },
          "quality": {
            "type": "string",
            "description": "Video quality, default is `standard`\n\n**Note:**\n- `standard`: Standard quality, standard pricing\n- `high`: High quality, higher pricing\n- Currently only supports `high` quality when duration is `15`",
            "enum": [
              "standard",
              "high"
            ],
            "example": "standard"
          },
          "callback_url": {
            "type": "string",
            "description": "HTTPS callback address after task completion\n\n**Callback Timing:**\n- Triggered when task is completed, failed, or cancelled\n- Sent after billing confirmation is completed\n\n**Security Restrictions:**\n- Only HTTPS protocol is supported\n- Callback to internal IP addresses is prohibited (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)\n- URL length must not exceed `2048` characters\n\n**Callback Mechanism:**\n- Timeout: `10` seconds\n- Maximum `3` retries on failure (retries after `1` second/`2` seconds/`4` seconds)\n- Callback response body format is consistent with the task query API response format\n- Callback address returning 2xx status code is considered successful, other status codes will trigger retry",
            "format": "uri",
            "example": "https://your-domain.com/webhooks/video-task-completed"
          }
        }
      },
      "VideoGenerationResponse": {
        "type": "object",
        "properties": {
          "created": {
            "type": "integer",
            "description": "Task creation timestamp",
            "example": 1757169743
          },
          "id": {
            "type": "string",
            "description": "Task ID",
            "example": "task-unified-1757169743-7cvnl5zw"
          },
          "model": {
            "type": "string",
            "description": "Actual model name used",
            "example": "sora-2-pro-remix"
          },
          "object": {
            "type": "string",
            "enum": [
              "video.generation.task"
            ],
            "description": "Specific task type"
          },
          "progress": {
            "type": "integer",
            "description": "Task progress percentage (0-100)",
            "minimum": 0,
            "maximum": 100,
            "example": 0
          },
          "status": {
            "type": "string",
            "description": "Task status",
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed"
            ],
            "example": "pending"
          },
          "task_info": {
            "$ref": "#/components/schemas/VideoTaskInfo",
            "description": "Video task detailed information"
          },
          "type": {
            "type": "string",
            "enum": [
              "text",
              "image",
              "audio",
              "video"
            ],
            "description": "Task output type",
            "example": "video"
          },
          "usage": {
            "$ref": "#/components/schemas/VideoUsage",
            "description": "Usage and billing information"
          }
        }
      },
      "VideoTaskInfo": {
        "type": "object",
        "properties": {
          "can_cancel": {
            "type": "boolean",
            "description": "Whether the task can be cancelled",
            "example": true
          },
          "estimated_time": {
            "type": "integer",
            "description": "Estimated completion time (seconds)",
            "minimum": 0,
            "example": 300
          },
          "video_duration": {
            "type": "integer",
            "description": "Video duration (seconds)",
            "example": 9
          }
        }
      },
      "VideoUsage": {
        "type": "object",
        "description": "Usage and billing information",
        "properties": {
          "billing_rule": {
            "type": "string",
            "description": "Billing rule",
            "enum": [
              "per_call",
              "per_token",
              "per_second"
            ],
            "example": "per_call"
          },
          "credits_reserved": {
            "type": "number",
            "description": "Estimated credits consumed",
            "minimum": 0,
            "example": 7
          },
          "user_group": {
            "type": "string",
            "description": "User group category",
            "example": "default"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer",
                "description": "HTTP status error code"
              },
              "message": {
                "type": "string",
                "description": "Error description",
                "example": "Invalid request parameters"
              },
              "type": {
                "type": "string",
                "description": "Error type",
                "example": "invalid_request_error"
              },
              "param": {
                "type": "string",
                "description": "Related parameter name",
                "example": "model"
              },
              "fallback_suggestion": {
                "type": "string",
                "description": "Suggestion for error resolution",
                "example": "sora-2-pro-remix"
              }
            }
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "##All APIs require Bearer Token authentication##\n\n**Get API Key:**\n\nVisit [API Key Management Page](https://evolink.ai/dashboard/keys) to get your API Key\n\n**Add to request header when using:**\n```\nAuthorization: Bearer YOUR_API_KEY\n```"
      }
    }
  },
  "tags": [
    {
      "name": "Video Generation",
      "description": "AI video generation related APIs"
    }
  ]
}