課金されないもの:エラーコードと課金ルール

HTTP ステータスコード、JSON-RPC エラー、Data API における課金ルールの詳細な内訳と、開発者向けの推奨対応。

BlockVectra はリクエストを Compute Units(CU)単位で計測します。JSON-RPC および Data API の呼び出しは、レスポンスが得られた後にのみ課金されます。このガイドでは、HTTP ステータスコード、JSON-RPC 呼び出し、Data API における課金判定ルールと、開発者向けの推奨される対応をまとめます。

HTTP ステータスコードと課金ルール

HTTP レベルのレスポンスに対する課金判定および処理ルールは以下のとおりです:

HTTP ステータスレスポンスボディシナリオ課金の有無推奨される対応
200JSON-RPC レスポンス(単一またはバッチ)正常なレスポンス。JSON-RPC レイヤーのすべてのエラー(パースエラー、メソッド拒否、アップストリームの障害、ノードエラー)も 200コールごとに評価各コールの result または error を確認。エラーが返された場合は、下記の JSON-RPC エラー処理を参照
204空リクエスト内のすべてのコールが通知通知は通常どおり課金される追加の対応は不要
400空不正な形式の HTTP メッセージ(リクエスト行やヘッダーを解析できない、無効なチャンクエンコーディング)、またはリクエストボディの 2 回の読み取り間隔が 10 秒を超えたいいえHTTP リクエストの構文、ヘッダー、および送信の連続性を確認
402JSON、-32020残高不足、枠の使い果たし。残高が判明している場合、error.data には balance_units と balance_cu が含まれるいいえコンソールの請求ページまたは GET /v1/topup/deposit-address(MCP get_deposit_address)で残高を確認。アカウントの専用アドレスにオンチェーンでチャージ(Agent チャージガイドを参照)
403空/v1/{chain} または /v1/{chain}/{api_key} に対する POST または OPTIONS 以外のメソッド(チェーン名が認識されているかどうかに関係なく)いいえHTTP リクエストメソッドを POST(またはクロスオリジンの OPTIONS プリフライト)に変更
401JSON、-32024(missing_api_key または invalid_api_key)既知のチェーンでキーが不足している、キーが不明または無効化されているいいえx-api-key ヘッダーに有効な API key を指定(作成直後またはローテーション後のキーは有効になるまで数秒かかるため、少し待ってから再試行)
404JSON、-32600(reason = unknown_chain)不明な {chain} への POSTいいえURL 内のチェーン名を対応チェーンと照合(完全一致の小文字スラッグである必要があります)
404空のボディ一致しないパス(例:POST /v1、/v1/、POST /v1/{chain}/)いいえURL にチェーンを含める(/v1/{chain})
408空リクエストヘッダーの読み取りからレスポンスの返却までに 35 秒を超過可能性あり:ノードにすでに転送された呼び出しは、ノードが応答した時点で通常どおり課金される状態を変更する呼び出し(例:eth_sendRawTransaction)を無条件に再試行しないこと。クライアントの切断によって転送済みの呼び出しがキャンセルされるわけではない
413空リクエストボディが 2 MiB(2,097,152 バイト)超過いいえリクエストボディを 2 MiB 未満に維持し、バッチをより小さなリクエストに分割
414 / 431空URI が長すぎる(414)またはリクエストヘッダーが大きすぎる(431)いいえリクエスト URI を短縮するか HTTP リクエストヘッダーを削減
429JSON、-32005 または -32022。レート制限(-32005)の場合は Retry-After を付与。バースト/バッチサイズ制限(-32022)の場合は付与されないバケット残高枯渇 → -32005、単一リクエストの CU がバースト容量を超過 → -32022、アカウントのコールレート制限枯渇 → -32005、単一リクエスト内のコール数が上限を超過 → -32022いいえRetry-After 付きの -32005 では指定された秒数待ってから再試行。-32022 ではリクエストを分割するかバッチサイズを削減(そのまま再試行しても成功しない)
503JSON、-32021、Retry-After 付き請求データが一時的に利用不可。サーバーが一時的にリクエストを拒否(残高の問題ではないためチャージ不要)。新規作成されたキーは請求データが同期されるまで(通常数秒)これを返すいいえ残高の問題ではないためチャージは不要。Retry-After に指定された秒数を待って再試行

注記:Cloudflare 経由でアクセスした場合、Cloudflare が 52x や 1015 のエラーページを返すことがありますが、これらは当サービスによって生成されたものではありません。

