串接文件
這裡的 API 跟 Anthropic、OpenAI、Gemini 的官方格式相同。官方 SDK 和文件可以照用,只要改兩個地方:Base URL 跟金鑰。
Base URL 與金鑰
| 項目 | 值 |
|---|---|
| Base URL | https://api.cortapi.com |
| OpenAI SDK 用的 Base URL | https://api.cortapi.com/v1 |
| 金鑰 | 到控制台的 API 金鑰頁建立,格式為 sk- 開頭 |
OpenAI SDK 的 base_url 要加上 /v1;Anthropic SDK 和 Gemini 不用加,SDK 會自己補上路徑。
驗證方式
以下三種 Header 都可以帶金鑰,依你用的 API 格式選一種:
| 格式 | Header |
|---|---|
| Anthropic | x-api-key: sk-你的金鑰 |
| OpenAI | Authorization: Bearer sk-你的金鑰 |
| Gemini | x-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 {{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": "用一句話介紹你自己"}]
}'
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 格式呼叫,系統會自動轉換格式。
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)
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 {{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 {{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 是暫時性的網址,請下載後自行保存。
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
}| 參數 | 可以填 | 預設 |
|---|---|---|
model | dreamina-seedance-2-0-fast、dreamina-seedance-2-5、seedance-1-0-pro | 必填 |
content | 一段文字(2000 字內),可再加圖片 | 必填 |
ratio | 1:1 3:4 4:3 9:16 16:9 21:9 | 16:9 |
duration | 5 或 10(參考圖模式只能 5) | 5 |
- 首幀:1 張,
role寫first_frame。參考圖:1~9 張,每張role寫reference_image,只能 5 秒。兩種不能混用。 - 圖片格式 PNG、JPEG、WebP;每張 10 MB 以內,全部加起來 20 MB 以內。
- 輸出固定 720p(1280×720)、有聲音。其他沒列出的參數(例如
seed、watermark)會回 400。
2. 查進度
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 天,請下載後自行保存。
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:
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 填金鑰 |
| Cursor | Settings › Models,打開 Override OpenAI Base URL,填 https://api.cortapi.com/v1 |
| Cherry Studio、LobeChat 等 | 新增「OpenAI 相容」供應商,Base URL 填 https://api.cortapi.com/v1 |
查詢餘額與用量
用金鑰本身就能查詢該金鑰的用量,方便寫進自己的監控腳本:
curl {{BASE}}/v1/usage -H "Authorization: Bearer {{KEY}}"完整的逐筆明細請到控制台的用量頁查看。
錯誤碼
| 狀態碼 | 原因 | 處理方式 |
|---|---|---|
| 401 | 金鑰錯誤、已停用或已刪除 | 到控制台確認金鑰狀態,或建立新的金鑰 |
| 402/403 | 餘額不足,或金鑰額度用完 | 儲值,或調高該金鑰的額度上限 |
| 404 | 路徑錯誤,或 model 名稱不存在 | 檢查 Base URL 是否多了或少了 /v1,並對照模型列表 |
| 429 | 超過速率或並發限制 | 降低請求頻率,或稍候再重試 |
| 5xx | 上游服務暫時異常 | 稍候重試;持續發生請來信 |