spicyapi文件
主要內容

計費

現金計價,凍結與結算怎麼走,失敗為什麼一定釋放,以及消費上限有哪幾層。

現金計價,不是點數

價格直接以美元標註:「每張圖 $0.008」「每輸出秒 $0.042」。預付資金、贈金與授信都以美元計量,但授信上限並不是現金餘額。

不用點數是刻意的:點數制會在「儲多少送多少」和「一點值多少錢」之間製造一層換算,讓你算不清真實成本。你看到的價就是你付的價。

API 回傳的金額是字串,但不帶 $

「$0.008」是這一頁給人看的寫法。介面回傳的是不帶貨幣符號的十進位字串estimatedCostcost、以及餘額的三個欄位都形如 "0.008",沒有 $、沒有千分位,貨幣恆為美元。

// 顯示時保留原始十進位字串
const usd = task.cost;

用字串而不是 JSON 數字是刻意的:JSON 的數字在多數語言裡會解析成 float64,而 0.008 在二進位浮點裡不精確。對帳請用十進位型別解析:

from decimal import Decimal
usd = Decimal(task["cost"])   # 而不是 float()

查詢目前 API Key 的用量

curl 'https://api.spicyapi.ai/api/v1/usage?from=2026-09-01&to=2026-09-06' \
  -H "Authorization: Bearer $SPICY_API_KEY"

日期按 UTC 的左閉右開區間 [from,to) 解釋,上例包含9月1日至5日。省略日期時回傳最近7天(包含今天),最長92天。只回傳目前這把 Key 的任務,不提供其他 Key 或整個帳號的查詢參數;帳號餘額仍使用 chat/credit

data.totalCalls 是全部任務數量,data.totalSpend 是已結算實收金額;daysmodels 分別按建立日和模型分組,金額都是 USD 十進位字串。未結算預扣不計入消費,遲到結算可能更新過去日期的金額。隱藏的歷史任務仍計入,沒有任務的日期不會補上一筆零值。兩個分組描述同一批任務,不要相加兩次。

SDK 使用 client.getUsage({ from, to });CLI 使用 spicyapi usage --from 2026-09-01 --to 2026-09-06。不需要在每次生成前查詢用量或餘額,任務受理本身會執行餘額與預算檢查。

計費單位

一個模型只有一個計費單位。

單位含義數量取自 input 的哪個欄位
per_image按生成張數該模型宣告的欄位,沒宣告就按 1 張
per_second按輸出時長秒數讀取即時 quantityField 和 Schema,標準時長欄位為 duration_seconds;不要自行推定預設時長
per_request按次,與參數無關
per_1k_tokens按千 token,輸入輸出分別定價

欄位名不用猜:模型目錄介面quantityField 會逐模型告訴你,空字串表示按次計一單位。

同一個模型的不同級距可以有不同價格。影響價格的輸入可能包括解析度、時長、音訊選項或參考素材,具體以該模型 Schema 為準。pricing[].variant 是價卡的級距識別碼,請求本文裡沒有 variant 這個欄位。不要假設它總能直接當作 resolution,也不要只用「起價 × 時長」重新計算所有模型。將完整輸入傳送到 jobs/quote,使用回傳的精確估算與收費上限。

數量與價格始終以即時目錄為準

不要把某類模型的數量欄位寫死在用戶端。quantityField 為空時按一次呼叫計一單位;有值時,從該欄位讀取預估數量。各模型的價格級距、預設值和計費方式都可能隨目錄更新。最終收費不超過任務受理時的凍結金額:少用會釋放差額,之後不會補扣超過凍結額的金額。

各模型的確切單位與價格見價格頁與各自的模型頁。

客戶折扣與促銷

優惠可以面向所有使用者,也可以僅適用於指定帳戶;範圍可以是全部模型或選定模型。長期優惠持續到停用,限時優惠只在真實的開始與結束時間之間生效。帳戶專屬優惠只在對應帳戶登入或使用其 API Key 報價時適用,不會成為其他使用者的公開價格。

