メインコンテンツへスキップ

エラーレスポンス形式

すべてのAPIエラーは統一されたレスポンス形式に従います:
{
  "code": 40001,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Human readable error message",
  "details": {
    // Optional additional information
  }
}

HTTPステータスコード

ステータス説明エラーコード範囲
400Bad Request400, 40001-40040
401Unauthorized401
403Forbidden403, 40301
404Not Found404, 40401-40406
429Too Many Requests429, 42901-42902
500Internal Server Error500, 50001-50036
510Red Packet Error51000-51004
520Webhook Error52000-52001

クライアントエラー (400)

パラメータバリデーションエラー

CodeName説明解決方法
400BAD_REQUEST不正なリクエストリクエスト形式を確認してください
40001VALIDATION_ERRORリクエストパラメータが異常または不正パラメータの形式と値を確認してください
40002INVALID_PARAMETER無効なパラメータパラメータ値が要件を満たしているか確認してください
40003INVALID_TOKEN無効なアクセストークントークンの形式を確認してください
40004MISSING_PARAMETER必須パラメータが不足不足している必須パラメータを追加してください
40005INVALID_ADDRESS無効なウォレットアドレス形式アドレス形式を確認してください
40027INVALID_CURSOR無効なカーソル有効なページネーションカーソルを使用してください
40031INVALID_TIMESTAMP無効なタイムスタンプ形式ISO 8601形式を使用してください
40032INVALID_RESOLUTION無効なresolutionパラメータサポートされているK線の期間を使用してください
40033INVALID_NUMBER_FORMAT無効な数値形式正しい数値形式を使用してください
{
  "code": 40002,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Invalid parameter",
  "details": {
    "parameter": "resolution",
    "value": "2h",
    "allowed_values": ["1s", "1m", "5m", "15m", "1h", "4h", "1d"]
  }
}

トークン関連エラー

CodeName説明解決方法
40009INVALID_TOKEN_ADDRESS無効なトークンアドレストークンのコントラクトアドレスを確認してください
40028TOKEN_ADDRESSES_LIMIT_EXCEEDEDトークンアドレス数の上限超過最大100アドレスまで
40034TOKEN_ALREADY_CREATEDトークンは既に作成済み重複作成がないか確認してください

ウォレット関連エラー

CodeName説明解決方法
40029WALLET_ADDRESSES_LIMIT_EXCEEDEDウォレットアドレス数の上限超過最大100アドレスまで

トランザクション関連エラー

CodeName説明解決方法
40010TRANSACTION_FAILEDトランザクションの実行に失敗パラメータと残高を確認してください
40011TRANSACTION_REJECTEDトランザクションが拒否された署名と権限を確認してください
40012INVALID_TRANSACTION無効なトランザクショントランザクション構造を確認してください
40025TRANSACTION_NOT_SIGNEDトランザクションが署名されていないシリアライズの前に署名してください
40026TRANSACTION_SIGNATURE_MISSINGトランザクション署名がないトランザクション署名を追加してください
40039TRANSACTION_SIZE_EXCEEDEDトランザクションサイズの超過トランザクションの複雑さを軽減してください

DEX取引エラー

CodeName説明解決方法
40006LIQUIDITY_INSUFFICIENT流動性が不足取引量を減らしてください
40007PRICE_IMPACT_TOO_HIGH価格インパクトが大きすぎる量を減らすかスリッページを増やしてください
40008SLIPPAGE_TOO_HIGHスリッページが大きすぎるスリッページ設定を調整してください
40014INVALID_AMOUNT無効な金額有効な数値を使用してください
40015AMOUNT_TOO_SMALL金額が小さすぎる取引量を増やしてください
40016AMOUNT_TOO_LARGE金額が大きすぎる金額が安全範囲を超えています
40017SAME_TOKEN_SWAP同一トークンのスワップ入力と出力は同じにできません
40018INVALID_SLIPPAGE無効なスリッページ値有効なスリッページ値を使用してください
40019SLIPPAGE_TOO_LOWスリッページが低すぎるスリッページは0より大きくする必要があります
40020POOL_NOT_SUPPORTEDサポートされていないプールサポートされているプールを使用してください
40021UNSUPPORTED_SWAP_MODEサポートされていないスワップモードサポートされているスワップモードを使用してください
40022FEE_PARAMETER_ERROR無効な手数料パラメータ手数料設定を確認してください
40023ANTI_MEV_REJECTEDAnti-MEV検証に失敗Anti-MEV設定を確認してください
40030POOL_INPUT_MISMATCHプール入力の不一致入力トークンがプールに一致しません
{
  "code": 40006,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Insufficient liquidity",
  "details": {
    "requested_amount": "1000000000",
    "available_liquidity": "500000000"
  }
}

