API Stock と Eachlabs の比較
API Stock を選ぶ場合
自社アプリが処理順を管理しており、視覚的なワークフロー基盤より各段階の生成 API が必要なら API Stock を選べます。
Eachlabs を継続する場合
単一生成を超えるワークフローやツールが必要なら Eachlabs を継続してください。複数段階のフローは再構築し、各モデルをカタログで確認する必要があります。
Eachlabs API ドキュメント横にスクロールすると表の全列を確認できます。
| 連携項目 | Eachlabs | API Stock |
|---|---|---|
| リクエスト | POST /v1/prediction/ | POST /api/v1/generation/create |
| 認証 | Authorization: Bearer | Authorization: Bearer |
| モデル ID | bytedance-seedream-v4-5-text-to-image / version: 0.0.1 | seedream-4-5 |
以下の例のモデルを比較しており、全エンドポイントの比較ではありません。同じモデル名でもパラメーター、審査基準、出力の一致は保証されません。
料金比較:Eachlabs と API Stock
共通モデルの一部を同じ課金単位で比較します。当社料金は現在のカタログ、他社料金は確認日と出典付きの記録です。
| モデル | API Stock | Eachlabs | 当社料金の差 |
|---|---|---|---|
| Seedream 4.52K · 画像1枚 · テキストから画像 | API Stock$0.036 | Eachlabs$0.04 | 10% 安い |
| Nano Banana画像1枚 · テキストから画像 | API Stock$0.015 | Eachlabs$0.04 | 62.5% 安い |
参照画像なしでテキストから画像を1枚生成する公開基本料金です。プラン、数量割引、他の解像度、編集によって最終料金は変わる場合があります。
利用量ごとの費用
Seedream 4.5 · 2K
上記設定で画像1,000枚
- API Stock
- $36
- Eachlabs
- $40
Nano Banana
上記設定で画像1,000枚
- API Stock
- $15
- Eachlabs
- $40
上記料金から計算した例です。数量割引、契約、追加オプションは含みません。速度や出力の一致を保証しません。
Eachlabs からの移行
/v1/prediction を /api/v1/generation/create に変更します。バージョン付き ID と input を公開 ID と記載のパラメーターへ変換し、webhook_url を webhook に変更して結果処理を調整します。
1
アカウントを作成し、残高をチャージして API キーを発行します。
2
公開モデル ID と記載のパラメーターを指定して POST /api/v1/generation/create を送信します。1タスクにつき1出力です。
3
taskId を取得し、GET /api/v1/task/status/TASK_ID をポーリングするか、作成時に webhook を設定します。
Eachlabs
curl --fail-with-body 'https://api.eachlabs.ai/v1/prediction/' \-H "Authorization: Bearer $EACHLABS_API_KEY" \-H 'Content-Type: application/json' \-d '{"model": "bytedance-seedream-v4-5-text-to-image","version": "0.0.1","input": {"prompt": "A ceramic mug on a wooden table, soft morning light","image_size": "landscape_16_9","num_images": 1,"max_images": 1}}'
API Stock
curl --fail-with-body 'https://api.api-stock.com/api/v1/generation/create' \-H "Authorization: Bearer $API_KEY" \-H 'Content-Type: application/json' \-d '{"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "16:9"}'
完全な例:タスク作成からファイル取得まで
Node 22+ または Bun と API_KEY を使いサーバーで実行します。有料タスクを1回作成し、再作成せずに状態を確認します。URL は一時的なため、ファイルを自分のストレージへ保存してください。
import { writeFile } from "node:fs/promises";const baseURL = "https://api.api-stock.com/api/v1";const apiKey = process.env.API_KEY;if (!apiKey) throw new Error("Set API_KEY on the server");async function request(path, options = {}) {const response = await fetch(baseURL + path, {...options,headers: {Authorization: `Bearer ${apiKey}`,"Content-Type": "application/json",},signal: AbortSignal.timeout(30_000),});if (!response.ok) throw new Error(await response.text());return response.json();}const { taskId } = await request("/generation/create", {method: "POST",body: JSON.stringify({"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "16:9"}),});if (!taskId) throw new Error("Missing taskId");const deadline = Date.now() + 10 * 60_000;let fileUrl;while (Date.now() < deadline) {const { data } = await request(`/task/status/${encodeURIComponent(taskId)}`);if (data.status === "finished") {fileUrl = data.files?.[0]?.fileUrl;if (!fileUrl) throw new Error("Task finished without a file");break;}if (data.status === "failed" || data.status === "expired") {throw new Error(data.errorMessage || data.status);}await new Promise((resolve) => setTimeout(resolve, 2000));}if (!fileUrl) throw new Error(`Still processing: save taskId ${taskId} and resume polling`);const file = await fetch(fileUrl, { signal: AbortSignal.timeout(60_000) });if (!file.ok) throw new Error(`Download failed: ${file.status}`);const mime = file.headers.get("content-type")?.split(";")[0];const extension = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp" }[mime] || "bin";await writeFile(`generated-image.${extension}`, new Uint8Array(await file.arrayBuffer()));
API キーはサーバーに保管してください。本番移行前に1件試し、入力、状態処理、結果を確認してください。
よくある質問
Eachlabs から移行するには?
/v1/prediction を /api/v1/generation/create に変更します。バージョン付き ID と input を公開 ID と記載のパラメーターへ変換し、webhook_url を webhook に変更して結果処理を調整します。
API Stock は常に Eachlabs より安いですか?
いいえ。表でモデル、設定、課金単位を正確に比較してください。料金は上下するため、本番トラフィックの移行前に両方のカタログを確認してください。
すべての Eachlabs ワークフローを移行できますか?
単一生成を超えるワークフローやツールが必要なら Eachlabs を継続してください。複数段階のフローは再構築し、各モデルをカタログで確認する必要があります。
失敗したリクエストや未完了の処理はどうなりますか?
メディアタスクは設定済みルートで再試行し、利用できる場合に予備プロバイダーを使います。生成が最終的に失敗した場合は返金されます。処理中は重複作成せず状態を確認してください。URL の期限切れは生成失敗ではありません。
残高はどのようにチャージしますか?
利用可能な支払い方法、通貨、最低チャージ額は、お支払い前にアカウントで確認できます。サブスクリプションはなく、モデルの利用料金はプリペイド残高から差し引かれます。
API Stock で最初のリクエストを試す
モデルを選び、パラメーターと料金を確認して API キーを作成します。トラフィックを移す前に1件試してください。