spicyapi文件
主要內容

模型目錄與 Schema

從已認證的即時目錄選擇可呼叫模型,並按目前 JSON Schema 建構請求。

createTask.model 必須使用已認證 GET /api/v1/models 回應回傳的精確 model 值。input 則由同一條目的目前 inputSchema 定義。只有該執行時回應能證明一個 ID 目前可呼叫。

不要從靜態頁面複製模型 ID

首發快照、系列頁和模型出品方目錄只用於發現能力,可能包含規劃中、已停用或已改名的條目。即時目錄為空時,不能拿這些靜態來源頂替。建立付費任務前必須讀取已認證目錄,並同時要求 enabled: trueavailable: true

同時選擇模型與已驗證輸入

不同模型的請求 Schema 不同。可執行的安全路徑應從即時目錄裡把模型 ID 與伺服器端已驗證的範例輸入一起選出來:

const response = await fetch(
  'https://api.spicyapi.ai/api/v1/models?includeSchema=1&includeExamples=1',
  { headers: { Authorization: `Bearer ${process.env.SPICY_API_KEY}` } },
);
const envelope = await response.json();
if (!response.ok || envelope.code !== 200) throw new Error(envelope.msg);

const selected = envelope.data.items.find(
  (item) => item.enabled && item.available && item.examples?.length,
);
if (!selected) throw new Error('No callable model with a validated example');

const createTaskBody = {
  model: selected.model,
  input: selected.examples[0].input,
};

當某個 inputSchema 暴露條件分支時,以根節點的 anyOf(各分支只含 required,「至少給一個」)與 allOfifthen,「給了 A 就必須給 B」)確定欄位組合,不要憑模型系列猜測。不會出現 oneOf / not / dependentSchemas。新端點遵循 Spicy Schema 的 canonical fields;歷史端點以即時 Schema 為準。

程式化讀取目錄

GET /api/v1/models
GET /api/v1/models/{model}
curl "https://api.spicyapi.ai/api/v1/models?modality=video&includeSchema=1&includeExamples=1" \
  -H "Authorization: Bearer $SPICY_API_KEY"
參數說明
modalityimage video audio text
provider精確模型出品方識別碼,只描述模型的作者或機構
task精確任務,如 image-to-video
search最長 128 字元
includeSchematrue / 1 時帶回 inputSchema
includeExamplestrue / 1 時帶回已通過目前 Schema 驗證的範例

/models/{model} 裡的斜線屬於模型識別碼時,需按用戶端要求做 URL 編碼。

用戶端應讀的欄位

欄位用途
family穩定系列識別碼,用於頁面聚合
tasks系列支援的任務集合
inputSchemaJSON Schema 2020-12,用於建構表單與驗證請求
pricing / startingPrice此帳號目前的價格,金額為 USD 字串
quantityField計費數量欄位;新影片端點通常為 duration_seconds,始終以目錄為準
maxOutputDurationSeconds該模型能生成的最長輸出時長,取自 Schema 裡 duration_secondsmaximum;沒宣告上限時不回傳。它不是 taskTimeoutSeconds——後者是平台的執行逾時
enabled目錄條目是否已允許 API 使用
available目前是否存在可用 deployment
examples已通過目前 Schema 驗證的輸入;僅在請求時回傳
version / updatedAt目錄快取失效與變更追蹤

目錄回應可私有快取 60 秒,不要做公共 CDN 快取,因為價格包含帳號分組倍率。

Schema 與 Playground 的共同規則

inputSchema 使用 JSON Schema 2020-12。標準關鍵字決定伺服器端驗證;欄位內的 x-ui 物件只描述 Playground 的排序、顯示方式和重新報價提示。用戶端必須忽略未知的展示用擴充鍵,它們不能替代 requiredenum、範圍或條件分支。完整規則見 Spicy Schema

自己渲染逐模型的參數列

本站不提供逐模型的參數列。原因不是省事:模型與欄位每週都在變,任何靜態副本都會漂移,而讀到過期參數的代價是 400 或算錯價。參數只有一個來源,就是目錄回傳的 inputSchema——Playground 渲染的是同一份,SDK 驗證的也是同一份。

一份 Schema 裡各部分該顯示成什麼

Schema 裡的東西參數列裡顯示成
properties 的鍵參數名。欄位名跨模型統一,同一語義在所有模型裡都叫同一個名字
required 是否含該鍵必填 / 選填
anyOf / allOf條件必填。anyOf = 這幾個裡至少給一個;allOfifthen = 給了 A 就必須給 B
type型別
description參數說明。它是英文散文,可以原樣展示,不需要你另寫一份
enum允許的值。若同時有 x-ui.enum_labels,用它把取值翻成給人看的文字
minimum / maximum取值區間;x-ui.step 是步進,x-ui.unit 是單位字尾(s / px
default預設值。不傳就是它
x-ui.order排序依據,數值大的在前。不要按 properties 的鍵順序排,JSON 物件的鍵順序不是契約
x-ui.primary置頂顯示的主輸入
x-ui.advanced可以預設摺疊的進階參數
x-ui.affects_price標一個「會改價格」的記號;改這個值需要重新報價
x-ui.widget要做成可填的表單時,用它決定控制項(13 個取值見 Spicy Schema

取資料

const res = await fetch(
  'https://api.spicyapi.ai/api/v1/models/seedance%2F2.5%2Fimage-to-video?includeSchema=1&includeExamples=1',
  { headers: { Authorization: `Bearer ${process.env.SPICY_API_KEY}` } },
);
const { data } = await res.json();
const schema = data.inputSchema;

const rows = Object.entries(schema.properties)
  .sort(([, a], [, b]) => (b['x-ui']?.order ?? 0) - (a['x-ui']?.order ?? 0))
  .map(([name, prop]) => ({
    name,
    required: (schema.required ?? []).includes(name),
    type: prop.type,
    description: prop.description,
    values: prop.enum
      ? prop.enum.map((v) => prop['x-ui']?.enum_labels?.[v] ?? v)
      : prop.minimum !== undefined
        ? [`${prop.minimum}–${prop.maximum}${prop['x-ui']?.unit ?? ''}`]
        : [],
    default: prop.default,
    affectsPrice: prop['x-ui']?.affects_price === true,
    advanced: prop['x-ui']?.advanced === true,
  }));

includeExamples=1 會額外帶回 examples:每條都是伺服器端按目前 Schema 驗證過的完整輸入,可以直接當「最小可執行範例」貼進文件,也可以直接提交。比自己拼一個更安全——自己拼的範例會隨 Schema 變化而失效,examples 不會。

同一段程式碼換個 model 就能涵蓋任何模型,也不會因為我們上架新模型而過期。要一次產生全站參數列,把 GET /api/v1/models?includeSchema=1items 迴圈一遍即可;目錄回應可私有快取 60 秒,並依 version / updatedAt 讓快取失效。

本頁目錄