課金と残高のレスポンスヘッダー:HTTP リクエスト(JSON-RPC と Data API の両方に適用可能)で x-bv-meter: 1 を送信すると、少なくとも 1 回の呼び出しが課金されたレスポンスにおいて、x-bv-cu-charged(このリクエストで課金された Compute Units、またはバッチ内で課金された呼び出しの合計)と x-bv-balance-units(この課金直後のアカウントの残り残高ユニット。過払い時はマイナス。残高が不明な場合は省略)が返されます。x-bv-meter: 1 のないリクエスト、課金が発生しなかったレスポンス、402、403、429、503 のエラーレスポンスでは、両ヘッダーとも省略されます。これらのレスポンスヘッダーは CORS 経由でブラウザスクリプトからアクセス可能ですが、WebSocket では使用されません。残高は未決済の総利用量を整数ユニットに 1 回切り上げて差し引きます。毎時の決済では切り捨てられるため、決済後に報告される残高が最大 1 ユニット増加する場合があります。

JSON-RPC エラーコードと課金ルール

同一のエラーコードでもプラットフォームまたはノードのいずれかから発生する可能性があり、課金が異なります:

  • プラットフォーム自体によって生成されたエラー:一切課金されません。
  • ノードから返されたエラー:そのまま透過され、メソッドの重み付けで課金されます。ただし、以下に記載するノードエラーコードのみが例外となります。

ルールの詳細

  • 課金されないノードエラー:ノードの -32002(バッチタイムアウト)、-32003(バッチレスポンスが大きすぎる)、および -32600(バッチ全体が拒否された)は、ノードが処理を早期に破棄したことを示し、これらおよび同じバッチ内の通知は課金されません。ノードの -32601(公開メソッドが未実装)および -32603(ノード内部障害)は HTTP または WebSocket 経由で課金されず、バッチ内の他のコールや通知には影響しません。さらに、4444(プルーニングされたブロック)および -32000(GET /v1/chains の state_window_blocks で定義されるノードの状態履歴ウィンドウ外の過去の状態)は課金されず、バッチ内の他のコールには影響しません。
  • 課金されるノードエラー:チェーンの結果を報告するノードからのその他のエラーは、メソッドの重み付けで課金されます。たとえば execution reverted(-32000 または data 付きの 3)、ノード独自の -32602 invalid argument などです。
  • 残高受付と同期:-32020 はアカウントの残高不足を示し、チャージが必要です。残高が判明している場合、error.data.balance_units と error.data.balance_cu に残り残高(マイナスの場合あり)が含まれます。新規作成されたキーは数秒間 -32021(503)を返す場合があります。Retry-After を待って再試行してください。
  • アップストリーム障害:アップストリームとの通信障害または不正なレスポンス(upstream unavailable、no response from upstream、malformed upstream response)が原因でプラットフォームが生成した -32603 には、data.reason: upstream_unavailable が付与されます。
  • 通知の課金:通知(204)は、そのメソッドの重み付けで課金されます。

JSON-RPC エラーコード表

