spicyapiドキュメント
アカウントと料金
本文

課金

SpicyAPI の米ドル建て従量課金を解説します。見積もり、資金の仮押さえ、最終請求、モデルごとの拒否時の条件、入金、支出上限、請求書を確認できます。

クレジット換算ではなく金額表示

価格は米ドルで示します。「画像 1 枚あたり $0.008」「出力 1 秒あたり $0.042」などです。前払い資金、プロモーション付与金、後払いの与信枠もドル建てですが、与信限度額は現金残高ではありません。

独自のクレジット単位を使わないのは意図的です。クレジット制では「X を入金すると Y の特典が付く」と「1 クレジットはいくらか」の間に換算が入り、実際の単価を計算しにくくなります。表示される価格が支払う価格です。

支払いの流れ

  1. まず入金します。 新規アカウントの残高は $0 で、無料枠はありません。入金前に送信したタスクは 40201 で拒否され、料金はかかりません。
  2. タスクが受理されると、見積もり額を確保します。 これを 仮押さえと呼びます。資金は引き続きあなたのものですが、同時に別のタスクの支払いには使えません。
  3. タスクが成功した場合、実際の使用分だけを支払います。仮押さえ額を超えることはありません。残りは残高に戻ります。
  4. 失敗・期限切れのタスクは通常、仮押さえ額を全額解放します。一部のコンテンツ拒否は、モデルページで例外を明示している場合に限り、受理時の見積もり額が課金されます。最終請求額は settled と cost で確認してください。
  5. API キーごとに設定する支出上限は、スクリプトの暴走で残高を使い切ることを防ぎます。

以下では各段階を詳しく説明します。

入金

コンソールの 請求 で入金します。カード、暗号資産、または表示されている場合は手動送金を利用できます。残高不足で長時間の処理が止まらないよう、自動チャージも有効にできます。支払済みの残高に有効期限はありません。プロモーション付与金は 請求 に表示された日に期限切れになります。

支払い方法、反映時期、自動チャージの手順は アカウント設定を参照してください。入金額は原則として現金払い戻しの対象ではありません。重複請求などの例外は 返金ポリシーに掲載しています。

3 段階の処理

どのタスクも同じ 3 段階の課金処理を通ります。ユーザーによる操作は不要です。残高履歴を正確に読めるように仕組みを説明します。

hold
settlerelease
受理時に金額を確保し、決着は一度きりです。実使用量で精算するか、全額解放するかのどちらかになります。

仮押さえ

作成時に推定使用量に相当する資金を確保します。金額は createTask が返す estimatedCost と完全に同じです。

仮押さえはタスクで使用する資金源を予約するもので、最終請求ではありません。予約中の前払い資金、対象の付与金、承認済み与信は、同時に別のタスクへ使えません。GET /api/v1/chat/credit では held、コンソールでは「保留中」(台帳では「取り置き」)と表示されます。

仮押さえとタスクの行は単一のデータベーストランザクションで書き込みます。タスクだけが存在して資金が確保されていない状態や、その逆の中間状態はありません。

精算または解放

  • succeeded → 実際の使用量で精算し、受理時の仮押さえ額を上限とします。未使用分は元の資金源に戻り、後から仮押さえ額を超えて徴収することはありません。
  • failed / expired → 通常は全額解放します。一部の content_rejected に受理時の見積もり額を課金する条件を、モデルページが明示している場合があります。過去の canceled 記録も全額解放しますが、現在、受理済みのタスクはキャンセルできません。

精算が完了すると、recordInfo の settled: true が返り、cost が確定します。settled が false の間は、cost がまだ変わる可能性があります。

定期的な回収処理

処理中に SpicyAPI のプロセスが停止した場合、定期処理が終了済みタスクに紐づく仮押さえを見つけ、記録された結果に従って精算または解放します。

精算と解放は同じ重複排除キーを使うため、タスクの課金ライフサイクルは必ず 1 回だけ終了します。再試行によって二重記帳されることはありません。

タスクの状態だけでなく精算結果も確認してください

失敗・期限切れのタスクは通常、仮押さえ額を全額解放します。一部のコンテンツ拒否は、モデルページで例外を明示している場合に限り受理時の見積もり額が課金されます。最終額は settled と cost を確認してください。課金される拒否も state: "failed" と errorCode: "content_rejected" のままです。精算後は settled が true、cost が正の値になります。それ以外の失敗と期限切れは、仮押さえ額を自動で全額解放します。

残高の確認

