串接文件

這裡的 API 跟 Anthropic、OpenAI、Gemini 的官方格式相同。官方 SDK 和文件可以照用,只要改兩個地方:Base URL 跟金鑰。

Base URL 與金鑰

項目值
Base URLhttps://api.cortapi.com
OpenAI SDK 用的 Base URLhttps://api.cortapi.com/v1
金鑰到控制台的 API 金鑰頁建立,格式為 sk- 開頭

OpenAI SDK 的 base_url 要加上 /v1;Anthropic SDK 和 Gemini 不用加,SDK 會自己補上路徑。

驗證方式

以下三種 Header 都可以帶金鑰,依你用的 API 格式選一種:

格式Header
Anthropicx-api-key: sk-你的金鑰
OpenAIAuthorization: Bearer sk-你的金鑰
Geminix-goog-api-key: sk-你的金鑰

金鑰只放在伺服器端或你自己電腦的環境變數,不要寫進前端網頁或公開的程式碼庫。

可用模型與分組

每把金鑰屬於一個「分組」,分組決定這把金鑰能用哪些模型。在控制台的 API 金鑰頁建立金鑰時選擇分組。建議選「Cortapi All」(建立金鑰時在「其他」分頁):一把金鑰就能用下表全部模型,系統依 model 參數自動分流。

分組用途model 參數
Cortapi All 或 MiniMax文字對話MiniMax-M3
Cortapi All 或 Image圖片生成gpt-image-1、gpt-image-1.5、gpt-image-2、dall-e-3、doubao-seedream-5-0-260128、flux-1.1-pro、qwen-image-3.0、z-image-turbo 等
Cortapi All 或 Image影片生成dreamina-seedance-2-0-fast、dreamina-seedance-2-5、seedance-1-0-pro

MiniMax-M3 的回應會把思考過程放在內容開頭的 <think>…</think> 區段,顯示給使用者前請先移除。

Anthropic Messages

端點:POST /v1/messages,參數與回應跟 Anthropic 官方 Messages API 相同。

curl
curl {{BASE}}/v1/messages \
  -H "x-api-key: {{KEY}}" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "用一句話介紹你自己"}]
  }'
Python
import anthropic

client = anthropic.Anthropic(base_url="{{BASE}}", api_key="{{KEY}}")

msg = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "用一句話介紹你自己"}],
)
print(msg.content[0].text)

OpenAI Chat Completions/Responses

端點:POST /v1/chat/completions 和 POST /v1/responses。Claude 模型也可以用 Chat Completions 格式呼叫,系統會自動轉換格式。

Python
from openai import OpenAI

client = OpenAI(base_url="{{BASE}}/v1", api_key="{{KEY}}")

resp = client.chat.completions.create(
    model="gpt-5.6",
    messages=[{"role": "user", "content": "用一句話介紹你自己"}],
)
print(resp.choices[0].message.content)
Node.js
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "{{BASE}}/v1", apiKey: "{{KEY}}" });

const resp = await client.responses.create({
  model: "gpt-5.6",
  input: "用一句話介紹你自己",
});
console.log(resp.output_text);

Gemini

端點:POST /v1beta/models/{model}:generateContent,串流用 :streamGenerateContent。

curl
curl {{BASE}}/v1beta/models/gemini-3.7-flash:generateContent \
  -H "x-goog-api-key: {{KEY}}" \
  -H "content-type: application/json" \
  -d '{"contents": [{"parts": [{"text": "用一句話介紹你自己"}]}]}'

串流輸出

跟官方用法一樣:Anthropic 和 OpenAI 格式在請求裡加 "stream": true,回應會以 Server-Sent Events 逐段傳回。如果你在自己的伺服器前面架了 Nginx,記得關掉 proxy buffering,否則會等全部生成完才一次送出。

圖片生成

端點:POST /v1/images/generations,格式與 OpenAI Images API 相同。使用 Cortapi All(或 Image)分組的金鑰。

curl
curl {{BASE}}/v1/images/generations \
  -H "Authorization: Bearer {{KEY}}" \
  -H "content-type: application/json" \
  -d '{
    "model": "gpt-image-1",
    "prompt": "一隻狼從泥地裡抬起頭,電影感特寫",
    "size": "1024x1024",
    "n": 1
  }'

回應的 data[0] 會是 b64_json(圖片的 base64)或 url(圖片網址),依模型而定,兩種都要處理。url 是暫時性的網址,請下載後自行保存。

Python
import base64, urllib.request
from openai import OpenAI

client = OpenAI(base_url="{{BASE}}/v1", api_key="{{KEY}}")
img = client.images.generate(model="gpt-image-1", prompt="一隻狼從泥地裡抬起頭", size="1024x1024").data[0]
if img.b64_json:
    open("out.png", "wb").write(base64.b64decode(img.b64_json))
else:
    urllib.request.urlretrieve(img.url, "out.png")

影片生成

影片是非同步任務:送出任務 → 每 10~20 秒查一次進度 → 完成後下載。一支通常 2~5 分鐘。使用 Cortapi All(或 Image)分組的金鑰。