注文関連エラー

CodeName説明解決方法
40035INVALID_MARKET_PRICES無効な市場価格価格パラメータを確認してください
40036INVALID_ORDER_PARAMETERS無効な注文パラメータ注文設定を確認してください

その他のクライアントエラー

CodeName説明解決方法
40013PARAMETER_ERRORパラメータエラーtotalまたはfixed amountを設定する必要があります
40024NOT_IMPLEMENTEDメソッドが未実装実装済みのメソッドを使用してください
40037UNSUPPORTED_VALUE_TYPEサポートされていない値の型サポートされている値の型を使用してください
40038PARSE_ERRORパース失敗データ形式を確認してください
40040INVALID_MIGRATE_TYPE無効な移行タイプ有効な移行タイプを使用してください

認証エラー (401)

CodeName説明解決方法
401UNAUTHORIZED未認証。トークンがないか無効ですAuthorizationヘッダーを確認してください
{
  "code": 401,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Unauthorized. Token is missing or invalid"
}
処理例
if (error.code === 401) {
  // Refresh token
  const newToken = await getAccessToken();
  // Retry request with new token
}

権限エラー (403)

CodeName説明解決方法
403FORBIDDENアクセス禁止以下の詳細を参照
40301INSUFFICIENT_PERMISSIONS権限不足必要な権限を取得してください
403エラーは以下の原因で発生する可能性があります:
  • クォータ枯渇:月間APIコールクォータが使い果たされた場合、プランのアップグレードまたは翌月のリセットを待ってください
  • ブラックリスト:IPまたはアカウントがブラックリストに登録されている
  • ホワイトリスト未登録:リクエスト元が許可されたホワイトリストに含まれていない
APIクォータが枯渇すると、ゲートウェイは403を直接返します。これは429(レート制限)とは異なります:
  • 429:短期的なレート制限(1秒/1分あたりのリクエスト数超過)
  • 403:アカウントクォータ制限(月間使用量の枯渇)または権限の問題
{
  "code": 403,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Forbidden"
}
{
  "code": 40301,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Insufficient permissions",
  "details": {
    "required_scope": "kyt.write",
    "current_scopes": ["kyt.read"]
  }
}

リソース未検出エラー (404)

CodeName説明解決方法
404NOT_FOUNDリソースが見つからないリソースの存在を確認してください
40401POOL_NOT_FOUND流動性プールが見つからないプールアドレスとチェーンを確認してください
40402MARKET_INFO_NOT_FOUNDマーケット情報が見つからないマーケットの存在を確認してください
40403OPEN_ORDER_NOT_FOUNDオープンオーダーアカウントが見つからない注文アカウントを確認してください
40404ORDER_NOT_FOUND注文が見つからない注文IDを確認してください
40405CHAIN_NOT_FOUNDチェーンが見つからないサポートされているチェーン識別子を使用してください
40406DEX_NOT_FOUNDDEXが見つからないサポートされているDEXを使用してください
{
  "code": 40401,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Liquidity pool not found",
  "details": {
    "chain": "sol",
    "pool_address": "INVALID_ADDRESS"
  }
}

レート制限エラー (429)

CodeName説明解決方法
429RATE_LIMITリクエストが多すぎます。レート制限に達しました待ってからリトライしてください
42901API_USAGE_LIMIT_EXCEEDEDAPI使用量の上限超過プランをアップグレードするかリセットを待ってください
42902KYT_USAGE_LIMIT_EXCEEDEDKYT API使用量の上限超過KYTプランをアップグレードしてください
{
  "code": 429,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Too Many Requests. Rate limit reached",
  "details": {
    "limit": 100,
    "remaining": 0,
    "reset_at": 1706745600
  }
}
処理例
if (response.status === 429) {
  const retryAfter = response.headers.get('Retry-After') || 1;
  await sleep(retryAfter * 1000);
  // Retry request
}

サーバーエラー (500)

一般的なサーバーエラー

CodeName説明解決方法
500INTERNAL_SERVER_ERROR内部サーバーエラー後でリトライしてください
50001UNKNOWN_ERROR不明なエラーサポートに連絡してください
50005DATABASE_ERRORデータ操作に失敗後でリトライしてください
50007EXTERNAL_SERVICE_ERROR外部サービス呼び出しに失敗後でリトライしてください
50029EXTERNAL_API_ERROR外部APIリクエストに失敗後でリトライしてください