コードソースHTTPメッセージ理由課金の有無推奨される対応
-32700BlockVectra200parse error-いいえ(レート制限トークンを 1 CU 消費)リクエストの JSON 構文を修正
-32600BlockVectra200invalid requestinvalid_requestいいえ(レート制限トークンを 1 CU 消費)JSON-RPC リクエストの構文と構造を修正
-32600BlockVectra200batch too large: max <N> callsbatch_too_large (+max)いいえバッチを上限以下のコール数に分割(標準バッチ上限は 100)
-32600BlockVectra200invalid request: ambiguous member nameinvalid_requestいいえJSON オブジェクト内の重複またはあいまいなメンバー名を削除
-32601BlockVectra200method not available: <method>-いいえそのチェーンで許可されているメソッドのみを呼び出す(対応チェーンを参照)
-32600BlockVectra404unknown chainunknown_chainいいえURL 内のチェーン名を確認
-32602BlockVectra200eth_getLogs block range too large: max <N> blocks-いいえeth_getLogs のブロック範囲を縮小(チェーンごとに上限が定義、例:1000 ブロック)
-32602BlockVectra200tracer not allowed-いいえ許可されているネイティブトレーサーを使用(callTracer、flatCallTracer、prestateTracer、4byteTracer、noopTracer、または省略)
-32602BlockVectra200trace timeout not allowed-いいえタイムアウト ≤ 30s の有効な Go duration 文字列を設定
-32010BlockVectra200node is syncing; calls are temporarily unavailable-いいえノードが同期中のため後で再試行(eth_chainId を除く)
-32011BlockVectra200historical state is not available beyond the most recent <N> blocks-いいえより新しいブロックを照会(対象ブロックは状態ウィンドウ内である必要あり。safe/finalized/earliest タグを回避)
-32000BlockVectra200transaction not foundnot_foundいいえトランザクションハッシュを検証(0x + 64 桁の 16 進数)
-32000BlockVectra200block not foundnot_foundいいえブロックハッシュまたはブロック番号を検証
-32000BlockVectra200upstream response too largeresponse_too_largeいいえクエリ範囲を絞り込むかリクエストを分割
-32005BlockVectra200-overloadedいいえサーバーが一時的に過負荷のため後で再試行
-32005BlockVectra429rate limit exceededkey_rate_limit / free_plan_call_limit / concurrency_limitいいえリクエスト頻度を下げる。Retry-After がある場合はそれに従う
-32022BlockVectra429request cost <N> CU exceeds burst capacity <M> CUrequest_exceeds_burstいいえ単一リクエストの CU がバースト容量未満になるようにリクエストまたはバッチを分割
-32022BlockVectra429request has <N> calls, exceeding the free-plan limit of <M> calls per secondfree_plan_batch_too_large (+max)いいえ1 秒あたりの上限に収まるようにバッチを分割するか、有料プランにアップグレード
-32603BlockVectra200upstream unavailableupstream_unavailableいいえアップストリーム通信障害、後で再試行
-32603BlockVectra200no response from upstreamupstream_unavailableいいえアップストリームが応答しなかったため、後で再試行
-32603BlockVectra200malformed upstream responseupstream_unavailableいいえアップストリームのレスポンスが不正、後で再試行
-32603BlockVectra200--いいえまれな内部エラー、後で再試行
-32020BlockVectra402insufficient balancebalance_exhausted / free_grant_exhausted (+topup_url, および残高が判明している場合は +balance_units / balance_cu)いいえコンソールの請求ページまたは GET /v1/topup/deposit-address(MCP get_deposit_address)で残高を確認。アカウントの専用アドレスにオンチェーンでチャージ(Agent チャージガイドを参照)
-32021BlockVectra503billing data temporarily unavailable-いいえ請求データの同期中(残高の問題ではない)。Retry-After 秒待って再試行
4444ノード200pruned history unavailable-いいえ要求されたブロックはノードによってプルーニング済み。課金対象外。バッチには影響なし
-32000ノード200historical state ... is not available-いいえノードの状態履歴ウィンドウ外。課金対象外。バッチには影響なし
-32000ノード200old data not available due to pruning...-いいえノード履歴ウィンドウ外(ウィンドウは state_window_blocks で決定)。課金対象外。バッチには影響なし
-32002ノード200<node message>-いいえノードがバッチ処理でタイムアウトしコールを破棄。課金対象外。バッチ内の通知も課金対象外
-32003ノード200<node message>-いいえノードのバッチレスポンスが大きすぎて破棄。課金対象外。バッチ内の通知も課金対象外
-32601ノード200<node message>-いいえ公開メソッドがノードで実装されていない。別のサポートされているメソッドを使用
-32603ノード200<node message>-いいえノード内部の障害。バックオフ付きで再試行
-32600ノード200<node message>-いいえバッチ全体がノードにより拒否された。課金対象外。バッチ内の通知も課金対象外
その他ノード200<node message>-はい(メソッドの重み付け)チェーンの結果(例:execution reverted、ノードの -32602)。コントラクト呼び出しパラメータを確認

Data API の課金ルール

Data API は読み取り専用のチェーンデータを REST エンドポイントにラップします。その課金とエラー処理は以下のルールに従います:

ルールの詳細

  • 課金されるのは 2xx の成功レスポンスのみです。
  • 対応範囲外の利用できない操作(非対応チェーンやトレースカバレッジ外のブロックなど)は HTTP 422 no_coverage を返します。これは課金されませんが、レート制限にはカウントされます。
  • HTTP 401、402、404、および 429 のレスポンスは課金されません。レスポンスヘッダー(x-bv-meter: 1)については、HTTP ステータスコードと課金ルールを参照してください。

Data API ステータスコード表