最も手軽なのはコンソールの 請求 ページです。利用可能残高、現在の仮押さえ額、すべての残高変動が表示されます。コードからは次を呼び出します。

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上の 2 つの合計

選択したモデルと時点で利用できる資金が見積もり額をカバーしない場合、createTask は 40201 を返します。与信の期限切れ、限度額の消化、支払い回収に伴う不足も受付に影響します。available の正負を見るクライアント側の判定で、サーバーの検証を置き換えないでください。

生成のたびに残高を確認する必要はありません。タスクの受付時に、利用できる残高と支出上限をすでに検証します。

通信上の金額はドル記号なしの文字列です

このページでは人向けに「$0.008」と表記します。API は通貨記号なしの小数文字列を返します。estimatedCost、cost、残高の 3 フィールドはすべて "0.008" のような値です。$ も桁区切りもなく、常に USD です。

// Keep the exact decimal string for display
const usd = task.cost;

JSON の数値ではなく文字列を使うのは意図的です。多くの言語で JSON 数値は float64 になり、0.008 を二進数で正確には表せません。会計処理に使う場合は decimal として解析してください。

from decimal import Decimal
usd = Decimal(task["cost"])   # not float()

支出上限

支出上限は、使える金額に設ける上限です。タスクには最大 6 つの制限が適用され、最初に達したものが 40202 でタスクを拒否します。その時点ではタスクの作成も仮押さえも行いません。

制限設定者到達時の msg
キーの累計上限API キーページで自分で設定。キーの全使用期間を通じた上限This key has reached its total spend cap
キーの月間上限API キーページで自分で設定。この暦月の予算This key has reached its monthly budget
キーの日次上限API キーページで自分で設定。新しいキーは自分で設定するまで上限なしThis key has reached its daily spend cap
チームの日次上限「チーム」ページでオーナー、管理者、予算管理者が設定。チーム所属のキーだけに適用Workspace daily budget has been reached
チームの月間上限同上Workspace monthly budget has been reached
プラットフォームの日次上限SpicyAPI が設定する保護制限。ユーザー側で引き上げることはできませんPlatform quota for today is exhausted, please try again later

日次上限は UTC 00:00 にリセットします。月間上限は UTC の暦月に従い、毎月 1 日にリセットします。累計上限はリセットしません。プラットフォーム上限に達した場合は UTC 00:00 以降に再試行し、繰り返し発生する場合はサポートにご連絡ください。

未精算の仮押さえは、すべての上限に算入されます。累計、月間、日次のいずれでも、日付や月が変わっても、精算するまで算入し続けます。まだ支払済みではありませんが、同じ資金を二重には使えません。チームの制限は コンソールとチームを参照してください。

上限欄の空白は画面によって意味が異なります

  • キーの作成・編集: 空白は制限なしで、0 も同じです。新しいキーは自分で設定するまで上限がありません。既存キーの上限を空にすると、その上限を削除します。維持したい場合は数値を残してください。
  • チームの支出上限: 空白は現在の値を維持し、0 は制限なしです。

上限はユーザーを守るためにあります。暴走したループが数時間で多額を消費する事故は、この分野では珍しくなく、そのほとんどが上限を設定していないアカウントで発生します。

台帳

コンソールの 請求 は、チャージ、取り置き、料金、返金 などの分かりやすいラベルで、すべての残高変動を示します。CSV をエクスポート でダウンロードすると、kind 列に次の固定コードが入ります。

種類意味
topup支払った金額を残高へ追加
bonus入金特典の追加額。支払った金額とは別に記帳
trial試用キャンペーンの付与金。入金・特典とは別に記帳
holdタスク受理時に見積もり額を確保。請求ではありません
settleタスクの最終請求。モデルの条件に従って課金されるコンテンツ拒否も含む。仮押さえの未使用分は戻る
refundタスクの失敗・タイムアウトにより仮押さえ全額を戻す
adjustSpicyAPI チームによる手動修正。必ず操作者と理由を記録
chargeback支払い異議申し立てに伴う残高の回収
forfeitアカウント閉鎖時に放棄した残高
grant_expire期限切れ後の未使用プロモーション資金を削除
grant_revoke未使用プロモーション資金の撤回

台帳は追記専用です。一度書かれた項目を書き換えることはありません。仮押さえの返却も元の記録を消すのではなく、新しい記録になります。そのため、どの残高も最初から再計算でき、「数字が合わない」という疑問に検証可能な答えを出せます。

