n8n
n8n のワークフローで SpicyAPI の画像・動画・音声・チャットモデルを使います。コミュニティノードのインストール、HTTP Request テンプレートのインポート、AI Agent ノード向けに n8n の OpenAI 認証情報を SpicyAPI に向ける方法を説明します。
n8n は、ワークフロー自動化ツールです。SpicyAPI は、画像・動画・音声・チャットのモデルを、1 つの API と 1 つの前払い残高で n8n に提供します。つなぎ方は 3 通りあり、1 つのワークフローの中で組み合わせることもできます。
| やりたいこと | 使うもの | 対応環境 |
|---|---|---|
| 用意済みのノードで画像・動画・音声を生成する | SpicyAPI コミュニティノード | セルフホストの n8n |
| n8n Cloud で、または何もインストールせずにメディアを生成する | HTTP Request テンプレート | セルフホストの n8n と n8n Cloud |
| AI Agent、Basic LLM Chain などの AI ノードでチャットモデルを使う | n8n 標準の OpenAI 認証情報に新しい Base URL を設定 | セルフホストの n8n と n8n Cloud |
3 つとも、同じアカウント・キー・モデル・料金を使います。メディア生成では、ノードと HTTP Request テンプレートが送信前に料金を確認します。受理済みの同じメディア生成リクエストを元の Idempotency-Key で再送すると、既存のタスクが返ります。
画像ワークフローの出発点には、n8n の NSFW 画像ワークフローガイドをどうぞ。モデル選び、参考画像の編集、最初のポートレート、料金の例を紹介しています。お使いの n8n への接続手順は、この下で説明します。
手短にまとめると
- コンソールで API キーを作成し、1 日の支出上限を設定します。
- セルフホスト: n8n で Settings > Community Nodes > Install を開き、
@spicyapi/n8n-nodes-spicyapiを入力して、SpicyAPI (spicyapi.ai) API 認証情報を追加します。 - n8n Cloud: ノードのサンプルフォルダーからテンプレートをインポートし、その HTTP Request ノードに Bearer Auth 認証情報を設定します。
- AI ノードでのチャット: Base URL に
https://api.spicyapi.ai/v1、キーに SpicyAPI のキーを設定した OpenAI 認証情報を作成します。
始める前に
- API キー。 コンソールで作成します。キーは
sk-spicy-で始まります。アカウントがまだない場合はアカウントの準備を参照してください。 - 残高。 最初の生成前に、コンソールの Billingで入金します。n8n ワークフロー、Studio、API は同じアカウント残高を使います。精算の仕組みは課金を参照してください。
- 自動化ごとに 1 つのキー。 ワークフローは、人がクリックするよりはるかに高い頻度で実行されることがあります。n8n 専用のキーを作成し、1 日または 1 か月の支出上限を設定して、ループ内のミスにも上限が働くようにしてください。認証を参照してください。
- n8n から
api.spicyapi.aiに届くこと。 呼び出しを行うのは、ブラウザーではなく n8n サーバーです。
オプション 1: SpicyAPI コミュニティノード
このノードはオープンソース(MIT)で、github.com/spicyapi-ai/n8n-nodes-spicyapi で公開され、npm には @spicyapi/n8n-nodes-spicyapi として公開されています。実行時の依存関係はなく、通信するのは api.spicyapi.ai だけです。
セルフホストの n8n 専用
n8n Cloud にインストールできるコミュニティノードは、n8n が検証したものだけで、このノードは検証されていません。n8n Cloud では、後述の HTTP Request テンプレートを使ってください。同じ API を呼び出します。
名前の似た npm パッケージがほかにもありますが、無関係のサービスのものです。これは @spicyapi/n8n-nodes-spicyapi という名前のパッケージで、認証情報の名前は SpicyAPI (spicyapi.ai) API です。
インストール
パッケージをインストールする
n8n で Settings > Community Nodes を開き、Install を選び、@spicyapi/n8n-nodes-spicyapi を入力し、未検証のコードをインストールすることを了承するチェックボックスにチェックを入れて、確定します。インスタンスのオーナーか管理者である必要があります。
キューモードの場合や、ノードを手動で管理している場合は、n8n のデータフォルダーで次を実行して、n8n を再起動します。
cd ~/.n8n/nodes
npm install @spicyapi/n8n-nodes-spicyapi環境で使える方法については、n8n のコミュニティノードのガイドを参照してください。
認証情報を追加する
SpicyAPI (spicyapi.ai) API 認証情報を作成します。
| 欄 | 値 |
|---|---|
| API Key | sk-spicy- で始まるキー |
| Base URL | https://api.spicyapi.ai のままにします |
認証情報を保存すると、アカウントの残高に対してキーが検証されます。
ワークフローにノードを追加する
ノードパネルで SpicyAPI を検索し、リソースとオペレーションを選んでから、認証情報を選びます。
オペレーション
| リソース | オペレーション | 内容 |
|---|---|---|
| Image | Generate | テキストから画像、画像編集、アップスケール、背景除去などの画像モデル |
| Video | Generate | テキストから動画、画像から動画などの動画モデル |
| Audio | Generate | 音声読み上げ、音楽、文字起こしなどの音声モデル |
| Task | Get | ID でタスクを読み取り、必要に応じて完了を待ってファイルをダウンロードします |
| File | Upload | バイナリファイルをアップロードして、モデルの入力に使える spicy:// URI を取得します |
| Model | Get Many | 料金付きのモデルカタログ。モダリティとキーワードで絞り込めます |
| Model | Get | 入力スキーマと例を含む 1 つのモデル |
| Model | Get Quote | リクエストの正確な料金を、実行せずに取得します |
| Account | Get Balance | 利用可能な残高、保留中の残高、合計の残高を米ドルで返します |
| Chat | Message a Model | テキストモデルからの 1 回のチャット補完 |
画像・動画・音声を生成する
3 つの Generate オペレーションは、同じ欄を共有しています。
- Model. 一覧から選びます。選択したリソースのモデルが開始価格付きで表示されます。モデル ID を手で入力することもできます。すべてのモデルとそのパラメーターは spicyapi.ai/models に載っています。
- Prompt. モデルの主なテキスト入力です。音声読み上げモデルでは、読み上げるテキストになります。アップスケーラーなど、プロンプトのないモデルでは空のままにします。
- Media Inputs. モデルが読み取る画像・動画・音声です。欄を選び(一覧には、選択したモデルのファイル入力が表示されます)、前のノードのバイナリフィールドか URL を使います。バイナリファイルは、SpicyAPI に自動でアップロードされます。参照画像のようなリスト形式の欄は、同じ欄に対して複数の入力を追加して埋めます。
- Model Parameters. 選択したモデルのスキーマから生成されるフォームで、アスペクト比、解像度、長さ、シードなどがあります。空のままの欄は送信されず、モデルが自身の既定値を使います。
- Additional Parameters (JSON). そのほかの入力フィールドを JSON オブジェクトで指定します。上記の欄より優先されます。
出力には、タスクレコード(taskId、state、cost、settled、output)が含まれます。Download Output がオン(既定)の場合は、ファイルが data、data_1 などにバイナリデータとしても添付されます。output.assets[].url のリンクは約 20 分で期限切れになりますが、バイナリのコピーは期限切れになりません。
n8n がバイナリデータをディスクに保存する設定でない場合、大きな動画はメモリ上に保持されます。セルフホストの n8n で動画を扱うときは、N8N_DEFAULT_BINARY_DATA_MODE=filesystem を設定してください。
コスト管理とリトライ
- すべてのアイテムは先に料金が見積もられます。 ノードは見積もりを取得します。見積もりが Max Cost per Item (USD)(既定 $2)を超える場合は、何かが作成される前にエラーで停止し、何も課金されません。上限をなくすには 0 に設定します。
- タスクは、見積もりの料金で作成されます。 見積もりから送信までの間に料金が変わった場合、ノードは再度見積もりを取得し、上限を再チェックして、再送信します。
- リトライしても二重課金されません。コスト上限とリトライを参照してください。
長時間かかるタスク
選択肢と、それぞれを使う場面については、長時間かかる動画タスクを参照してください。
オプション 2: HTTP Request テンプレート
インポートできるワークフローが 2 つあり、どちらも n8n 標準のノードだけを使うため、コミュニティノードなしで、セルフホストの n8n でも n8n Cloud でも動きます。ノードのリポジトリのサンプルフォルダーにあります。
| ファイル | 内容 |
|---|---|
http-request-image.json | 見積もりを取得し、料金の上限を超えていれば停止して、タスクを作成し、完了するまでポーリングして、画像をバイナリファイルとしてダウンロードします |
http-request-chat.json | OpenAI 互換のエンドポイントによる 1 回のチャット補完 |
ワークフローをインポートする
.json ファイルをダウンロードします。n8n で Workflow menu > Import from File を選びます。
Bearer Auth 認証情報を作成する
Bearer Auth 認証情報を作成し、トークンとして SpicyAPI のキーを貼り付けて、api.spicyapi.ai を呼び出す各 HTTP Request ノードでそれを選びます。画像のテンプレートには、そうしたノードが 4 つあります。
設定を編集して実行する
Settings ノードを開きます。画像のテンプレートでは、モデル、プロンプト、アスペクト比、米ドルでの最大料金(maxCostUsd)を変更できます。モデルをモデルカタログの ID に置き換えて、ワークフローを実行します。
画像テンプレートの構成
どのメディアモデルでも同じ手順が使えるので、このパターンを自分のワークフローにコピーできます。
| ステップ | ノード | リクエスト |
|---|---|---|
| 1 | HTTP Request | model と input を付けた POST https://api.spicyapi.ai/api/v1/jobs/quote が、quoteId と estimatedCost を返します |
| 2 | If | 見積もりが上限を超えていたら、エラーで停止します。この時点では何も課金されていません |
| 3 | HTTP Request | quoteId、expectedCost、Idempotency-Key ヘッダーを付けた POST https://api.spicyapi.ai/api/v1/jobs/createTask。テンプレートは ?wait=50 を付けて、高速な画像モデルが同じリクエストの中で応答できるようにしています |
| 4 | If、Wait、HTTP Request | タスクがまだ queued または running なら、5 秒待って GET https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=… を呼び出し、もう一度確認します |
| 5 | HTTP Request | output.assets[0].url をファイルとしてダウンロードします |
リクエストとレスポンスの形式は、タスク、見積もりとプロトコル互換、メディアの入力と出力にあります。モデルが読み取るファイル(開始画像など)は、公開 URL か、アップロードした spicy:// ファイルを使えます。
オプション 3: AI Agent などの AI ノードでチャットモデルを使う
SpicyAPI のチャットエンドポイントは OpenAI 互換なので、n8n 標準の OpenAI ノードで使えます。これにはコミュニティノードは不要で、n8n Cloud でも動作します。
OpenAI 認証情報を作成する
n8n で新しい OpenAI 認証情報を作成します。API Key に SpicyAPI のキーを貼り付け、Base URL を次のように設定します。
https://api.spicyapi.ai/v1チャットモデルを選ぶ
AI Agent または Basic LLM Chain に OpenAI Chat Model を追加し、認証情報を選びます。ID が /chat で終わるモデルを選んでください(このページでは MODEL_ID_FROM_CATALOG と表記しています。ライブカタログ(GET /api/v1/models)から実際の ID をコピーしてください)。全一覧は GET https://api.spicyapi.ai/v1/models?modality=text にあります。
知っておくべき点です。
- モデル一覧には、画像・動画モデルも含まれます。 カスタムの Base URL では、n8n は
/v1/modelsが返すものをすべて表示し、SpicyAPI の一覧にはすべてのモデルが入っています。/chatで終わるものを選ぶか、式モードで ID を入力してください。画像・動画モデルはチャットモデルではないため、エージェントでは失敗します。 - Use Responses API。 最近のバージョンの OpenAI Chat Model ノードは、
/v1/chat/completionsの代わりに/v1/responsesへリクエストを送れます。SpicyAPI は/v1/responsesに対応していますが、previous_response_idには対応していません。Responses API をオンにしてエージェントのリクエストが失敗する場合は、ノードで Use Responses API をオフにしてください。 - サンプリング設定。 モデルが宣言していないオプション(推論モデルの
temperatureなど)を設定しても、SpicyAPI は失敗にせず無視し、無視した名前をレスポンスヘッダーX-Spicy-Ignored-Paramsに一覧で返します。モデルの範囲を超えた値は、受け付けられる最も近い値に変更され、X-Spicy-Adjusted-Paramsに一覧で返ります。宣言されていないそのほかのフィールドは、引き続き400になります。 - ツールと JSON 出力は、モデルによって異なります。
/v1/modelsにあるモデルのsupported_parametersを確認してください。 - 推論モデルは、推論トークンを
max_tokensに含めて数えます。 20 のようにごく小さい値では、推論モデルが予算を思考だけで使い切り、テキストを返さないことがあります(upstream_failed:「the output budget was spent on reasoning」)。max_tokensを増やすか、reasoning_effortを下げてください。reasoning_effortの値は、モデルごとに異なります。 - ストリーミングと料金。 チャットは、呼び出しのあとにトークン数で課金されます。詳細はテキストとストリーミングのページに、リクエスト例はチャットのレシピにあります。
コスト上限とリトライ
支出の上限
- コンソールで、1 日または 1 か月の支出上限を付けた n8n 専用のキーを使い、ワークフローが少数のモデルしか必要としないなら、モデルの許可リストも設定してください。上限に達すると、呼び出しは
40202で失敗し、その分は課金されません。 - メディアモデルでは、先に見積もりを取ってください。 ノードはこれを自動で行い、テンプレートは Get Quote と If のノードで行います。見積もりは、参照画像ごとの課金などの追加分を含む、そのリクエストの正確な料金です。そのため、見積もりに基づく料金チェックは信頼できますが、カタログの表に基づくものは信頼できません。
- 通常の失敗や期限切れのタスクでは、仮押さえ額が全額解放されます。一部のコンテンツ拒否は、モデルページに明記されている場合に限り課金されます。最終請求額は
settledとcostで確認してください。課金も参照してください。
リトライしても二重課金されない理由
タスクを作成するすべての呼び出しには Idempotency-Key が付きます。同じリクエストで同じキーが再度届いた場合、SpicyAPI は 2 つ目を作成せず、すでに作成したタスクを返すため、保留も課金も 2 回目は起きません。これは n8n では重要です。ノードの Retry On Fail や、最初のリクエストが実は通っていたタイムアウトなど、何もしなくてもリクエストが 2 回送られることがあるからです。
- コミュニティノードは、実行、ノード、アイテム、その入力からキーを組み立てます。ノードのリトライでは、同じキーが再利用されます。新しい実行、入力の変更、ループの別の周回は新しい作業として扱われ、新しいキーが付きます。
- テンプレートは、実行 ID とアイテムのインデックスから、たとえば
n8n-<execution id>-<item index>のようにキーを組み立てます。このパターンをループにコピーする場合は、キーにループのカウンターを加えてください。そうしないと、すべての周回が最初の周回のタスクを返してしまいます。 $nowのように試行のたびに変わるランダムな値は使わないでください。リトライのたびに新しい作業に見えてしまいます。
詳しくは冪等性を参照してください。
長時間かかる動画タスク
画像と音声のモデルは、通常 1 回のリクエストの中で終わります。動画は数分かかることがあります。その対処法は 3 つあり、n8n への負荷が最も軽いものから、順に並べると次のとおりです。
| 方法 | やり方 | トレードオフ |
|---|---|---|
| ノードの中で待つ(既定) | コミュニティノードが、タスクが終わるか Max Wait Time が経過するまで、間隔を延ばしながらポーリングします | 簡単ですが、動画のレンダリング中は実行が開いたままになります |
| 送信してから、待って確認する | Wait for Completion をオフにして、Wait ノード、続けて Task > Get を追加します。テンプレートも、ループの中で Wait、Get Task、If のノードを使って同じことをしています | 実行スロットを使うのは、短い呼び出しの間だけです |
| コールバック | Callback URL を {{ $execution.resumeUrl }} にして、そのあとに、Webhook の呼び出しで再開するよう設定した Wait ノードを置きます | n8n が公開 HTTPS で到達できる必要があります。呼び出しが届いたら、Task > Get でタスクを読み取り、コールバックの本文は信用しないでください |
ノードが待つのをやめても、タスクは SpicyAPI 上で動き続け、成功すれば課金されます。あとで Task > Get で取得してください。再送信しないでください。コンソールの Logs でも確認できます。
結果は限られた期間だけ保持され、ダウンロードリンクは約 20 分で期限切れになります。それ以上の期間必要なら、ワークフローの中でファイルを、たとえばクラウドストレージに保存してください。保持期間を参照してください。
トラブルシューティング
| 表示される内容 | 対処 |
|---|---|
認証情報のテストに失敗する、または 401 | コンソールからキーをコピーし直します。失効したキーはすぐ使えなくなります。OpenAI 認証情報の場合は、Base URL が /v1 で終わっているか確認します。 |
ノードパネルに SpicyAPI が表示されない | n8n Cloud を使っているか、手動インストール後に n8n を再起動していない可能性が高いです。Cloud には、未検証のノードをインストールできません。テンプレートを使ってください。 |
| Community Nodes に Install ボタンがない | コミュニティパッケージが無効になっているか、オーナーまたは管理者ではありません。インスタンスの運用者に依頼するか、~/.n8n/nodes に手動でインストールします。 |
40201 | 残高が不足しています。コンソールで残高を追加して、もう一度実行します。同じキーでのリトライは安全です。 |
40202 | キーが、1 日、1 か月、または累計の支出上限に達しました。上限を引き上げるか、リセットされるのを待ちます。 |
40310 | アカウントのメールアドレスが確認されていません。登録時のメールにあるリンクを開きます。 |
40004 | その組み合わせのオプションに対応するデプロイメントがありません。メッセージで名指しされたオプションを変更します。 |
40901 | 見積もりがもう一致していません。多くは期限切れです(見積もりの有効期間は 5 分)。もう一度見積もりを取り、同じ Idempotency-Key で再送信します。 |
| 料金が上限を超えているというエラー | 見積もりが Max Cost per Item または maxCostUsd より高くなっています。上限を引き上げるか、より安いオプションを選びます。何も課金されていません。 |
| エージェントがモデルで失敗する | チャットモデルではないモデルを選んだ可能性があります。/chat で終わる ID を使ってください。Use Responses API をオフにしてみるのも有効です。 |
| 推論モデルが空の回答を返す | max_tokens を増やすか、reasoning_effort を下げます。 |
| 出力のダウンロードリンクが、あとでエラーを返す | リンクは約 20 分で期限切れになります。Task > Get で新しいリンクを取得するか、バイナリのコピーを保存しておきます。 |
動画の処理中に Memory、heap、または再起動が発生する | バイナリデータは、既定ではメモリ上に保持されます。N8N_DEFAULT_BINARY_DATA_MODE=filesystem を設定してください。 |
| コールバックでワークフローが再開されない | URL は、ポート 443 または 80 の公開 HTTPS で、localhost ではない必要があります。実行の再開 URL が、n8n が公開している URL と一致しているか確認します。 |
SpicyAPI のエラーの末尾には、request_id またはタスク ID が付きます。サポートに連絡するときにそれを伝えれば、リクエストを正確に特定できます。エラーコードの意味はエラーで説明しており、より広いチェックリストはトラブルシューティングにあります。
モデルの利用には、SpicyAPI の利用規約と、お使いの n8n のエディションの規約が適用されます。