HTTP ステータスエラーコード / シナリオ課金の有無推奨される対応
200成功したデータレスポンスはい(Data API 操作の CU 重み付け)レスポンスエンベロープ内の data、meta、next_cursor をパース
400リクエストパラメータが不正、または必須フィールドが不足いいえクエリまたはボディのパラメータを確認して修正
402残高枯渇(error.code: "insufficient_balance"、残高が判明している場合は balance_units と balance_cu を含む)いいえコンソールの請求ページまたは GET /v1/topup/deposit-address(MCP get_deposit_address)で残高を確認。アカウントの専用アドレスにオンチェーンでチャージ(Agent チャージガイドを参照)
401API key の不足、不明、または無効化(error.code: "missing_api_key" または "invalid_api_key")いいえx-api-key ヘッダーに有効な API key を渡す
404不明または非公開のチェーン(error.code: "not_found")、または要求されたオブジェクトが存在しないいいえURL 内のチェーンスラッグ(完全一致の小文字であること)とリクエストパスを確認
409要求されたブロックまたはウィンドウが現在のインデックス作成高さを上回っている(error.code: "not_indexed_yet"、indexed_through を含む)いいえindexed_through までのブロックを照会するか、後で再試行
422チェーン固有の操作が利用不可(例:非対応チェーンまたはトレースカバレッジ外、error.code: "no_coverage")いいえ(レート制限にカウント)GET /v1/status(無料、キー不要の data_features)で対応機能を確認
429レート制限超過(error.code: "rate_limited")、または単一リクエストがキーのバースト容量を超過(error.code: "cost_exceeds_burst")いいえリクエスト頻度を下げる。サイズが大きすぎるリクエストを分割(バースト容量を超えるリクエストはそのままだと成功しない)
503データサービスが一時的に利用不可(error.code: "unavailable")、またはチェーンがビジー(error.code: "gateway_overloaded")いいえ後で再試行し、Retry-After がある場合はそれに従う

残高の照会(GET /v1/account)

API key の所有者は、課金が発生したり Compute Units(CU)が差し引かれたりすることなく、残高とキーのクォータ詳細を直接確認できます:

curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
  • 無料で課金対象外:GET /v1/account は無料です。課金されることはなく、CU も差し引かれません。残高がゼロやマイナスの場合でも HTTP 200 で現在の残高を返します(402 を返すことはありません)。
  • 認証:キー認証には x-api-key ヘッダーのみを使用します(パスキーや Bearer トークンは受け付けられません)。ヘッダーがない場合は 401 missing_api_key が返され、無効または失効したキーの場合は 401 invalid_api_key が返されます。(期限切れのキーは 403 key_expired を返し、一時的なサービス利用不可の場合は Retry-After 付きの 503 auth_unavailable または billing_unavailable を返します。)
  • レート制限:キー ID ごとに 1 秒あたり 5 リクエストという個別の制限があり、CU の計測や課金とは独立しています。制限を超えると、Retry-After ヘッダー付きの HTTP 429 rate_limited が返されます。

レスポンスフィールド:

  • key_id:API key の識別子文字列。
  • plan:アカウントプランのタイプ(アカウントに無料プランのコールレート枠がある場合は free、それ以外は paid)。
  • balance_units:アカウントの残り残高ユニット(ゼロまたはマイナスの可能性あり)。
  • balance_cu:Compute Units(CU)に換算した残り残高。
  • balance_as_of_age_ms:データソースから残高が読み取られてからの経過ミリ秒数。
  • key:キー固有の制限とクォータ詳細:
    • cu_per_sec:1 秒あたりの CU トークンバケット補充レート。
    • burst_cu:CU トークンバケットのバースト容量。
    • cu_cap:このキーの有効期間全体の CU 上限(上限がない場合は null)。
    • cu_cap_remaining:cu_cap の下で残っている CU(上限がない場合は null、ゼロまたはマイナスの可能性あり)。
    • expires_at:RFC 3339 形式の有効期限タイムスタンプ(キーが無期限の場合は null)。

レスポンス例:

{
  "key_id": "<key_id>",
  "plan": "<plan>",
  "balance_units": <integer>,
  "balance_cu": <integer>,
  "balance_as_of_age_ms": <integer>,
  "key": {
    "cu_per_sec": <integer>,
    "burst_cu": <integer>,
    "cu_cap": <integer_or_null>,
    "cu_cap_remaining": <integer_or_null>,
    "expires_at": "<expires_at_or_null>"
  }
}

料金とアップグレード