1. 送出任務

端點:POST /api/v3/contents/generations/tasks,Content-Type 必須是 application/json。

文字生影片
curl {{BASE}}/api/v3/contents/generations/tasks \
  -H "Authorization: Bearer {{KEY}}" \
  -H "content-type: application/json" \
  -d '{
    "model": "dreamina-seedance-2-0-fast",
    "content": [{"type": "text", "text": "一隻貓在公園溜滑板,電影感"}],
    "ratio": "16:9",
    "duration": 5
  }'

回應:{"id": "cgt-20261008085328-01f00516"},記下這個 id。

帶圖片時,把圖片轉成 base64 放進 content(不收圖片網址,請先下載再轉 base64):

首幀圖片+文字
{
  "model": "dreamina-seedance-2-0-fast",
  "content": [
    {"type": "text", "text": "紅球在草地上往右滾動"},
    {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}, "role": "first_frame"}
  ],
  "duration": 5
}
參數可以填預設
modeldreamina-seedance-2-0-fast、dreamina-seedance-2-5、seedance-1-0-pro必填
content一段文字(2000 字內),可再加圖片必填
ratio1:1 3:4 4:3 9:16 16:9 21:916:9
duration5 或 10(參考圖模式只能 5)5

2. 查進度

curl
curl {{BASE}}/api/v3/contents/generations/tasks/cgt-20261008085328-01f00516 \
  -H "Authorization: Bearer {{KEY}}"
status意思
queued排隊中
running生成中
succeeded完成,content.video_url 可以下載
failed失敗,看 error.code;retryable: true 的可以直接重送

3. 下載影片

完成後用 content.video_url 下載,不用帶金鑰。網址 24 小時內有效,過期再查一次任務就會拿到新網址;影片檔保留 30 天,請下載後自行保存。

Python:送出、等待、下載
import time, requests

BASE, KEY = "{{BASE}}", "{{KEY}}"
H = {"Authorization": f"Bearer {KEY}"}

task = requests.post(f"{BASE}/api/v3/contents/generations/tasks", headers=H, json={
    "model": "dreamina-seedance-2-0-fast",
    "content": [{"type": "text", "text": "一隻貓在公園溜滑板,電影感"}],
    "ratio": "16:9", "duration": 5,
}).json()

while True:
    t = requests.get(f"{BASE}/api/v3/contents/generations/tasks/{task['id']}", headers=H).json()
    if t["status"] in ("succeeded", "failed", "cancelled"):
        break
    time.sleep(15)

if t["status"] == "succeeded":
    open("out.mp4", "wb").write(requests.get(t["content"]["video_url"]).content)
else:
    print("失敗:", t.get("error"))

影片產能有限:目前一天約可生成 60 支、同時最多 3 支,超過時送出任務會收到 503,請照回應的 Retry-After 稍後再送。

Claude Code

設定兩個環境變數後直接執行 claude。想要永久生效,就把這兩行加到 ~/.zshrc。

終端機
export ANTHROPIC_BASE_URL="{{BASE}}"
export ANTHROPIC_AUTH_TOKEN="{{KEY}}"
claude

用 vim 寫進設定檔:執行 vim ~/.zshrc,按 i 進入編輯、貼上前兩行,按 Esc 後輸入 :wq 存檔離開,再執行 source ~/.zshrc。

Codex CLI

編輯 ~/.codex/config.toml:

~/.codex/config.toml
model = "gpt-5.6"
model_provider = "cortapi"

[model_providers.cortapi]
name = "Cortapi"
base_url = "{{BASE}}/v1"
wire_api = "responses"
env_key = "CORTAPI_API_KEY"

再設定金鑰環境變數,之後照常執行 codex:

終端機
export CORTAPI_API_KEY="{{KEY}}"

其他工具

只要工具能自訂 OpenAI 或 Anthropic 的 Base URL,就能接。常見的設定位置:

工具設定方式
Gemini CLI環境變數 GOOGLE_GEMINI_BASE_URL 填 Base URL,GEMINI_API_KEY 填金鑰
CursorSettings › Models,打開 Override OpenAI Base URL,填 https://api.cortapi.com/v1
Cherry Studio、LobeChat 等新增「OpenAI 相容」供應商,Base URL 填 https://api.cortapi.com/v1

查詢餘額與用量

用金鑰本身就能查詢該金鑰的用量,方便寫進自己的監控腳本:

curl
curl {{BASE}}/v1/usage -H "Authorization: Bearer {{KEY}}"

完整的逐筆明細請到控制台的用量頁查看。

錯誤碼

狀態碼原因處理方式
401金鑰錯誤、已停用或已刪除到控制台確認金鑰狀態,或建立新的金鑰
402/403餘額不足,或金鑰額度用完儲值,或調高該金鑰的額度上限
404路徑錯誤,或 model 名稱不存在檢查 Base URL 是否多了或少了 /v1,並對照模型列表
429超過速率或並發限制降低請求頻率,或稍候再重試
5xx上游服務暫時異常稍候重試;持續發生請來信