@acedatacloud/sdk は Ace Data Cloud の公式 TypeScript / JavaScript SDK で、api.acedata.cloud 上のすべてのサービスを型付きの client.openai.chat.completions.create(...)、client.images.generate(...)、client.search.google(...) などのメソッドにラップし、SSE ストリーミング、リトライバックオフ、型付き例外を備えています。
Node.js、Deno、Bun、そしてモダンブラウザ(バンドラー付き)で使用できます。
ソースコードとパッケージのアドレス:
- SDK リポジトリ:https://github.com/AceDataCloud/SDK
- npm SDK:https://www.npmjs.com/package/@acedatacloud/sdk
インストール
- パッケージのバージョンは
2026.504.2(CalVer、2026 年第 504 回 ISO 週の第 2 回修正)。 AceDataCloudはクライアントを構築するための主なクラスで、デフォルトエクスポートからアクセスできます。
API トークンの準備
参考 SDK 概要 - API トークンの取得 からトークンを取得し、シェルでexport します:
apiToken を渡さないと、SDK は自動的に ACEDATACLOUD_API_TOKEN 環境変数を読み取ります。もしあなたの環境に ACEDATACLOUD_API_KEY(プロジェクトリポジトリの規約)がすでに保存されている場合は、明示的に渡すこともできます:new AceDataCloud({ apiToken: process.env.ACEDATACLOUD_API_KEY })。
例 1:chat.completions(非ストリーミング)
id chatcmpl-DldCcLvkTFaioST8e6SjOl0wJScQAは OpenAI 互換のレスポンス ID で、コンソールの 使用履歴 で対応する記録を検索できます。content ADC_TS_SDK_OKはモデルが実際に返した固定識別子で、レスポンスが SDK によって改ざんされていないことを証明します。- 一回のチャット完了で約 22 トークンを消費し、gpt-4o-mini の単価で課金されます。
- SDK はレスポンスを
Record<string, unknown>として宣言し、実行時には JSON オブジェクトになります。.id/.choices[0].message.contentのようなドットアクセスは.mjs、Node REPL、Bun で動作します;厳密な TypeScript プロジェクトでは(res as any).idまたは tsconfig でnoImplicitAnyをオフにする必要があるかもしれません。
例 2:chat.completions(SSE ストリーミング)
stream: true を有効にすると、create は非同期イテレーターを返し、各フレームは ChatCompletionChunk です。
- 最初のフレームの遅延 2481 ms はモデルが最初のトークンを生成するのにかかる時間で、以降の 12 フレームは 135 ms 内にすべて到達しました。
- 13 フレームを合わせると
"1 2 3 4 5"になり、各トークンが個別のフレームとして生成され、最後のフレームにはfinish_reasonが含まれます。 - ストリーミングは非ストリーミングよりもトークンを節約するわけではありませんが、最初のトークンの遅延が大幅に短縮され、リアルタイム UI に適しています。
例 3:images.generate(NanoBanana)
client.images.generate({ provider: 'nano-banana', ... }) は直接同期的に返され、wait パラメータを渡す必要はありません——NanoBanana API 自体が同期生成です。
image_urlは CDN 上の安定したアドレスで、直接<img src />またはダウンロードできます。- 16.6 秒の間、大部分の時間はモデルの推論にかかり、ローカル SDK のオーバーヘッドは無視できます。
trace_idはプラットフォームが割り当てたリクエスト ID で、問題が発生した場合はこの ID をカスタマーサポートに提供することで迅速に特定できます。- 非同期サービス(Midjourney、Sora、Veo など)には TaskHandle のポーリングが必要で、詳細は SDK タスクポーリングとストリーミングレスポンス を参照してください。
例 4:型付きエラーハンドリング
SDK は HTTP ステータスに応じてエラーを具体的なサブクラス(AuthenticationError / BadRequestError / RateLimitError / InternalServerError / APIConnectionError など)としてスローし、instanceof を使用して正確に分岐できます。
- 401 は自動的に
AuthenticationErrorにマッピングされ、ビジネスコードはinstanceofを使って正確に分岐できます。 code: invalid_tokenは PlatformGateway から来ており、バックエンドのログと照合しやすくなっています。- 同様に 429 →
RateLimitError、400 →BadRequestError、5xx →InternalServerError。
サンプル 5:複数モデルのルーティング
同じクライアントは複数のサービス間で自由に切り替え可能で、モデル名が一致していれば大丈夫です。- 一つのコード、一つのトークンで、OpenAI / Google / DeepSeek / xAI の四種類のモデルサービスをカバーします。
gemini-2.5-flashは今回ADC_OKを返さなかったのは、モデル自身の出力スタイルの違いによるもので、SDK は何も静かに飲み込まず、モデルの元の言葉をビジネスに忠実に透過させています。- 価格はそれぞれの実際のトークン単価で課金され、パスは一度だけ PlatformGateway を通ります。
サンプル 6:Google 検索
- 一度のリクエストで 10 件のオーガニック結果を取得し、フィールド名は
organic(organic_resultsではありません)。 - 検索は Serp サービス を通じて行われ、課金はリクエストごとに行われます。
- 同じクライアントインスタンスはチャットも検索もでき、トークンは一つで十分です。
設定オプション
ブラウザでの使用
@acedatacloud/sdk は ESM + ISO(同構)パッケージで、バンドラーを持つ現代のブラウザで直接 import できます。注意:フロントエンドコードに API トークンをハードコーディングしないでください。フロントエンドの推奨:
- X402
paymentHandlerを使用する —— ユーザーポケットが USDC をリクエストごとに署名し、トークンは不要です。 - または、自分のサーバーで SDK を使用し、ブラウザは自分のバックエンドを呼び出すだけで済みます。
進階:タスクポーリングとストリーミングレスポンス
- タスク型サービス(Midjourney、Sora、Veo、Suno):
TaskHandleを使用してポーリングし、単位、タイムアウト、再試行の詳細は SDK タスクポーリングとストリーミングレスポンス を参照してください。 - ストリーミングチャット:このページのサンプル 2 で示されています;ストリーミングオーディオ / ビデオも同様にサポートされています。
進階:X402 支払いフック
API トークンを申請したくない、リクエストごとにオンチェーンで支払いたい場合は、paymentHandler を使用できます:
createX402PaymentHandlerは TypeScript 側で{ network, evmProvider, evmAddress, preferScheme? }(EVM チェーン)または{ network: 'solana', solanaWallet }(Solana)を受け入れます。Node サーバー側でwindow.ethereumがない場合は、viemのcreateWalletClient(秘密鍵に基づく)を使用して EIP-1193 互換のプロバイダーをラップして渡してください;詳細な方法と実際のオンチェーン結果は SDK + X402 支払いフック を参照してください。