ブロックチェーン関連エラー

CodeName説明解決方法
50002CHAIN_CONNECTION_ERRORブロックチェーン接続エラーネットワーク状態を確認してください
50003CHAIN_SYNC_ERRORブロックチェーン同期エラー同期の完了を待ってください
50004TRANSACTION_TIMEOUTトランザクションタイムアウトリトライするかタイムアウトを延長してください
50006TRANSACTION_ERRORトランザクションエラートランザクションパラメータを確認してください
50008CHAIN_NOT_SUPPORTEDチェーンがサポートされていないサポートされているチェーンを使用してください
50017INSUFFICIENT_BALANCE残高不足アカウント残高を確認してください
50026TRANSACTION_SEND_FAILEDトランザクション送信に失敗ネットワークとパラメータを確認してください
50027TRANSACTION_CONFIRMATION_FAILEDトランザクション確認に失敗トランザクションのステータスを確認してください
50028TRANSACTION_SIGNATURE_EMPTYトランザクション署名が空署名を追加してください

DEX関連エラー

CodeName説明解決方法
50009DEX_NOT_SUPPORTEDDEXがサポートされていないサポートされているDEXを使用してください
50010DEX_ROUTE_BUILD_FAILEDDEXルート構築に失敗トークンペアの流動性を確認してください
50011DEX_SWAP_BUILD_FAILEDDEXスワップ構築に失敗取引パラメータを確認してください
50012DEX_SWAP_SIMULATED_FAILEDDEXスワップシミュレーションに失敗取引パラメータを調整してください
50019DEX_AGGREGATOR_NOT_FOUNDDEXアグリゲーターが見つからないサポートに連絡してください
50020DEX_BUILDER_NOT_FOUNDDEXビルダーが見つからないサポートに連絡してください
50033CURVE_CALCULATION_ERRORカーブ計算エラーパラメータを確認してください
50034LOOKUP_TABLE_ERRORアドレスルックアップテーブルエラー後でリトライしてください
50035SWAP_ROUTE_ERRORスワップルート計算エラートークンペアを確認してください

Jupiter APIエラー

CodeName説明解決方法
50013JUPITER_API_UNAUTHORIZEDJupiter API認証エラーAPIキーを確認してください
50014JUPITER_API_RATE_LIMITJupiter APIレート制限後でリトライしてください
50015JUPITER_API_BAD_REQUESTJupiter API不正リクエストパラメータを確認してください
50016JUPITER_API_ERRORJupiter APIエラー後でリトライしてください

設定と初期化エラー

CodeName説明解決方法
50018PROVIDER_NOT_INITIALIZEDプロバイダーが未初期化rpcUrlを設定してください
50021ORDER_BUILDER_NOT_FOUNDオーダービルダーが見つからないサポートに連絡してください
50022MARKET_EXPIREDマーケットが期限切れ有効なマーケットを使用してください
50023CONFIG_NOT_FOUND設定が見つからない設定を確認してください
50030FEE_CONFIGURATION_REQUIRED手数料設定が必要手数料を設定してください
50036METAFIELD_NOT_FOUNDメタフィールドが見つからないメタデータを確認してください

ファイルアップロードエラー

CodeName説明解決方法
50024IPFS_UPLOAD_FAILEDIPFSアップロードに失敗後でリトライしてください
50025SIGNED_URL_FAILED署名付きURL作成に失敗後でリトライしてください

バンドル処理エラー

CodeName説明解決方法
50031BUNDLE_PROCESSING_FAILEDバンドル処理に失敗バンドル設定を確認してください
50032TIP_ACCOUNTS_NOT_AVAILABLEチップアカウントが利用不可後でリトライしてください
{
  "code": 50010,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "DEX route build failed",
  "details": {
    "input_token": "So11111111111111111111111111111111111111112",
    "output_token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "reason": "No valid route found"
  }
}

レッドパケットエラー (510)

CodeName説明解決方法
51000RED_PACKET_INVALID_PARAMETER_ERRORレッドパケットのパラメータエラーレッドパケットIDまたはシェアIDを提供してください
51001RED_PACKET_NOT_FOUND_ERRORレッドパケットが見つからないレッドパケットIDを確認してください
51002RED_PACKET_WITHDRAWN_ERRORレッドパケットが引き出し済みレッドパケットは利用不可です
51003RED_PACKET_ALREADY_CLAIMED_ERRORレッドパケットは受取済み各ユーザーは1回のみ受け取れます
51004RED_PACKET_TRANSACTION_ERRORレッドパケットのトランザクションエラー後でリトライしてください
{
  "code": 51003,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "You have already claimed this red packet"
}

