Sora Pro 创建并产出 - TimRouter API 中转端点

POST https://api.timrouter.com/v1/video/create 即刻调试 →
Authorization

在发起请求头中加入配置项 Authorization,其值为 Bearer 之后拼接 Token

用例: Authorization: Bearer ********************

入参配置

发起请求头配置项
Content-Type string
必须传入
用例: application/json
Accept string
必须传入
用例: application/json
Authorization string
非必须传入
用例: Bearer {{YOUR_API_KEY}}
发起请求体配置项 application/json
images array[string]
非必须传入
图片链接 必须传入
model string
非必须传入
模型名字 必须传入
orientation string
必须传入
portrait 竖屏 landscape 横屏
prompt string
非必须传入
提示词 必须传入
size string
必须传入
large 高清1080p
duration integer
非必须传入
全面支持 15,25 必须传入
watermark boolean
必须传入
默认为: true 会优先无水印,如果出错,会兜底到有水印 传递 false 的话 会强制让视频无水印,遇到去水印错误的会一直自动重试
private boolean
必须传入
是否隐藏视频,true-视频不会发布,同时视频无法进行 remix(二次编辑), 默认为 false { "images": [], "model": "sora-2-pro", "orientation": "portrait", "prompt": "make animate", "size": "large", "duration": 15, "watermark": false, "private": true } 发起请求
用例
{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}

发起调用代码用例

curl --location --request POST 'https://api.timrouter.com/v1/video/create' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}'
var myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Authorization", "Bearer YOUR_API_KEY");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
});

var requestOptions = {
   method: 'POST',
   headers: myHeaders,
   body: raw,
   redirect: 'follow'
};

fetch("https://api.timrouter.com/v1/video/create", requestOptions)
   .then(response => response.text())
   .then(result => console.log(result))
   .catch(error => console.log('error', error));
import java.io.*;
import java.net.*;
import java.util.*;

URL url = new URL("https://api.timrouter.com/v1/video/create");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Authorization", "Bearer YOUR_API_KEY");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
String jsonInputString = "{
    \"images\": [],
    \"model\": \"sora-2-pro\",
    \"orientation\": \"portrait\",
    \"prompt\": \"make animate\",
    \"size\": \"large\",
    \"duration\": 15,
    \"watermark\": false,
    \"private\": true
}";
try(OutputStream os = conn.getOutputStream()) {
    byte[] input = jsonInputString.getBytes("utf-8");
    os.write(input, 0, input.length);
}
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);
import Foundation

let urlString = "https://api.timrouter.com/v1/video/create"
guard let url = URL(string: urlString) else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("Bearer YOUR_API_KEY", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let httpBody = "{
    \"images\": [],
    \"model\": \"sora-2-pro\",
    \"orientation\": \"portrait\",
    \"prompt\": \"make animate\",
    \"size\": \"large\",
    \"duration\": 15,
    \"watermark\": false,
    \"private\": true
}"
request.httpBody = httpBody.data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data {
        print(String(data: data, encoding: .utf8)!)
    }
}
task.resume()
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    body := strings.NewReader(`{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}`)
    req, _ := http.NewRequest("POST", "https://api.timrouter.com/v1/video/create", body)
    req.Header.Set("Accept", "application/json")
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")
    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    bodyBytes, _ := io.ReadAll(resp.Body)
    fmt.Println(string(bodyBytes))
}
<?php

$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://api.timrouter.com/v1/video/create',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => '{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}',
  CURLOPT_HTTPHEADER => array(
    "Accept: application/json",
    "Authorization: Bearer YOUR_API_KEY",
    "Content-Type: application/json",
  ),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import json

conn = http.client.HTTPSConnection("api.timrouter.com")
payload = json.dumps({
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
})
headers = {
   'Accept': 'application/json',
   'Authorization': 'Bearer YOUR_API_KEY',
   'Content-Type': 'application/json',
}
conn.request("POST", "/v1/video/create", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
POST https://api.timrouter.com/v1/video/create HTTP/1.1
Accept: application/json
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.timrouter.com/v1/video/create");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer YOUR_API_KEY");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{
    \"images\": [],
    \"model\": \"sora-2-pro\",
    \"orientation\": \"portrait\",
    \"prompt\": \"make animate\",
    \"size\": \"large\",
    \"duration\": 15,
    \"watermark\": false,
    \"private\": true
}");
CURLcode ret = curl_easy_perform(hnd);
var client = new RestClient("https://api.timrouter.com/v1/video/create");
var request = new RestRequest(Method.POST);
request.AddHeader("Accept", "application/json");
request.AddHeader("Authorization", "Bearer YOUR_API_KEY");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", @"{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
#import <Foundation/Foundation.h>

NSURL *url = [NSURL URLWithString:@"https://api.timrouter.com/v1/video/create"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"Bearer YOUR_API_KEY" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[@"{
    \"images\": [],
    \"model\": \"sora-2-pro\",
    \"orientation\": \"portrait\",
    \"prompt\": \"make animate\",
    \"size\": \"large\",
    \"duration\": 15,
    \"watermark\": false,
    \"private\": true
}" dataUsingEncoding:NSUTF8StringEncoding]];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
[task resume];
require "uri"
require "net/http"
require "json"

url = URI("https://api.timrouter.com/v1/video/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept"] = "application/json"
request["Authorization"] = "Bearer YOUR_API_KEY"
request["Content-Type"] = "application/json"
request.body = '{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}'
response = http.request(request)
puts response.read_body
(* Requires cohttp and lwt *)

let url = "https://api.timrouter.com/v1/video/create" in
let headers = Cohttp.Header.of_list [
  ("Accept", "application/json");
  ("Authorization", "Bearer YOUR_API_KEY");
  ("Content-Type", "application/json");
] in
let body = Cohttp_lwt.Body.of_string '{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}' in
Lwt_main.run (
  Cohttp_lwt_unix.Client.request ?body:(Some body) ~method_:`POST ~headers (Uri.of_string url)
  >>= fun (resp, body) ->
  Cohttp_lwt.Body.to_string body >|= fun s -> print_endline s
)
import 'package:http/http.dart' as http;
import 'dart:convert';

var headers = {
  "Accept": "application/json",
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json",
};
var body = json.encode({
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
});
var response = await http.post(Uri.parse("https://api.timrouter.com/v1/video/create"), headers: headers, body: body);
print(response.body);
library(httr)

url <- "https://api.timrouter.com/v1/video/create"
body <- '{
    "images": [],
    "model": "sora-2-pro",
    "orientation": "portrait",
    "prompt": "make animate",
    "size": "large",
    "duration": 15,
    "watermark": false,
    "private": true
}'
response <- post(url, body = body, add_headers("Accept" = "application/json", "Authorization" = "Bearer YOUR_API_KEY", "Content-Type" = "application/json"))
content(response, "text", encoding = "UTF-8")

端点响应

输出参数详细说明 🟢 200 OK · application/json
id string
必须传入
object string
必须传入
created integer
必须传入
choices array [object]
必须传入
index integer
非必须传入
message object
非必须传入
finish_reason string
非必须传入
usage object
必须传入
prompt_tokens integer
必须传入
completion_tokens integer
必须传入
total_tokens integer
必须传入
{ "id": "sora-2:task_01k9009g8ef1esae6388chgcpx", "status": "pending", "status_update_time": 1762010645686 }
用例
{
    "id": "sora-2:task_01k9009g8ef1esae6388chgcpx",
    "status": "pending",
    "status_update_time": 1762010645686
}