特典付与金を支払額と別に記帳するのは、カードへ送金する支払いの払い戻しが、実際に支払った金額だけを対象とするためです。特典に現金価値はありません。これは、失敗タスクの仮押さえを残高へ戻す上記の refund 記録とは別です。

これらの残高変動は、タスク内容とは別に 10 年間保持します。プロンプトや結果がなくなった後も、照合や紛争対応のために利用できます。データ保持を参照してください。

請求書と利用明細

コンソールの 請求 → 請求書 では、次の 2 種類を自分で発行し、PDF としてダウンロードできます。

書類対象支払いを証明する書類か
支払い請求書支払済みの入金 1 件と、その請求額はい。経費精算にはこちらを使います
利用明細終了した 1 か月の実際の使用額いいえ。入金時に支払済みのため、両方を申請すると同じ金額を二重に申請することになります

請求 → 請求書 の上部で情報を一度入力します。氏名または会社名、住所 1 行目、市区町村、国は必須です。VAT・GST などの税番号は任意です。入力した内容をそのまま印字し、税番号を含め SpicyAPI 側では検証しません。印字できるのはラテン・ギリシャ・キリル文字のみなので、日本語・韓国語の会社名は登録上のローマ字表記で入力してください。発行済み書類は作成時の情報を保持し、後の変更は新しい書類だけに反映されます。

  • 支払済みの入金 1 件、終了した各月につき、書類を 1 回発行できます。すでにある場合は再発行せずダウンロードしてください。
  • 情報を直す場合は 再発行 を選びます。旧書類を無効にし、同じ対象に新しい番号の書類を発行します。再発行せずに無効化 は、書類の対象となる入金や月を間違えた場合だけに使います。
  • 同じページの下部にあるアカウント明細は別の書類です。すべての残高変動を月ごとに確定したスナップショットで、自分の会計管理に使います。領収書でも税務書類でもありません。

税額はゼロです。SpicyAPI は米国の事業者で、ユーザーに代わって VAT・GST・売上税を徴収・納付しません。すべての書類にリバースチャージの注記があるため、所在地で発生する税の申告・処理はユーザーの責任です。発行済み請求書を編集することはなく、理由と差し替え記録を残して無効化・再発行します。

課金単位

1 つのモデルには、課金単位がちょうど 1 つあります。

単位意味数量に使う input フィールド
per_image生成画像 1 枚あたりモデルが宣言するフィールド。デフォルトは 1
per_second出力 1 秒あたり。一部のエンドポイントでは固定ブロック単位に切り上げます。時間をブロック単位で課金する場合を参照現在の quantityField とスキーマを確認します。標準の時間フィールドは duration_seconds です。時間の省略で最短の段階が選ばれるとは限りません。
per_requestパラメーターに関係なく呼び出し 1 回あたり—
per_1k_tokensトークンごと。API 上の単位は per_1k_tokens ですが、サイトとカタログの price.perMillionTokens は同じ価格を 100 万トークンあたりで示します。入力、キャッシュ入力、キャッシュ書き込み、出力にはそれぞれ別の価格がある場合があります—

名前を推測する必要はありません。カタログエンドポイントの quantityField がモデルごとに示します。空文字列なら、呼び出し 1 回あたり 1 単位です。

モデルには複数の価格区分がある場合があります。解像度、時間、音声オプション、参照メディアが見積もりに影響するかどうかはスキーマによって異なります。pricing[].variant は価格表の区分を示すもので、リクエスト本文に variant フィールドはありません。そのラベルを必ず resolution に送れるとは限らず、すべてのモデルを開始価格 × 時間で計算することもできません。正確な見積もりと請求上限は、入力全体を jobs/quote に送って確認してください。

数量と価格は必ずライブカタログで確認してください

モデルのカテゴリ全体で同じ数量フィールドを決め打ちしないでください。quantityField が空なら呼び出し 1 回につき 1 課金単位で、空でなければ指定された入力フィールドから数量を読み取ります。モデルの区分、デフォルト、課金動作はカタログとともに変わる可能性があります。請求額はタスク受理時の仮押さえ額が上限です。未使用分は解放し、後から仮押さえ額を超えて徴収しません。

時間をブロック単位で課金する場合

ほとんどの per_second モデルは実際の出力時間で課金します。一部は固定ブロックを使い、測定した時間を次のブロックまで切り上げてから価格を計算します。8 秒単位なら、6 秒と 8 秒の動画は同じ価格で、9 秒は 2 ブロック分です。すべての秒単位モデルに当てはまるわけではありません。この方式を宣言しているエンドポイントだけに適用し、それぞれのモデルページに明記しています。