Webhookエラー (520)

CodeName説明解決方法
52000WEBHOOKS_APPLICATION_NOT_FOUNDWebhookアプリケーションが見つからないWebhook IDを確認してください
52001WEBHOOKS_ENDPOINT_LIMIT_REACHEDWebhookエンドポイント数の上限に達した使用していないエンドポイントを削除してください
{
  "code": 52001,
  "timestamp": "2026-02-05T10:30:00.000Z",
  "message": "Webhooks endpoint limit reached",
  "details": {
    "current_count": 10,
    "max_allowed": 10
  }
}

エラーハンドリングのベストプラクティス

import { ChainStreamClient } from '@chainstream-io/sdk';

const client = new ChainStreamClient(process.env.CHAINSTREAM_ACCESS_TOKEN);

async function safeApiCall(apiFunction) {
  try {
    return await apiFunction();
  } catch (error) {
    const { code, message, details } = error;
    
    // Handle errors by category
    if (code === 401) {
      // Authentication error: refresh token
      await refreshToken();
      return safeApiCall(apiFunction);
    }
    
    if (code === 429 || code === 42901 || code === 42902) {
      // Rate limit: wait and retry
      const retryAfter = details?.reset_at 
        ? (details.reset_at * 1000 - Date.now()) 
        : 1000;
      await sleep(retryAfter);
      return safeApiCall(apiFunction);
    }
    
    if (code >= 40000 && code < 41000) {
      // Client parameter error: log and throw
      console.error(`Parameter error: ${message}`, details);
      throw new ValidationError(message, details);
    }
    
    if (code >= 40400 && code < 40500) {
      // Resource not found
      console.warn(`Resource not found: ${message}`);
      return null;
    }
    
    if (code >= 50000) {
      // Server error: log and retry
      console.error(`Server error: ${message}`, details);
      await sleep(1000);
      return safeApiCall(apiFunction);
    }
    
    // Unknown error
    throw error;
  }
}

// Usage example
const tokenInfo = await safeApiCall(() => 
  client.token.getToken('sol', 'TOKEN_ADDRESS')
);

GraphQL APIエラー

GraphQLクエリはエラーを標準の errors 配列で返します。クレジット消費は extensions.credits で報告されます:
{
  "data": null,
  "errors": [
    {
      "message": "Unknown field 'InvalidField' on type 'DEXTradesRecord'",
      "locations": [{ "line": 3, "column": 5 }]
    }
  ],
  "extensions": {
    "credits": {
      "total": 0,
      "cubes": []
    }
  }
}
シナリオ動作
無効なクエリ(構文/バリデーションエラー)errors 配列が設定され、data はnull、クレジットは消費されない
成功したクエリdata が設定され、extensions.credits.total に消費されたCUが表示される
クレジット制限超過課金プランに応じてクエリが拒否される可能性あり — extensions.credits を確認
GraphQL課金とクレジットで完全なクレジット計算式を参照してください。

WebSocketエラー

WebSocket接続はエンドポイント wss://realtime-dex.chainstream.io/connection/websocket を使用し、?token= で認証します。
シナリオ動作
無効なトークンハンドシェイク時に接続が拒否される
トークンの期限切れ接続が切断される。新しいトークンで再接続してください
ネットワーク中断クライアントはエクスポネンシャルバックオフによる自動再接続を実装すべき
無効なチャンネルへのサブスクリプションWebSocketフレームでエラーメッセージが返される
TypeScript SDK(@chainstream-io/sdk)はWebSocketの再接続を自動的に処理します。生のWebSocketクライアントを使用する場合は、切断時にエクスポネンシャルバックオフ(1秒、2秒、4秒、8秒…)を実装してください。
接続管理の詳細については、WebSocket APIリファレンスタイムアウトとハートビートを参照してください。

ヘルプの取得

解決できないエラーが発生した場合:

テクニカルサポート

エラーコードとタイムスタンプを添えてメールでお問い合わせください

Discordコミュニティ

コミュニティに参加してヘルプを受けましょう
問題を報告する際は、完全なエラーレスポンス(codetimestampmessagedetails を含む)を提供してください。迅速な問題の特定に役立ちます。