課金されるすべての呼び出しの具体的な費用は、公開されている CU 重み付けによって決定されます:

  • すべてのメソッドと操作の重み付けを確認するには、メソッド重み付け表および JSON-RPC CU 計測ルールを参照してください。
  • プランの料金と決済の詳細については、料金ページを参照してください。
  • 有料プランへのアップグレード:有料チャージを行うと無料プランの 1 秒あたりのコール数上限が解除されます。各キーは引き続き CU レートおよびバースト制限の対象となります。

オンチェーンでのチャージ手順

アカウントの残高が不足している場合や、より高いスループットが必要な場合は、コンソールで以下の手順に従ってオンチェーンでチャージしてください:

  1. コンソールにログイン:BlockVectra コンソールにログインします。
  2. 請求ページに移動:請求ページに移動します。
  3. 専用アドレスを取得:オンチェーンチャージカードで、アカウント専用のチャージアドレスをコピーするか、QR コードをスキャンします。
  4. 資金を送金:ページに記載されている対応ネットワークおよび USDC / USDT / USDG のみを使用して送金してください。対応ネットワークと最低チャージ額はコンソールに表示されます。
  5. 自動クレジット付与:オンチェーンで検出されるとトランザクションは「処理中」と表示され、入金が確認されるとクレジットが残高に自動的に追加されます。

重要な注意事項:

  • コンソールに明示的に記載されているネットワークとトークンのみを使用してください。サポートされていないチェーンや誤ったトークンによる送金は、自動的に反映されません。
  • 各送金がコンソールに示されている最低チャージ額を満たしていることを確認してください。
  • 初回の有料チャージが反映されると、アカウントは有料アカウントにアップグレードされ、無料プランの 1 秒あたりのコール数上限が解除されます。

エージェントやサーバープログラムは、API key を使用してチャージエンドポイントを直接呼び出すことができます。Agent プログラムによるチャージガイドを参照してください。

Webhook プッシュの課金

Push には、配信済みデータイベント、成功した履歴クエリ、および課金対象のアドレス日に対して個別の重み付けがあります。イベント履歴以外の管理呼び出し、失敗した配信試行、自動再試行、制御イベントは無料です。配信された各イベントは 1 回課金されます。ユーザーによる replay や、reorg(チェーンの再編成)後に再配信された正規チェーンのイベントは、新しい課金対象の配信となります。アドレス課金は、UTC 日内にオンラインだった各購読の最大アドレス数を使用します。アカウントの無料アドレス枠は購読間で共有され、より古い購読が優先して使用します。2 つの購読に含まれるアドレスは 2 回カウントされます。チェーンを追加するとイベント料金が変わりますが、アドレス料金は変わりません。

設定、署名検証、配信復旧については、ブロックチェーン Webhook API ガイドを参照してください。ステーブルコイン決済ガイドでは受領確認とポーリングによるバックフィルを扱っています。WebSocket サブスクリプションは独自の接続と通知の計測を使用します。リクエストエラーはエラーリファレンスに記載されています。以下の重み付けは GET /v1/plans から取得されたものです。

利用量課金単位CU
push.address_day課金対象のアドレス日33
push.history成功した履歴リクエスト25
push.log配信済みデータイベント150
push.native_transfer配信済みデータイベント150
push.token_transfer配信済みデータイベント150

アカウントごとの UTC 日あたりの無料アドレス数: 1000

アカウントごとの UTC 日あたりの無料アドレス枠は、プランに関係なくすべてのサブスクリプショングループで共有されます。各グループについて、その日にオンラインだった間の最大アドレス数を数え、グループ ID の昇順に枠を割り当てます。同じアドレスが二つのグループにある場合は二回数えます。グループ内のチェーン数によってアドレス数が倍増することはありません。一日中オフラインまたは削除済みのグループは数えません。各グループの割り当て枠を差し引いた残りの数に、`push.address_day` CU ウェイト(`method_weights` に記載)を掛けます。現在設定されている枠はアドレス日課金と同じ料金ポリシーに基づきます。アカウントの容量制限でも、グループごとの個別枠でもありません。

例:配信済みの native.transfer イベント 10 件、成功した履歴リクエスト 2 回、課金対象のアドレス日 10 件の利用量は、10 × 150 + 2 × 25 + 10 × 33 = 1880 CU です。課金対象のアドレス日は、アカウントの無料アドレス枠を差し引いた後に数えます。

次のステップ

最終更新:

このページの目次