これらのエンドポイントにはもう 1 つ共通点があり、それが見積もりにも影響します。ユーザーが選ぶ duration_seconds ではなく、ユーザーが提供する動画から時間が決まるため、動画を読み取るまでは結果の長さが分かりません。quantityField は空で、送信前の見積もりは最も長い場合、つまりエンドポイントが受け付ける最大時間です。

{
  "estimatedCost": "0.96",
  "maxCharge": "0.96",
  "quantity": "32",
  "unit": "per_second"
}

金額は説明用の例です。ここでの quantity は測定結果ではなく、秒数の上限です。見積もり額を仮押さえし、最終請求は切り上げた時間から計算するため、仮押さえ額を超えません。 残りは精算時に解放し、上記の 3 段階と同じ流れになります。

仮押さえ額が最終請求より大きく表示されます

これらのエンドポイントでは想定どおりの動作で、過剰請求ではありません。動画を読み取るまで結果の時間が不明なため、受理から精算までは上限額を仮押さえとして残高に表示します。精算時には実時間をブロック単位で切り上げた分を課金し、差額は自動で残高に戻ります。台帳に両方の変動を記録するため、hold と settle をいつでも照合できます。

次の 2 点を予算に織り込んでください。

  • 動画の長さではなく見積もり額を基準に予算を組みます。 精算までは上限額を確保し、ほかの仮押さえと同様に支出上限へ算入します。
  • 短い動画も 1 ブロック分はかかります。 8 秒単位のエンドポイントでは 9 秒から 8 秒への短縮で半額になる一方、8 秒から 5 秒にしても価格は変わりません。

正確な単位と価格は 料金ページと各モデルページで確認できます。

個別割引とプロモーション

特典は全ユーザーまたは特定アカウント、全モデルまたは対象モデルに適用されます。継続型は無効化するまで、期間限定型は実際の開始から終了まで適用します。アカウント固有の価格は、そのアカウントでログインするか API キーで見積もると適用され、別のお客様の価格として公開することはありません。

割引は重複適用せず、対象となる最安価格を自動で使います。 標準料金 $10 に公開 10% 割引とアカウント 20% 割引がある場合、価格は $8 で、掛け合わせた $7.20 ではありません。特典の終了・無効化後の新規見積もりには、残る対象特典のうち最も有利なものを使い、残っていなければ標準価格になります。

ホーム、カタログ、モデルページの特典表示は比較のためのものです。実際の見積もりは、自分の認証情報、モデル、入力全体を jobs/quote に送って取得してください。カウントダウンは価格を予約しません。特典、入力、価格が変わったら再見積もりします。受理済みタスクの価格は固定され、実行中に特典が終了しても維持します。最終請求は受理時の仮押さえ額を超えません。

特典は API の利用料金へ自動適用し、入金額には適用しません。入金のキャッシュバックもありません。日次・月次の予算例は現在の価格から計算したものです。期間限定の特典は予算期間より先に終了することがあるため、終了時刻も確認してください。

プロモーション資金と与信枠

GET /api/v1/chat/credit は従来の available、held、total を保持し、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 のままです。日付を表示する際はタイムゾーンを明示してください。コンソールの課金ページに資金・付与金の詳細があり、変更は管理者の手動承認後にのみ反映します。付与金や与信枠の相談はコンソールの サポートから会話を開始するか、support@spicyapi.ai にメールしてください。公開 API には、自分の利用枠を増やしたり付与金を発行したりする書き込み操作はありません。

現在の API キーの利用状況

アカウント全体またはチームの日別・モデル別の支出グラフは、コンソールの 請求 → 利用量 を使います。以下の API が対象とするのは呼び出しに使ったキーだけです。

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 日です。結果は現在の API キーだけに属します。他のキーやアカウント全体を指定するパラメーターはありません。ウォレット残高には chat/credit を使います。

data.totalCalls は全タスク数、data.totalSpend は精算済み請求だけを数えます。days と models は同じタスクを作成日別・モデル別にまとめ、金額は正確な USD 小数文字列です。未精算の仮押さえは含まず、後の精算によって過去の日付の値が変わることがあります。非表示にしたタスク履歴も含み、呼び出しのない日付は省略します。この 2 つの集計を足し合わせないでください。

SDK では client.getUsage({ from, to })、CLI では spicyapi usage --from 2026-09-01 --to 2026-09-06 を使います。このエンドポイントには独立した、より厳しいレート制限があります。レート制限を参照してください。

このページの内容