優惠不疊加,自動採用你可享的最低價格。 例如標準費用為 $10,公開活動減免 10%、帳戶優惠減免 20%,適用價格為 $8,而不是連續打折後的 $7.20。活動結束或停用後,新報價重新選擇仍有效的優惠;其他優惠也沒有時恢復標準價。

首頁、目錄和模型頁的優惠展示供選擇模型時參考,實際費用請以攜帶身分、完整模型與輸入參數的 jobs/quote 為準。倒數計時不會鎖定價格;活動、輸入或價格變化後,請重新取得報價。任務受理後按當時凍結的價格結算,活動在執行中結束不會讓該任務漲價,最終收費也不會超過受理時的凍結金額。

優惠按 API 請求的消費金額自動套用,不會讓儲值本金打折,也不是儲值返現。按日或按月展示的預算只按目前價格外推;限時活動可能在預算週期結束前到期,請同時核對優惠結束時間。

贈金與授信

GET /api/v1/chat/credit 保留 availableheldtotal,並可回傳 funding 資金來源明細。舊回應可能沒有 funding,缺失不等於零。SDK 使用 client.getBalance(),CLI 使用 spicyapi balance --json;不必在每次生成前先查餘額。

  • funding.prepaidAvailableUsd 是預付或歷史通用可用資金;grantAvailableUsd 是目前有效的贈金合計。每筆 grants 列出金額、可用、凍結、已用、狀態、生效與到期時間及 modelSlugs。模型列表為空表示全部模型;非空時只能支付對應模型的消費。列表最多回傳 100 筆,優先展示仍有餘額或凍結金額的批次,再按時間從新到舊排列。grantsHasMore 為真表示還有未回傳的記錄,不能用列表小計代替合計。
  • funding.credit 是經批准的先用後付額度:limitUsd 為上限,availableUsd 為剩餘可用授信,usedUsd 為已結算欠款,heldUsd 為在途任務佔用,expiresAt 為到期時間。授信上限不是儲值、贈金或現金餘額。 到期、停用或超限會限制新呼叫,已有欠款仍須償還。
  • 贈金不可提現。折扣決定請求售價,贈金與授信決定如何支付該售價;贈金不會降低模型價卡金額。贈金只在真實有效期及模型範圍內可用,未用部分可能到期或撤銷。任務失敗或少用時按原來源釋放;已到期或撤銷的贈金不會因此重新有效。
  • funding.cashShortfallUsd 大於零表示外部付款追回造成的待補足資金缺口,贈金和授信不能抵補,補足前不能新建呼叫。available 為負也可能只是已批准授信的使用,因此不能單憑它斷言餘額不足,也不要把它與授信上限直接相加。伺服器端會在受理時檢查資金來源、模型範圍、有效期及消費上限。

所有金額仍為精確 USD 十進位字串,日期為 RFC3339;顯示時請註明時區。控制台帳單頁顯示資金與贈金明細,資金變更只有在管理員手動審核後才生效。需要贈金或授信時聯絡支援;公開 API 不提供自助增加額度或發放贈金的寫入介面。

三個階段

凍結(hold)

建任務時按預估用量凍結一筆錢,金額就是 createTask 回傳的 estimatedCost

凍結會暫時佔用本次任務實際採用的資金來源,還沒有形成最終收費。它可能來自預付資金、適用贈金或批准的授信,不能再用於其他任務。這部分體現在 GET /api/v1/chat/creditheld 上。

凍結與建任務在同一筆資料庫交易裡完成。不存在「任務建了卻沒凍結金額」或者反過來的中間態。凍結不是收費。

結算(settle)或退款(refund)

  • succeeded → 按實際用量結算,但實收金額以受理時的凍結額為上限。少用的部分按原資金來源釋放;之後不會再向你補扣超過凍結額的金額。
  • failed / expired全額釋放預扣。歷史資料中的 canceled 同樣全額退回,但目前任務一經受理即不可取消。

結算完成後 recordInfosettled 變成 true,此時 cost 才是最終值。settled: falsecost 仍可能變動。

補救

如果我們的程式在中間崩潰,會有掃描任務發現「凍結著但任務已終結」的記錄並補退。

結算與退款共用同一把鍵來去除重複,因此一個任務的計費生命週期只會終結一次——不會因為重試而重複入帳。

