スワップ見積りAPIの読み方:rate、validUntil、routes、advantageBps(2026実測)
見積りオブジェクトには、ほとんどの人が読まない5つの事実があります。レート、少額注文にだけ現れる120秒のvalidUntil、経路数、優位スコア、そして400エラーに隠された上下限。5つすべてが発注タイミングを変えます。
なぜこの解説があるか。 注文ページは一つの小さなJSONオブジェクト——見積り——の便利なラッパーにすぎません。レートが良いか、窓がいつ閉じるか、何個のプールが実際に競合しているか。ページが代わりに決めていることはすべて生のレスポンスに見えており、認証も要りません。2026-11-10 10:03〜10:17 UTC、いくつかの金額とわざと壊した入力でUSDT→XMR(TRON足)を公開エンドポイントで回し、BTC→XMRと逆方向のXMR→USDTも各1回試しました。以下は各フィールドの意味と、意味でないもの。実測であって推測ではありません。 (XMR→USDT 出口ルート)
レスポンスの形。 正常な応答は一つのオブジェクトです。best、routes、advantageBps。bestの中はfromAsset、toAsset、fromAmount、toAmount、rate、validUntil。契約全体がこれだけ——一つのオブジェクトに6フィールド、外に2つのスカラー。セッションもキーも署名もなし。1リクエストの往復は194〜604ms(10回の中央値約203ms)で、手動判断の前に回廊を見積るスクリプトのコストは5分の1秒ほど。エンドポイントはGETで、クエリパラメータはfrom、to、amountの3つ。
rateとその8桁。 rateフィールドはtoAmountをfromAmountで割ったものを、有効数字8桁に丸めたものです。10:05:55の100 USDT見積りはtoAmount 0.16052661、rate 0.0016052661。100.123456789012 USDTでは0.16074732、0.0016054911——rateは有効数字8桁しか保っていません。実務上の帰結:第9桁が違う金額同士でも、toAmountは元の金額から計算後に8桁へ丸められるため、rateフィールドは同じになり得ます。回廊をまたいでレートを肉眼で比べないでください——まず逆数を取る。2026-11-10、100 USDTは0.16082327 XMR(XMR 621.80ドル相当)を買い、同じ分に1 XMRは2経路・192bpsで540.097 USDT-TRXに売れました。同じ分の買売で12.9%のギャップ。これは両方向の間のスプレッド帯であり、誤りではありません。 (XMR→USDT 出口ルート)
validUntilは条件付き。 100 USDTの見積りはvalidUntil 2026-11-10T10:13:55.878Zを持ちました——応答から+119.8秒で、3回連続(119.8、119.8、119.1)安定。同じエンドポイントは、2経路の注文(110、130 USDT)とサンプリしたBTC見積りすべてでnullを返しました。規則は金額そのものではなく、勝った経路がその正確な金額を固定価格で出すかどうかです。小口は120秒の保証価格、大口や2経路は注文ページで固定されるまでレートに浮きます。ボットや比較ページを作るなら、nullのvalidUntilは「表示時に再見積り」と読むべきで、バグではありません。 (XMR→USDT 出口ルート)
routesとadvantageBps:深さの読み取り。 routesは何個のプール見積りが競争まで生き残ったか、advantageBpsは勝者を準優勝と比べた百分点の1/100単位の採点です。同日の2つの読み取りを並べます。10:07、100 USDTはroutes=1、advantageBps=0(1件だけが生き残った)。10:12、110 USDTはroutes=2、advantageBps=0——2件の見積りが末桁まで一致。10:12、130 USDTはroutes=2、advantageBps=895——2経路はほぼ9%乖離し、安い方がその差で勝ちました。逆方向の1 XMR→USDT-TRXはroutes=2、advantageBps=192。読み取り:2経路の回廊で高いbpsは、今この瞬間2つのプールの価格見解が大きく割れていることの合図——保証ではなく信号です。2026-11-10、130 USDTの勝者は0.235639 XMR(XMR 551.83ドル相当)を支払い、スポット543.39ドルに対してその分XMRを買うプレミアムは1.55%でした。 (XMR→USDT 出口ルート)
400の本文は第二のAPI。 2つの応答が1枚の表に値します。下限未満では、400の本文は{"error": "amount below minimum", "minAmount": 18.472402, "maxAmount": 162815.934213}。上限超では、同じ2つの数字が別のエラー文字列で{"error": "amount above maximum", ...}。どちらも両方の数を運ぶので、どの回廊でも1回のプローブで使える窓が手に入り、第2のエンドポイントは不要——見積りの前に金額を区間へクランプしたい自動化に便利です。境界は市場とともに漂います。10:03〜10:06の3分でUSDT→XMRの下限は18.463823→18.472402(数セント)、上限は162793.649781→162815.934213(約22ドル)に動きました。同日のBTC→XMRは0.0001825 / 2.1850807。金額が0や負数だとその手前で{"error": "amount must be a positive number"}で拒まれます。未知の資産idは404 {"error": "pair not supported"}、fromやtoの欠落は400 {"error": "from/to required"}。 (XMR→USDT 出口ルート)
カタログと資産idの約束。 第2の公開エンドポイント/api/currenciesは10:03 UTCで453資産・65ネットワークを返しました——367ティッカー、isStable付き52、hasExtraId付き6(メモや宛先タグが必要な資産)、複数ネットワークの上位はUSDC 13、USDT 11、ETH 7、DAIとWBTCが各5。各エントリはid、ticker、network、name、logo、hasExtraId、featured、isStableを持ちます。資産idの規約はティッカー-ネットワークで、見積りエンドポイントはレガシーエイリアスに寛容です。2026-11-10、usdt-tronとusdt-trxはバイト単位で同一の見積り(同じtoAmount 0.16082327、同じrate、validUntilは時計の0.4秒差のみ)を返しました。真実の源はメモリではなくカタログです。idはプールがネットワークを追加・削除するたびに出入りするので、実行時にリストを読み、ハードコードしない。 (XMR→USDT 出口ルート)
キャッシュが「新しい」見積りの意味を変える。 同じ金額を毎秒25秒間ポーリングすると、4回連続で同じtoAmount 0.16080074が返り、5回目に新しい数字0.16079135——見積りキャッシュ窓は約8秒で実測され、11月の弱網テストの結論と一致します。しかし20秒離れた2つの見積りは、同じ金額で異なるvalidUntilを返しました。キャッシュは完全なレスポンスをキーにしており、キャッシュに入った見積りは元の固定窓を保ちます。レートはその下で動きます。30秒間隔の3つの見積りは0.0016217233、0.0016272058、0.0016291304——100 USDTで60秒に0.46%のドリフト。実務規則:保証価格が必要なら120秒のvalidUntilの中で一つの見積りに行動し、自動更新ページは表示時に再見積りしてキャッシュ本文を信頼しない。 (XMR→USDT 出口ルート)
エラーの規律、そしてスクリプト化の前に知るべき一つの制限。 観測したすべての失敗は、error文字列だけのJSONオブジェクトを返します——HTMLもスタックトレースも静かな空の本体もなし。不正な入力(空のto、金額0、負数)は順に拒まれます。from/toが先、次に正数、次に区間、最後にペアの存在。この順序は自動化にとって重要です。ほとんどの回廊で有効だと分かっている金額でペアの存在を確かめ、400の本文から正確な窓を読めます。一つの運用制限:エンドポイントを連打するとHTTP 429と素朴な{"error": "rate limited"}が返ります——今回の実測では秒1回程度を数十秒続けたところで発火し、封鎖は少なくとも4分続きました。このAPIにスクリプトを合わせるなら、429は「即リトライ」ではなく「退避」と扱ってください。
フィールドの限界。 見積りが教えないこと:routesの背後のプール、固定見積りを延長できるか、そして入金を届けるために実際に払うネットワーク手数料——手数料はチェーン側の話で、元資産のネイティブコインで請求されます(手数料確保の解説を参照)。教えてくれることは注文のタイミングを計るには十分です。回廊をまたぐ比較はまずレートの逆数を取り、validUntilがあれば尊重し、routesとadvantageBpsを「深さと乖離」の信号として使い、1回のプローブのmin/maxで金額をクランプし、429で退避する。この解説は判断ごとの1回のcurlに要約できます。上の価格は2026-11-10 10:03〜10:17 UTCのスナップショットです。見積りは動くので、ライブの注文ページが基準です。