失敗不計費是承諾,不是盡力而為

succeeded 外的所有終態都必須全額釋放凍結金額。你不需要為此做任何事,也不需要來找我們對帳。

查餘額

GET /api/v1/chat/credit
curl
curl https://api.spicyapi.ai/api/v1/chat/credit \
  -H "Authorization: Bearer $SPICY_API_KEY"
JavaScript
const res = await fetch('https://api.spicyapi.ai/api/v1/chat/credit', {
  headers: { Authorization: `Bearer ${process.env.SPICY_API_KEY}` },
});
const body = await res.json();
if (body.code !== 200) throw new Error(`${body.code} ${body.msg}`);

const balance = body.data;
console.log(balance.funding ?? balance);
Python
import os, requests

res = requests.get(
    "https://api.spicyapi.ai/api/v1/chat/credit",
    headers={"Authorization": f"Bearer {os.environ['SPICY_API_KEY']}"},
)
body = res.json()
if body["code"] != 200:
    raise RuntimeError(f'{body["code"]} {body["msg"]}')

balance = body["data"]
print(balance.get("funding", balance))
{
  "code": 200,
  "msg": "success",
  "data": {
    "available": "128.42",
    "held": "0.36",
    "total": "128.78"
  }
}
欄位含義
available錢包淨可用額,可能因授信使用為負;不能單獨用於判斷新任務是否可受理
held在途任務凍結的部分
total兩者之和

可用於該模型和時點的資金不足以覆蓋預估費用時,建任務回傳 40201。授信過期、額度用盡及需要補足的資金缺口也會影響受理資格;不要在用戶端用 available 的正負自行取代伺服器端的判斷。

消費上限

四層,任意一層觸頂都會拒絕新任務並回傳 40202

誰設觸頂訊息
金鑰累計上限你,在控制台。這把金鑰一生的天花板這把金鑰已達累計消費上限
金鑰月上限你,在控制台。這個自然月的預算這把金鑰已達月消費上限
金鑰日上限你,在控制台。新建金鑰預設帶一個較低的值這把金鑰已達日消費上限
平台日上限我們。這是我們自己的止血閘平台今日額度已用完,請稍後再試

日上限按 UTC 日期計算,零點重新起算;月上限按 UTC 自然月計算,每月 1 日零點重新起算。累計上限不會重置。

還沒結算的凍結不論落在哪一天、哪一個月,都仍然佔著日上限與月上限:錢還沒花掉,但也不能再花第二次。團隊自己的日/月預算是另一層,見Console 與團隊

日上限設成 0 表示不限制,不是「一分錢都不能花」

建立金鑰時「沒填」會套用系統預設值,「明確填 0」表示你要求不限制。兩者是不同的意圖,我們不會拿預設值去覆蓋你的明確選擇。

上限是保護你的,不是限制你。一個寫錯的迴圈在幾小時內燒掉一大筆錢,在這個行業裡是常見事故,而它幾乎總是發生在沒設上限的帳號上。

帳務明細

控制台的帳單頁會列出每一筆餘額變動。型別有這幾種:

型別含義
topup儲值入帳
bonus儲值級距的贈送額,與本金分開記帳
hold任務受理時凍結預估金額;不是收費
settle成功後按實際用量結算
refund非成功終態的退回
adjust人工衝正,必附管理員身分與原因
chargeback付款爭議扣回導致的餘額回收
grant_expire未用贈金到期後的餘額扣除
grant_revoke未用贈金被撤銷後的餘額扣除

帳務明細只追加不修改。已經寫下的記錄不會被改寫——退款是新增一條負向記錄,不是把原記錄抹掉。這樣任何時刻的餘額都能從頭累加重算出來,「帳對不上」變成一個可自證的問題而不是羅生門。

贈送額與儲值本金分開記帳,是因為退款只退本金:贈送部分是我們的行銷成本,不是你的錢。

控制台帳單頁保留儲值、預扣、結算、退回和人工衝正等餘額變動,便於核對與爭議處理。它不受任務 input / output 30 天清理週期影響;我們目前不對所有帳務明細承諾一個統一、固定的公開保留年限。見資料留存

本頁目錄