{"openapi":"3.1.0","info":{"title":"Bridge API","version":"1.0.0"},"servers":[{"url":"/v1"}],"components":{"schemas":{"BalanceResponse":{"type":"object","properties":{"atomic":{"type":"string","nullable":true},"chain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"status":{"type":"string","enum":["failed","not_configured","ok","unsupported"]},"token":{"type":"string","nullable":true}},"required":["atomic","chain","status","token"]},"BalanceErrorResponse":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized","wallet_not_yours"]},"message":{"type":"string"}},"required":["code","message"]},"BalanceRequest":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":128},"chain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"token":{"type":"string","nullable":true,"minLength":1,"maxLength":128,"default":null}},"required":["address","chain"]},"PortfolioResponse":{"type":"object","properties":{"rows":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/PortfolioRow"}}},"required":["rows"]},"PortfolioRow":{"type":"object","properties":{"atomic":{"type":"string","nullable":true},"status":{"type":"string","enum":["failed","not_configured","ok","unsupported"]}},"required":["atomic","status"]},"PortfolioRequest":{"type":"object","properties":{"chains":{"type":"array","items":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"maxItems":73},"address":{"type":"string","minLength":1,"maxLength":128}}}},"parameters":{}},"paths":{"/health":{"get":{"summary":"Service health","description":"Reachability of every dependency. Fails closed: any probe that errors or times out reports `down`, and `ok` is false unless all of them are `up`.","tags":["health"],"responses":{"200":{"description":"Every dependency is reachable","content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer"},"db":{"type":"string","enum":["up","down"]},"ok":{"type":"boolean"},"realtime":{"type":"string","enum":["up","down"]},"redis":{"type":"string","enum":["up","down"]}},"required":["at","db","ok","realtime","redis"]}}}},"503":{"description":"At least one dependency is unreachable","content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer"},"db":{"type":"string","enum":["up","down"]},"ok":{"type":"boolean"},"realtime":{"type":"string","enum":["up","down"]},"redis":{"type":"string","enum":["up","down"]}},"required":["at","db","ok","realtime","redis"]}}}}}}},"/auth/nonce":{"post":{"summary":"Request a sign-in challenge","description":"Returns a single-use nonce and the exact message the wallet must sign - EIP-4361 for `evm`, the Sign-In-With-Solana form for `solana`, the same grammar with a Tron account noun for `tron` (signed TIP-191, which is what `tronWeb.trx.signMessageV2` produces). Sign the `message` verbatim - a re-rendered message with the same fields will not verify. The challenge is BOUND TO THE CALLER who asked for it: send the same credential (cookie or bearer) to this call and to `/auth/verify`, or send none to both. A challenge asked for anonymously and answered with a session, or asked for under one session and answered under another, is refused as `nonce_not_found` - which is what stops a captured signature being posted under somebody else's session to link the wallet to their account.","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":128},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]}},"required":["address","chainFamily"]}}}},"responses":{"200":{"description":"The challenge and the message to sign","content":{"application/json":{"schema":{"type":"object","properties":{"expiresAt":{"type":"integer"},"message":{"type":"string"},"nonce":{"type":"string"}},"required":["expiresAt","message","nonce"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/auth/verify":{"post":{"summary":"Verify a signed message and mint a session","description":"Verifies the signature, the domain, the nonce and the expiry, creates the user on a first sign-in, and returns a session token. The same session is also set as an httpOnly cookie for the browser app. Called WITH a session, it is the link-another-wallet flow: an address nobody has claimed is attached to the user the request is already signed in as, while an address that already belongs to somebody still resolves to its own owner.","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"message":{"type":"string","minLength":1,"maxLength":4096},"signature":{"type":"string","minLength":1,"maxLength":512}},"required":["chainFamily","message","signature"]}}}},"responses":{"200":{"description":"A session was minted","content":{"application/json":{"schema":{"type":"object","properties":{"expiresAt":{"type":"integer"},"user":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","nullable":true}},"required":["id","username"]},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"linkedAt":{"type":"integer"},"nickname":{"type":"string","nullable":true}},"required":["address","chainFamily","linkedAt","nickname"]}},"token":{"type":"string"}},"required":["expiresAt","user","wallets","token"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/auth/session":{"get":{"summary":"The signed-in user","description":"Requires a session, as a bearer token or the session cookie.","tags":["auth"],"responses":{"200":{"description":"The user and every wallet they have proved control of","content":{"application/json":{"schema":{"type":"object","properties":{"expiresAt":{"type":"integer"},"user":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":"string","nullable":true}},"required":["id","username"]},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"linkedAt":{"type":"integer"},"nickname":{"type":"string","nullable":true}},"required":["address","chainFamily","linkedAt","nickname"]}}},"required":["expiresAt","user","wallets"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/balance":{"post":{"summary":"A wallet's balance of one asset on one chain","description":"Requires a session, and the address must be one the caller has linked - this is not a balance oracle for arbitrary addresses. Answers `status` rather than a number: `ok` carries `atomic`, and `not_configured`, `failed` and `unsupported` carry a null balance that a client must never render as zero.","tags":["balance"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceRequest"}}}},"responses":{"200":{"description":"The balance, or the honest reason there is not one","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceResponse"}}}},"401":{"description":"No session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceErrorResponse"}}}},"403":{"description":"That wallet is not linked to the caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceErrorResponse"}}}}}}},"/balance/portfolio":{"post":{"summary":"Everything the caller holds, across every chain their wallets can sign for","description":"Requires a session, and takes NO address: the wallets are read off the session, so this cannot be pointed at somebody else. One row per asset actually read, keyed `<chainKey>:<token|native>`. A chain the caller has no wallet for contributes NO rows at all - absent means unknown, and unknown is never zero. Costs one RPC call per chain that has both an endpoint and a wallet, never one per token.","tags":["balance"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioRequest"}}}},"responses":{"200":{"description":"The rows that could be read, partial by construction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioResponse"}}}},"401":{"description":"No session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceErrorResponse"}}}},"403":{"description":"The narrowing address is not linked to the caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceErrorResponse"}}}}}}},"/auth/logout":{"post":{"summary":"Revoke the current session","description":"Idempotent: revoking an already-dead session is a success, and reports `revoked: false`.","tags":["auth"],"responses":{"200":{"description":"The cookie is cleared and any live session is revoked","content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"type":"boolean"}},"required":["revoked"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/auth/wallets/{chainFamily}/{address}":{"delete":{"summary":"Unlink a wallet from the caller","description":"Requires a session. Removes the wallet from the caller's account and revokes the sessions that wallet minted, leaving sessions from their other wallets alone. Idempotent: unlinking a wallet that is not linked succeeds with `unlinked: false`. Refused with `last_wallet` (409) when it is the caller's only wallet - a user must keep a way to sign in - and with `wallet_not_yours` (403) when the address belongs to somebody else, which is all it ever says about them. Unlinking the wallet the CURRENT session was minted from succeeds and returns `signedOut: true`; that session is dead from this point and the cookie is cleared.","tags":["auth"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"address","in":"path"},{"schema":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"required":true,"name":"chainFamily","in":"path"}],"responses":{"200":{"description":"The wallet is unlinked, or was not linked to begin with","content":{"application/json":{"schema":{"type":"object","properties":{"signedOut":{"type":"boolean"},"unlinked":{"type":"boolean"},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"linkedAt":{"type":"integer"},"nickname":{"type":"string","nullable":true}},"required":["address","chainFamily","linkedAt","nickname"]}}},"required":["signedOut","unlinked","wallets"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"The wallet belongs to another user","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"It is the caller's only wallet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}},"patch":{"summary":"Name one of the caller's wallets","description":"Requires a session. A nickname of up to 24 characters for a wallet the caller has linked, shown in their profile and as a pick in the recipient menu; null clears it. Never shown on the public board.","tags":["auth"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":128},"required":true,"name":"address","in":"path"},{"schema":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"required":true,"name":"chainFamily","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nickname":{"type":"string","nullable":true,"maxLength":64}},"required":["nickname"]}}}},"responses":{"200":{"description":"Every wallet on the account, with its name","content":{"application/json":{"schema":{"type":"object","properties":{"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"linkedAt":{"type":"integer"},"nickname":{"type":"string","nullable":true}},"required":["address","chainFamily","linkedAt","nickname"]}}},"required":["wallets"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"The wallet belongs to another user","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/auth/profile":{"patch":{"summary":"Set the caller's public name","description":"Requires a session. The name the leaderboard shows in place of the primary wallet: 3 to 24 letters, digits or underscores, unique without regard to case; null clears it.","tags":["auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","nullable":true,"maxLength":64}},"required":["username"]}}}},"responses":{"200":{"description":"The name as stored","content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","nullable":true}},"required":["username"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"Somebody else holds that name","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/realtime/connection-token":{"post":{"summary":"Mint a Centrifugo connection token","description":"Open to anonymous callers. The token binds a websocket to a subject and grants nothing on its own - every namespace requires a per-channel subscription token as well. `subject` is returned so an anonymous client can present it when asking for one, and send it back HERE when refreshing: Centrifugo drops a connection whose refreshed token names a different subject. A signed-in caller is always their own user id, whatever they send.","tags":["realtime"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string","minLength":1,"maxLength":128}}}}}},"responses":{"200":{"description":"The connection token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1,"maxLength":128},"expiresAt":{"type":"integer"}},"required":["token","subject","expiresAt"]}}}}}}},"/realtime/subscription-token":{"post":{"summary":"Mint a subscription token for one channel","description":"Authorizes the caller for the channel and signs a token scoped to it. `leaderboard:global` and `quotes:{corridorKey}` are public - a corridor board carries no user data; `transfers:{transferId}` requires a wallet sign-in and the transfer being the caller's. Every refusal is 403 with the same code - the endpoint does not say which of \"no such channel\" and \"not yours\" applied.","tags":["realtime"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","minLength":3,"maxLength":255},"subject":{"type":"string","minLength":1,"maxLength":128}},"required":["channel"]}}}},"responses":{"200":{"description":"The channel-scoped token","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","minLength":1},"channel":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1,"maxLength":128},"expiresAt":{"type":"integer"}},"required":["token","channel","subject","expiresAt"]}}}},"403":{"description":"The caller may not subscribe to that channel","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["channel_forbidden"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/quote":{"post":{"summary":"Price a transfer across every venue that can serve it","description":"Fans out over the corridor, ranks the answers in the destination asset’s own atomic units, and returns the whole table plus a `decisionId` to build against. OPEN: no api key and no session, bounded by per-IP and per-wallet rate limits. Sign in, or supply `sender`, so the venues can price calldata for a wallet. `indicative: true` is comparison pricing that reserves nothing and can never be built against.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fromChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"toChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"fromToken":{"type":"string","nullable":true,"minLength":1,"maxLength":128,"default":null},"toToken":{"type":"string","nullable":true,"minLength":1,"maxLength":128,"default":null},"amountAtomic":{"type":"string","pattern":"^[1-9][0-9]{0,77}$"},"tradeType":{"type":"string","enum":["EXACT_IN","MIN_OUT","EXACT_OUT"],"default":"EXACT_IN"},"slippageBps":{"type":"integer","minimum":0,"maximum":5000,"default":100},"sender":{"type":"string","minLength":26,"maxLength":600},"recipient":{"type":"string","minLength":26,"maxLength":600},"refundAddress":{"type":"string","minLength":26,"maxLength":600},"indicative":{"type":"boolean","default":false},"referralWallet":{"type":"string","minLength":26,"maxLength":600},"referralBps":{"type":"integer","minimum":0,"maximum":15},"privacy":{"type":"boolean","default":false},"autoTwapOptOut":{"type":"boolean","default":false},"userIp":{"anyOf":[{"type":"string","format":"ip"},{"type":"string","format":"ip"}]}},"required":["fromChain","toChain","amountAtomic"]}}}},"responses":{"200":{"description":"The ranked table, the winner, and the fee disclosure","content":{"application/json":{"schema":{"type":"object","properties":{"decisionId":{"type":"string"},"quoteSessionId":{"type":"string"},"best":{"type":"object","nullable":true,"properties":{"venue":{"type":"string"},"executable":{"type":"boolean"},"eligibility":{"type":"string","enum":["ok","not_executable","ttl_too_short","unpriced","below_min","above_max","venue_error","implausible","stale"]},"amountInAtomic":{"type":"string"},"amountOutAtomic":{"type":"string"},"minAmountOutAtomic":{"type":"string"},"netOutAtomic":{"type":"string","nullable":true},"netInAtomic":{"type":"string","nullable":true},"rankBasis":{"type":"string","nullable":true,"enum":["netOutAtomic","netInAtomic",null]},"rankAtomic":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["PROTOCOL","SOLVER","ORIGIN_GAS","DESTINATION_GAS","APP","VENUE_OTHER"]},"tokenAddress":{"type":"string","nullable":true},"decimals":{"type":"integer"},"amountAtomic":{"type":"string"},"amountUsd":{"type":"number"},"deductedFrom":{"type":"string","enum":["input","output","gas"]},"label":{"type":"string"}},"required":["kind","tokenAddress","decimals","amountAtomic","deductedFrom"]}},"feeBps":{"type":"integer"},"feeAmountAtomic":{"type":"string"},"referralFeeAmountAtomic":{"type":"string"},"netOutAfterFeeAtomic":{"type":"string","nullable":true},"amountInNetAtomic":{"type":"string"},"tierSavedBps":{"type":"integer","nullable":true},"estimatedSeconds":{"type":"integer","nullable":true},"expiresAt":{"type":"integer"},"quoteId":{"type":"string"},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]}},"required":["kind","chain","vm"]}},"required":["venue","executable","eligibility","amountInAtomic","amountOutAtomic","minAmountOutAtomic","netOutAtomic","netInAtomic","rankBasis","rankAtomic","fees","feeBps","feeAmountAtomic","referralFeeAmountAtomic","netOutAfterFeeAtomic","amountInNetAtomic","tierSavedBps","estimatedSeconds","expiresAt","quoteId","postStep"]},"bestByPrice":{"type":"string","nullable":true},"bestByTime":{"type":"string","nullable":true},"quotes":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"executable":{"type":"boolean"},"eligibility":{"type":"string","enum":["ok","not_executable","ttl_too_short","unpriced","below_min","above_max","venue_error","implausible","stale"]},"amountInAtomic":{"type":"string"},"amountOutAtomic":{"type":"string"},"minAmountOutAtomic":{"type":"string"},"netOutAtomic":{"type":"string","nullable":true},"netInAtomic":{"type":"string","nullable":true},"rankBasis":{"type":"string","nullable":true,"enum":["netOutAtomic","netInAtomic",null]},"rankAtomic":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["PROTOCOL","SOLVER","ORIGIN_GAS","DESTINATION_GAS","APP","VENUE_OTHER"]},"tokenAddress":{"type":"string","nullable":true},"decimals":{"type":"integer"},"amountAtomic":{"type":"string"},"amountUsd":{"type":"number"},"deductedFrom":{"type":"string","enum":["input","output","gas"]},"label":{"type":"string"}},"required":["kind","tokenAddress","decimals","amountAtomic","deductedFrom"]}},"feeBps":{"type":"integer"},"feeAmountAtomic":{"type":"string"},"referralFeeAmountAtomic":{"type":"string"},"netOutAfterFeeAtomic":{"type":"string","nullable":true},"amountInNetAtomic":{"type":"string"},"tierSavedBps":{"type":"integer","nullable":true},"estimatedSeconds":{"type":"integer","nullable":true},"expiresAt":{"type":"integer"},"quoteId":{"type":"string"},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]}},"required":["kind","chain","vm"]}},"required":["venue","executable","eligibility","amountInAtomic","amountOutAtomic","minAmountOutAtomic","netOutAtomic","netInAtomic","rankBasis","rankAtomic","fees","feeBps","feeAmountAtomic","referralFeeAmountAtomic","netOutAfterFeeAtomic","amountInNetAtomic","tierSavedBps","estimatedSeconds","expiresAt","quoteId","postStep"]}},"amountInNetAtomic":{"type":"string"},"rejected":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["venue","code","message"]}},"privacy":{"type":"boolean"},"emptyReason":{"type":"string","nullable":true,"enum":["no_private_route","not_priceable",null]},"fees":{"type":"object","properties":{"platform":{"type":"object","nullable":true,"properties":{"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"tierSavedBps":{"type":"integer","nullable":true}},"required":["bps","amountAtomic","asset","tierSavedBps"]},"referral":{"type":"object","nullable":true,"properties":{"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"wallet":{"type":"string"}},"required":["bps","amountAtomic","asset","wallet"]}},"required":["platform","referral"]},"splitPlan":{"type":"object","properties":{"splitGroupId":{"type":"string"},"legs":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"decisionId":{"type":"string"},"amountInAtomic":{"type":"string"},"amountInNetAtomic":{"type":"string"},"amountOutAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["venue","decisionId","amountInAtomic","amountInNetAtomic","amountOutAtomic","expiresAt"]},"minItems":2},"totalInAtomic":{"type":"string"},"improvementBps":{"type":"number"},"maxSignatures":{"type":"integer","minimum":0,"exclusiveMinimum":true},"expiresAt":{"type":"integer"},"indicative":{"type":"boolean"},"baseline":{"type":"object","properties":{"venue":{"type":"string"},"netOut":{"type":"number"}},"required":["venue","netOut"]},"measuredImpactBps":{"type":"number"},"fees":{"type":"object","properties":{"bps":{"type":"integer"},"amountInNetAtomic":{"type":"string"}},"required":["bps","amountInNetAtomic"]}},"required":["splitGroupId","legs","totalInAtomic","improvementBps","maxSignatures","expiresAt","indicative","baseline","measuredImpactBps","fees"]},"twapPlan":{"type":"object","properties":{"slices":{"type":"array","items":{"type":"object","properties":{"amountInAtomic":{"type":"string"},"amountInNetAtomic":{"type":"string"},"offsetSeconds":{"type":"integer"}},"required":["amountInAtomic","amountInNetAtomic","offsetSeconds"]},"minItems":2},"intervalSeconds":{"type":"integer"},"totalInAtomic":{"type":"string"},"improvementBps":{"type":"number"},"residualImpactBps":{"type":"number"},"sliceImpactBps":{"type":"number"},"referenceVenue":{"type":"string"},"fees":{"type":"object","properties":{"bps":{"type":"integer"},"amountInNetAtomic":{"type":"string"}},"required":["bps","amountInNetAtomic"]}},"required":["slices","intervalSeconds","totalInAtomic","improvementBps","residualImpactBps","sliceImpactBps","referenceVenue","fees"]},"planReason":{"type":"string","enum":["below_floor","single_venue_best","no_improvement"]},"expiresAt":{"type":"integer","nullable":true},"decidedAt":{"type":"integer"},"elapsedMs":{"type":"integer"}},"required":["decisionId","quoteSessionId","best","bestByPrice","bestByTime","quotes","amountInNetAtomic","rejected","privacy","emptyReason","fees","expiresAt","decidedAt","elapsedMs"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/build":{"post":{"summary":"Turn a decision into the steps a wallet signs","description":"Returns the venue’s unsigned steps, approvals first, and opens a `PENDING_SIGNATURE` transfer row BEFORE returning them - so a signature the api never sees is still a transfer somebody can chase. A quote inside the TTL floor is re-priced once at the same venue and refused with `quote_drifted` if the fresh price is worse than the tolerance. Idempotent: a second build for one decision returns the same steps and the same transfer.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decisionId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"venue":{"type":"string","minLength":1,"maxLength":40},"quoteId":{"type":"string","minLength":1,"maxLength":200},"privacy":{"type":"boolean","default":false},"userIp":{"anyOf":[{"type":"string","format":"ip"},{"type":"string","format":"ip"}]}},"required":["decisionId"]}}}},"responses":{"200":{"description":"The transfer id and the unsigned steps","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"venue":{"type":"string"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["evm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gasLimit":{"type":"string"}},"required":["vm","step","chainId","to","data","value"]},{"type":"object","properties":{"vm":{"type":"string","enum":["svm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"serializedTx":{"type":"string"},"encoding":{"type":"string","enum":["base64","hex"]},"version":{"type":"string","enum":["v0","legacy"]},"setPriorityFee":{"type":"boolean"},"refreshBlockhash":{"type":"boolean"}},"required":["vm","step","serializedTx","encoding","version","setPriorityFee","refreshBlockhash"]},{"type":"object","properties":{"vm":{"type":"string","enum":["deposit-address"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"venueChainId":{"type":"string"},"address":{"type":"string"},"memo":{"type":"string"},"tokenAddress":{"type":"string","nullable":true},"exactAmountAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["vm","step","venueChainId","address","tokenAddress","exactAmountAtomic","expiresAt"]},{"type":"object","properties":{"vm":{"type":"string","enum":["sign"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"scheme":{"type":"string","enum":["eip712","eip191","ed25519","nep413"]},"payload":{"nullable":true}},"required":["vm","step","scheme"]},{"type":"object","properties":{"vm":{"type":"string","enum":["utxo"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"outputs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"valueSats":{"type":"string"}},"required":["address","valueSats"]}},"memo":{"type":"string"},"feeRateSatsPerVbyte":{"type":"number"}},"required":["vm","step","outputs"]},{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["call"]},"contract":{"type":"string"},"data":{"type":"string"},"callValueSun":{"type":"string"},"feeLimitSun":{"type":"string","nullable":true}},"required":["vm","step","kind","contract","data","callValueSun","feeLimitSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["transfer"]},"toAddress":{"type":"string"},"amountSun":{"type":"string"}},"required":["vm","step","kind","toAddress","amountSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["built"]},"raw":{"nullable":true}},"required":["vm","step","kind"]}]},{"type":"object","properties":{"vm":{"type":"string","enum":["unsupported"]},"step":{"type":"string","enum":["main"]},"reason":{"type":"string"}},"required":["vm","step","reason"]}]}},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"expiresAt":{"type":"integer"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"feeCapture":{"type":"string","enum":["venue-param","merged","separate-step","batch","none"]},"referralCapture":{"type":"string","nullable":true,"enum":["merged","batch","none",null]},"feeBasis":{"type":"string","enum":["carved","added"]},"feeBatch":{"type":"object","properties":{"chainId":{"type":"integer"},"stepIndexes":{"type":"array","items":{"type":"integer"}}},"required":["chainId","stepIndexes"]},"permit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"relayFeePermit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_relay_fee"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"spotTransfer":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_spot_transfer"]},"account":{"type":"string"},"amount":{"type":"string"},"nonce":{"type":"integer"},"signatureChainId":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["HyperliquidTransaction:UsdClassTransfer"]},"message":{"type":"object","properties":{"hyperliquidChain":{"type":"string","enum":["Mainnet"]},"amount":{"type":"string"},"toPerp":{"type":"boolean"},"nonce":{"type":"integer"}},"required":["hyperliquidChain","amount","toPerp","nonce"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","account","amount","nonce","signatureChainId","typedData"]},"requoted":{"type":"boolean"},"requote":{"type":"object","properties":{"basis":{"type":"string","enum":["netOutAtomic","amountOutAtomic","amountInAtomic"]},"originalAmount":{"type":"string"},"freshAmount":{"type":"string"},"driftBps":{"type":"integer"}},"required":["basis","originalAmount","freshAmount","driftBps"]},"boardDrift":{"type":"object","properties":{"corridorKey":{"type":"string"},"boardAmountOutAtomic":{"type":"string"},"firmAmountOutAtomic":{"type":"string"},"driftBps":{"type":"integer"},"boardAgeMs":{"type":"integer"}},"required":["corridorKey","boardAmountOutAtomic","firmAmountOutAtomic","driftBps","boardAgeMs"]}},"required":["transferId","venue","steps","expiresAt","amountInAtomic","expectedOutAtomic","minOutAtomic","feeCapture","referralCapture","feeBasis","requoted"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/plan/accept":{"post":{"summary":"Record the large-order plan the user took instead of the single route","description":"Writes the choice onto the stored decision - `/build` does not read it, so the decision still builds its single venue exactly as before. `POST /v1/bridge/split/start` is what reads it, for a split (BE-3644) and for a schedule (BE-3701) alike, and refuses `409 plan_not_accepted` without it. OPEN, like the quote and build routes beside it.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decisionId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"plan":{"type":"string","enum":["split","twap"]}},"required":["decisionId","plan"]}}}},"responses":{"200":{"description":"What was recorded","content":{"application/json":{"schema":{"type":"object","properties":{"decisionId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"accepted":{"type":"string","enum":["split","twap"]}},"required":["decisionId","accepted"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/split/start":{"post":{"summary":"Start executing an accepted split plan","description":"Opens ONE order made of N single-venue legs and builds the first one. The legs fire strictly one at a time and each is re-decided at fire time against live prices for the REMAINING amount, so leg two may go to a venue the plan never named - filling leg one moves the venue it used. The fee is charged ONCE on the whole order, on one leg. Requires the plan to have been accepted with `/bridge/plan/accept`. One order per wallet at a time.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decisionId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"privacy":{"type":"boolean","default":false}},"required":["decisionId"]}}}},"responses":{"200":{"description":"The order, with the first leg to sign","content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"},"kind":{"type":"string","enum":["split","twap"]},"twap":{"type":"object","nullable":true,"properties":{"slicesAtomic":{"type":"array","items":{"type":"string"}},"sliceIndex":{"type":"integer","minimum":0},"intervalSeconds":{"type":"integer","minimum":0,"exclusiveMinimum":true},"nextSliceDueAtMs":{"type":"integer","nullable":true}},"required":["slicesAtomic","sliceIndex","intervalSeconds","nextSliceDueAtMs"]},"status":{"type":"string","enum":["RUNNING","COMPLETED","PARTIAL","FAILED"]},"totalInAtomic":{"type":"string"},"routedInAtomic":{"type":"string"},"unroutedInAtomic":{"type":"string"},"unfilledInAtomic":{"type":"string"},"baseline":{"type":"object","properties":{"venue":{"type":"string"},"outAtomic":{"type":"string"}},"required":["venue","outAtomic"]},"realizedOutAtomic":{"type":"string","nullable":true},"savedVsBaselineBps":{"type":"integer","nullable":true},"fee":{"type":"object","properties":{"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"transferId":{"type":"string","nullable":true}},"required":["bps","amountAtomic","transferId"]},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"transferId":{"type":"string"},"venue":{"type":"string"},"plannedVenue":{"type":"string","nullable":true},"reroute":{"type":"object","nullable":true,"properties":{"plannedVenue":{"type":"string"},"reason":{"type":"string","enum":["better_rate","planned_venue_unavailable"]}},"required":["plannedVenue","reason"]},"status":{"type":"string"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true}},"required":["index","transferId","venue","plannedVenue","reroute","status","amountInAtomic","expectedOutAtomic","receivedAmountAtomic","sourceTxHash"]}},"next":{"type":"object","nullable":true,"properties":{"transferId":{"type":"string"},"venue":{"type":"string"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["evm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gasLimit":{"type":"string"}},"required":["vm","step","chainId","to","data","value"]},{"type":"object","properties":{"vm":{"type":"string","enum":["svm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"serializedTx":{"type":"string"},"encoding":{"type":"string","enum":["base64","hex"]},"version":{"type":"string","enum":["v0","legacy"]},"setPriorityFee":{"type":"boolean"},"refreshBlockhash":{"type":"boolean"}},"required":["vm","step","serializedTx","encoding","version","setPriorityFee","refreshBlockhash"]},{"type":"object","properties":{"vm":{"type":"string","enum":["deposit-address"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"venueChainId":{"type":"string"},"address":{"type":"string"},"memo":{"type":"string"},"tokenAddress":{"type":"string","nullable":true},"exactAmountAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["vm","step","venueChainId","address","tokenAddress","exactAmountAtomic","expiresAt"]},{"type":"object","properties":{"vm":{"type":"string","enum":["sign"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"scheme":{"type":"string","enum":["eip712","eip191","ed25519","nep413"]},"payload":{"nullable":true}},"required":["vm","step","scheme"]},{"type":"object","properties":{"vm":{"type":"string","enum":["utxo"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"outputs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"valueSats":{"type":"string"}},"required":["address","valueSats"]}},"memo":{"type":"string"},"feeRateSatsPerVbyte":{"type":"number"}},"required":["vm","step","outputs"]},{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["call"]},"contract":{"type":"string"},"data":{"type":"string"},"callValueSun":{"type":"string"},"feeLimitSun":{"type":"string","nullable":true}},"required":["vm","step","kind","contract","data","callValueSun","feeLimitSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["transfer"]},"toAddress":{"type":"string"},"amountSun":{"type":"string"}},"required":["vm","step","kind","toAddress","amountSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["built"]},"raw":{"nullable":true}},"required":["vm","step","kind"]}]},{"type":"object","properties":{"vm":{"type":"string","enum":["unsupported"]},"step":{"type":"string","enum":["main"]},"reason":{"type":"string"}},"required":["vm","step","reason"]}]}},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"expiresAt":{"type":"integer"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"feeCapture":{"type":"string","enum":["venue-param","merged","separate-step","batch","none"]},"referralCapture":{"type":"string","nullable":true,"enum":["merged","batch","none",null]},"feeBasis":{"type":"string","enum":["carved","added"]},"feeBatch":{"type":"object","properties":{"chainId":{"type":"integer"},"stepIndexes":{"type":"array","items":{"type":"integer"}}},"required":["chainId","stepIndexes"]},"permit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"relayFeePermit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_relay_fee"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"spotTransfer":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_spot_transfer"]},"account":{"type":"string"},"amount":{"type":"string"},"nonce":{"type":"integer"},"signatureChainId":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["HyperliquidTransaction:UsdClassTransfer"]},"message":{"type":"object","properties":{"hyperliquidChain":{"type":"string","enum":["Mainnet"]},"amount":{"type":"string"},"toPerp":{"type":"boolean"},"nonce":{"type":"integer"}},"required":["hyperliquidChain","amount","toPerp","nonce"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","account","amount","nonce","signatureChainId","typedData"]},"requoted":{"type":"boolean"},"requote":{"type":"object","properties":{"basis":{"type":"string","enum":["netOutAtomic","amountOutAtomic","amountInAtomic"]},"originalAmount":{"type":"string"},"freshAmount":{"type":"string"},"driftBps":{"type":"integer"}},"required":["basis","originalAmount","freshAmount","driftBps"]},"boardDrift":{"type":"object","properties":{"corridorKey":{"type":"string"},"boardAmountOutAtomic":{"type":"string"},"firmAmountOutAtomic":{"type":"string"},"driftBps":{"type":"integer"},"boardAgeMs":{"type":"integer"}},"required":["corridorKey","boardAmountOutAtomic","firmAmountOutAtomic","driftBps","boardAgeMs"]}},"required":["transferId","venue","steps","expiresAt","amountInAtomic","expectedOutAtomic","minOutAtomic","feeCapture","referralCapture","feeBasis","requoted"]}},"required":["groupId","kind","twap","status","totalInAtomic","routedInAtomic","unroutedInAtomic","unfilledInAtomic","baseline","realizedOutAtomic","savedVsBaselineBps","fee","legs","next"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/split/next":{"post":{"summary":"Decide and build the next leg of a running order","description":"Re-quotes the whole corridor for what is LEFT of the order, re-runs the split planner on the fresh curves, and builds whichever venue wins - which owes the accepted plan nothing. Refuses `leg_in_flight` while a leg has not settled, `remainder_drifted` when the fresh market is worse than the accepted plan by more than the tolerance, and answers `next: null` when the order is done or has stopped. Idempotent: a leg already built and not yet signed is handed back rather than opened twice.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"privacy":{"type":"boolean","default":false}},"required":["groupId"]}}}},"responses":{"200":{"description":"The order, with the next leg to sign or null","content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"},"kind":{"type":"string","enum":["split","twap"]},"twap":{"type":"object","nullable":true,"properties":{"slicesAtomic":{"type":"array","items":{"type":"string"}},"sliceIndex":{"type":"integer","minimum":0},"intervalSeconds":{"type":"integer","minimum":0,"exclusiveMinimum":true},"nextSliceDueAtMs":{"type":"integer","nullable":true}},"required":["slicesAtomic","sliceIndex","intervalSeconds","nextSliceDueAtMs"]},"status":{"type":"string","enum":["RUNNING","COMPLETED","PARTIAL","FAILED"]},"totalInAtomic":{"type":"string"},"routedInAtomic":{"type":"string"},"unroutedInAtomic":{"type":"string"},"unfilledInAtomic":{"type":"string"},"baseline":{"type":"object","properties":{"venue":{"type":"string"},"outAtomic":{"type":"string"}},"required":["venue","outAtomic"]},"realizedOutAtomic":{"type":"string","nullable":true},"savedVsBaselineBps":{"type":"integer","nullable":true},"fee":{"type":"object","properties":{"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"transferId":{"type":"string","nullable":true}},"required":["bps","amountAtomic","transferId"]},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"transferId":{"type":"string"},"venue":{"type":"string"},"plannedVenue":{"type":"string","nullable":true},"reroute":{"type":"object","nullable":true,"properties":{"plannedVenue":{"type":"string"},"reason":{"type":"string","enum":["better_rate","planned_venue_unavailable"]}},"required":["plannedVenue","reason"]},"status":{"type":"string"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true}},"required":["index","transferId","venue","plannedVenue","reroute","status","amountInAtomic","expectedOutAtomic","receivedAmountAtomic","sourceTxHash"]}},"next":{"type":"object","nullable":true,"properties":{"transferId":{"type":"string"},"venue":{"type":"string"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["evm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gasLimit":{"type":"string"}},"required":["vm","step","chainId","to","data","value"]},{"type":"object","properties":{"vm":{"type":"string","enum":["svm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"serializedTx":{"type":"string"},"encoding":{"type":"string","enum":["base64","hex"]},"version":{"type":"string","enum":["v0","legacy"]},"setPriorityFee":{"type":"boolean"},"refreshBlockhash":{"type":"boolean"}},"required":["vm","step","serializedTx","encoding","version","setPriorityFee","refreshBlockhash"]},{"type":"object","properties":{"vm":{"type":"string","enum":["deposit-address"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"venueChainId":{"type":"string"},"address":{"type":"string"},"memo":{"type":"string"},"tokenAddress":{"type":"string","nullable":true},"exactAmountAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["vm","step","venueChainId","address","tokenAddress","exactAmountAtomic","expiresAt"]},{"type":"object","properties":{"vm":{"type":"string","enum":["sign"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"scheme":{"type":"string","enum":["eip712","eip191","ed25519","nep413"]},"payload":{"nullable":true}},"required":["vm","step","scheme"]},{"type":"object","properties":{"vm":{"type":"string","enum":["utxo"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"outputs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"valueSats":{"type":"string"}},"required":["address","valueSats"]}},"memo":{"type":"string"},"feeRateSatsPerVbyte":{"type":"number"}},"required":["vm","step","outputs"]},{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["call"]},"contract":{"type":"string"},"data":{"type":"string"},"callValueSun":{"type":"string"},"feeLimitSun":{"type":"string","nullable":true}},"required":["vm","step","kind","contract","data","callValueSun","feeLimitSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["transfer"]},"toAddress":{"type":"string"},"amountSun":{"type":"string"}},"required":["vm","step","kind","toAddress","amountSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["built"]},"raw":{"nullable":true}},"required":["vm","step","kind"]}]},{"type":"object","properties":{"vm":{"type":"string","enum":["unsupported"]},"step":{"type":"string","enum":["main"]},"reason":{"type":"string"}},"required":["vm","step","reason"]}]}},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"expiresAt":{"type":"integer"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"feeCapture":{"type":"string","enum":["venue-param","merged","separate-step","batch","none"]},"referralCapture":{"type":"string","nullable":true,"enum":["merged","batch","none",null]},"feeBasis":{"type":"string","enum":["carved","added"]},"feeBatch":{"type":"object","properties":{"chainId":{"type":"integer"},"stepIndexes":{"type":"array","items":{"type":"integer"}}},"required":["chainId","stepIndexes"]},"permit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"relayFeePermit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_relay_fee"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"spotTransfer":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_spot_transfer"]},"account":{"type":"string"},"amount":{"type":"string"},"nonce":{"type":"integer"},"signatureChainId":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["HyperliquidTransaction:UsdClassTransfer"]},"message":{"type":"object","properties":{"hyperliquidChain":{"type":"string","enum":["Mainnet"]},"amount":{"type":"string"},"toPerp":{"type":"boolean"},"nonce":{"type":"integer"}},"required":["hyperliquidChain","amount","toPerp","nonce"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","account","amount","nonce","signatureChainId","typedData"]},"requoted":{"type":"boolean"},"requote":{"type":"object","properties":{"basis":{"type":"string","enum":["netOutAtomic","amountOutAtomic","amountInAtomic"]},"originalAmount":{"type":"string"},"freshAmount":{"type":"string"},"driftBps":{"type":"integer"}},"required":["basis","originalAmount","freshAmount","driftBps"]},"boardDrift":{"type":"object","properties":{"corridorKey":{"type":"string"},"boardAmountOutAtomic":{"type":"string"},"firmAmountOutAtomic":{"type":"string"},"driftBps":{"type":"integer"},"boardAgeMs":{"type":"integer"}},"required":["corridorKey","boardAmountOutAtomic","firmAmountOutAtomic","driftBps","boardAgeMs"]}},"required":["transferId","venue","steps","expiresAt","amountInAtomic","expectedOutAtomic","minOutAtomic","feeCapture","referralCapture","feeBasis","requoted"]}},"required":["groupId","kind","twap","status","totalInAtomic","routedInAtomic","unroutedInAtomic","unfilledInAtomic","baseline","realizedOutAtomic","savedVsBaselineBps","fee","legs","next"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/split/groups/{id}":{"get":{"summary":"Read one split order and its legs","description":"Open by id, like a transfer. Says what filled, what did not, and the unfilled remainder in atomic units - plus every leg that routed somewhere the plan did not name, and why.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The order and its legs","content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"},"kind":{"type":"string","enum":["split","twap"]},"twap":{"type":"object","nullable":true,"properties":{"slicesAtomic":{"type":"array","items":{"type":"string"}},"sliceIndex":{"type":"integer","minimum":0},"intervalSeconds":{"type":"integer","minimum":0,"exclusiveMinimum":true},"nextSliceDueAtMs":{"type":"integer","nullable":true}},"required":["slicesAtomic","sliceIndex","intervalSeconds","nextSliceDueAtMs"]},"status":{"type":"string","enum":["RUNNING","COMPLETED","PARTIAL","FAILED"]},"totalInAtomic":{"type":"string"},"routedInAtomic":{"type":"string"},"unroutedInAtomic":{"type":"string"},"unfilledInAtomic":{"type":"string"},"baseline":{"type":"object","properties":{"venue":{"type":"string"},"outAtomic":{"type":"string"}},"required":["venue","outAtomic"]},"realizedOutAtomic":{"type":"string","nullable":true},"savedVsBaselineBps":{"type":"integer","nullable":true},"fee":{"type":"object","properties":{"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"transferId":{"type":"string","nullable":true}},"required":["bps","amountAtomic","transferId"]},"legs":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"transferId":{"type":"string"},"venue":{"type":"string"},"plannedVenue":{"type":"string","nullable":true},"reroute":{"type":"object","nullable":true,"properties":{"plannedVenue":{"type":"string"},"reason":{"type":"string","enum":["better_rate","planned_venue_unavailable"]}},"required":["plannedVenue","reason"]},"status":{"type":"string"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true}},"required":["index","transferId","venue","plannedVenue","reroute","status","amountInAtomic","expectedOutAtomic","receivedAmountAtomic","sourceTxHash"]}},"next":{"type":"object","nullable":true,"properties":{"transferId":{"type":"string"},"venue":{"type":"string"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["evm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gasLimit":{"type":"string"}},"required":["vm","step","chainId","to","data","value"]},{"type":"object","properties":{"vm":{"type":"string","enum":["svm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"serializedTx":{"type":"string"},"encoding":{"type":"string","enum":["base64","hex"]},"version":{"type":"string","enum":["v0","legacy"]},"setPriorityFee":{"type":"boolean"},"refreshBlockhash":{"type":"boolean"}},"required":["vm","step","serializedTx","encoding","version","setPriorityFee","refreshBlockhash"]},{"type":"object","properties":{"vm":{"type":"string","enum":["deposit-address"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"venueChainId":{"type":"string"},"address":{"type":"string"},"memo":{"type":"string"},"tokenAddress":{"type":"string","nullable":true},"exactAmountAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["vm","step","venueChainId","address","tokenAddress","exactAmountAtomic","expiresAt"]},{"type":"object","properties":{"vm":{"type":"string","enum":["sign"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"scheme":{"type":"string","enum":["eip712","eip191","ed25519","nep413"]},"payload":{"nullable":true}},"required":["vm","step","scheme"]},{"type":"object","properties":{"vm":{"type":"string","enum":["utxo"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"outputs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"valueSats":{"type":"string"}},"required":["address","valueSats"]}},"memo":{"type":"string"},"feeRateSatsPerVbyte":{"type":"number"}},"required":["vm","step","outputs"]},{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["call"]},"contract":{"type":"string"},"data":{"type":"string"},"callValueSun":{"type":"string"},"feeLimitSun":{"type":"string","nullable":true}},"required":["vm","step","kind","contract","data","callValueSun","feeLimitSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["transfer"]},"toAddress":{"type":"string"},"amountSun":{"type":"string"}},"required":["vm","step","kind","toAddress","amountSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["built"]},"raw":{"nullable":true}},"required":["vm","step","kind"]}]},{"type":"object","properties":{"vm":{"type":"string","enum":["unsupported"]},"step":{"type":"string","enum":["main"]},"reason":{"type":"string"}},"required":["vm","step","reason"]}]}},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"expiresAt":{"type":"integer"},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"feeCapture":{"type":"string","enum":["venue-param","merged","separate-step","batch","none"]},"referralCapture":{"type":"string","nullable":true,"enum":["merged","batch","none",null]},"feeBasis":{"type":"string","enum":["carved","added"]},"feeBatch":{"type":"object","properties":{"chainId":{"type":"integer"},"stepIndexes":{"type":"array","items":{"type":"integer"}}},"required":["chainId","stepIndexes"]},"permit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"relayFeePermit":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_relay_fee"]},"owner":{"type":"string"},"spender":{"type":"string"},"valueAtomic":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["Permit"]},"message":{"type":"object","properties":{"owner":{"type":"string"},"spender":{"type":"string"},"value":{"type":"string"},"nonce":{"type":"string"},"deadline":{"type":"string"}},"required":["owner","spender","value","nonce","deadline"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","owner","spender","valueAtomic","nonce","deadline","typedData"]},"spotTransfer":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_spot_transfer"]},"account":{"type":"string"},"amount":{"type":"string"},"nonce":{"type":"integer"},"signatureChainId":{"type":"string"},"typedData":{"type":"object","properties":{"domain":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["name","type"]}}},"primaryType":{"type":"string","enum":["HyperliquidTransaction:UsdClassTransfer"]},"message":{"type":"object","properties":{"hyperliquidChain":{"type":"string","enum":["Mainnet"]},"amount":{"type":"string"},"toPerp":{"type":"boolean"},"nonce":{"type":"integer"}},"required":["hyperliquidChain","amount","toPerp","nonce"]}},"required":["domain","types","primaryType","message"]}},"default":null,"required":["kind","account","amount","nonce","signatureChainId","typedData"]},"requoted":{"type":"boolean"},"requote":{"type":"object","properties":{"basis":{"type":"string","enum":["netOutAtomic","amountOutAtomic","amountInAtomic"]},"originalAmount":{"type":"string"},"freshAmount":{"type":"string"},"driftBps":{"type":"integer"}},"required":["basis","originalAmount","freshAmount","driftBps"]},"boardDrift":{"type":"object","properties":{"corridorKey":{"type":"string"},"boardAmountOutAtomic":{"type":"string"},"firmAmountOutAtomic":{"type":"string"},"driftBps":{"type":"integer"},"boardAgeMs":{"type":"integer"}},"required":["corridorKey","boardAmountOutAtomic","firmAmountOutAtomic","driftBps","boardAgeMs"]}},"required":["transferId","venue","steps","expiresAt","amountInAtomic","expectedOutAtomic","minOutAtomic","feeCapture","referralCapture","feeBasis","requoted"]}},"required":["groupId","kind","twap","status","totalInAtomic","routedInAtomic","unroutedInAtomic","unfilledInAtomic","baseline","realizedOutAtomic","savedVsBaselineBps","fee","legs","next"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}/submit":{"post":{"summary":"Hand back the signed transaction","description":"The primary shape is `{ signedTransaction }`: the api decodes it, checks it against the exact steps this transfer was built with, broadcasts it through its OWN nodes and records the resulting hash - so tracking never depends on the wallet reporting back. A mismatch is 400 `built_mismatch` and the row stays `PENDING_SIGNATURE`. `{ txHash }` is the fallback for a wallet that already broadcast, validated per VM. Idempotent on both shapes.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signedTransaction":{"type":"string","minLength":1,"maxLength":100000},"txHash":{"type":"string","minLength":1,"maxLength":128},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"userIp":{"anyOf":[{"type":"string","format":"ip"},{"type":"string","format":"ip"}]}}}}}},"responses":{"200":{"description":"The transfer’s new state and the hash on record","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"txHash":{"type":"string","nullable":true},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"accepted":{"type":"boolean"},"verification":{"type":"string","nullable":true,"enum":["verified","pending","unverified_no_rpc","unverified_rpc_error","refuted",null]}},"required":["transferId","status","txHash","step","accepted","verification"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}/redeem":{"post":{"summary":"Build the destination-chain step that finishes a transfer waiting on a claim","description":"A burn-and-mint rail attests the burn and somebody must then hand the attestation to the destination chain to mint. Nobody relays that here, so the recipient signs it: this builds the `redeem` step from the venue’s own attestation, at the moment it is asked for, because the proof does not exist at build time. Refused until the venue reports the transfer as waiting on a claim.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The redeem step to sign on the destination chain","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"step":{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["evm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"chainId":{"type":"integer"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gasLimit":{"type":"string"}},"required":["vm","step","chainId","to","data","value"]},{"type":"object","properties":{"vm":{"type":"string","enum":["svm"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"serializedTx":{"type":"string"},"encoding":{"type":"string","enum":["base64","hex"]},"version":{"type":"string","enum":["v0","legacy"]},"setPriorityFee":{"type":"boolean"},"refreshBlockhash":{"type":"boolean"}},"required":["vm","step","serializedTx","encoding","version","setPriorityFee","refreshBlockhash"]},{"type":"object","properties":{"vm":{"type":"string","enum":["deposit-address"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"venueChainId":{"type":"string"},"address":{"type":"string"},"memo":{"type":"string"},"tokenAddress":{"type":"string","nullable":true},"exactAmountAtomic":{"type":"string"},"expiresAt":{"type":"integer"}},"required":["vm","step","venueChainId","address","tokenAddress","exactAmountAtomic","expiresAt"]},{"type":"object","properties":{"vm":{"type":"string","enum":["sign"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"scheme":{"type":"string","enum":["eip712","eip191","ed25519","nep413"]},"payload":{"nullable":true}},"required":["vm","step","scheme"]},{"type":"object","properties":{"vm":{"type":"string","enum":["utxo"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"outputs":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"valueSats":{"type":"string"}},"required":["address","valueSats"]}},"memo":{"type":"string"},"feeRateSatsPerVbyte":{"type":"number"}},"required":["vm","step","outputs"]},{"oneOf":[{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["call"]},"contract":{"type":"string"},"data":{"type":"string"},"callValueSun":{"type":"string"},"feeLimitSun":{"type":"string","nullable":true}},"required":["vm","step","kind","contract","data","callValueSun","feeLimitSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["transfer"]},"toAddress":{"type":"string"},"amountSun":{"type":"string"}},"required":["vm","step","kind","toAddress","amountSun"]},{"type":"object","properties":{"vm":{"type":"string","enum":["tron"]},"step":{"type":"string","enum":["approve","fee","main","redeem"]},"kind":{"type":"string","enum":["built"]},"raw":{"nullable":true}},"required":["vm","step","kind"]}]},{"type":"object","properties":{"vm":{"type":"string","enum":["unsupported"]},"step":{"type":"string","enum":["main"]},"reason":{"type":"string"}},"required":["vm","step","reason"]}]},"expiresAtMs":{"type":"integer"}},"required":["transferId","step","expiresAtMs"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}/redeem/submit":{"post":{"summary":"Hand back the signed redeem step","description":"Same two shapes as submit: `{ signedTransaction }` is checked against the redeem step this transfer was handed and broadcast through the api’s own destination-chain node; `{ txHash }` is a hash the wallet already broadcast. Either way the destination hash goes on record and the poller confirms the mint.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signedTransaction":{"type":"string","minLength":1,"maxLength":100000},"txHash":{"type":"string","minLength":1,"maxLength":128}}}}}},"responses":{"200":{"description":"The transfer’s state and the destination hash on record","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"destinationTxHash":{"type":"string"},"accepted":{"type":"boolean"}},"required":["transferId","status","destinationTxHash","accepted"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}/permit":{"post":{"summary":"Hand back the signed permit that makes the HyperCore deposit gasless","description":"A composed HyperCore build answers with a `permit`: an EIP-712 message that authorises Hyperliquid’s `Bridge2` to pull the bridge leg’s guaranteed minimum out of the recipient’s wallet, once, and credit their own HyperCore account with it. Sign it with `signTypedData` and post the 65 bytes back here, BEFORE signing the source steps. The platform’s relayer then submits the deposit and pays the Arbitrum gas, so the user never needs ETH on Arbitrum and signs nothing on chain. Refused `permit_not_offered` when this transfer was never offered one, `permit_invalid` when the signature is not the recipient’s over that exact offer or the offer has expired, and `already_deposited` once a deposit is on record. Nothing is spent by calling this: a permit that is never relayed simply goes unused, and the manual claim on `/redeem` stays available either way.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]{130}$"},"relayFeeSignature":{"type":"string","pattern":"^0x[0-9a-fA-F]{130}$"}},"required":["signature"]}}}},"responses":{"200":{"description":"The permit was verified and filed; the relayed lane is armed","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"accepted":{"type":"boolean"},"mode":{"type":"string","enum":["relayed"]}},"required":["transferId","accepted","mode"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}/spot-transfer":{"post":{"summary":"Hand back the signed transfer that moves the HyperCore credit into spot","description":"A composed HyperCore build whose destination is `USDCSPOT` answers with a `spotTransfer`: the EIP-712 `usdClassTransfer` that moves the credit out of the perps balance the bridge deposit lands in. Hyperliquid’s `Bridge2` can only ever credit perps, and only the account owner can sign the move - so it is signed here, up front, in the same session as the permit and the source steps, and the platform submits it once the deposit has credited. Sign it with `signTypedData` and post back the 65 bytes AND the nonce that was actually signed. Refused `spot_transfer_not_offered` when this transfer is not headed for spot or was never offered one, `spot_transfer_invalid` when the signature is not the recipient’s over that offer or the nonce is outside Hyperliquid’s `(T - 2 days, T + 1 day)` window, and `already_moved` once the exchange has accepted the move. Nothing is spent by calling this, and nothing is lost by not: an unsigned or failed move leaves the dollars credited to the user’s own HyperCore account in perps, with the row saying so and the same message available to sign.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]{130}$"},"nonce":{"type":"integer","minimum":0}},"required":["signature","nonce"]}}}},"responses":{"200":{"description":"The signature was verified and filed; the platform will make the move","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"accepted":{"type":"boolean"},"balance":{"type":"string","enum":["spot"]}},"required":["transferId","accepted","balance"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/transfers/{id}":{"get":{"summary":"Read one transfer","description":"Open by id: a transfer id is an unguessable uuid, and a user who quoted anonymously must still be able to see what happened to their own transfer.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The transfer","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"statusDetail":{"type":"string","nullable":true},"venue":{"type":"string"},"fromChain":{"type":"string"},"toChain":{"type":"string"},"fromAsset":{"type":"string","nullable":true},"toAsset":{"type":"string","nullable":true},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"receivedAsset":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true},"sourceTxVerification":{"type":"string","nullable":true,"enum":["verified","pending","unverified_no_rpc","unverified_rpc_error","refuted",null]},"destinationTxHash":{"type":"string","nullable":true},"feeTxHash":{"type":"string","nullable":true},"claim":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["redeem","deposit","spot_transfer"]},"chain":{"type":"string"},"vm":{"type":"string","enum":["evm","svm"]}},"required":["kind","chain","vm"]},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]},"recipient":{"type":"string"},"txHash":{"type":"string","nullable":true},"creditedAmountAtomic":{"type":"string","nullable":true},"mode":{"type":"string","enum":["relayed","manual","forwarded"]},"balance":{"type":"string","enum":["perps","spot"]},"spotTxHash":{"type":"string","nullable":true},"spotMovedAt":{"type":"integer","nullable":true},"relayGas":{"type":"object","nullable":true,"properties":{"signedGasPriceWei":{"type":"string"},"maxFeePerGasWei":{"type":"string"},"effectiveGasPriceWei":{"type":"string","nullable":true},"pullSignedGasPriceWei":{"type":"string","nullable":true},"pullEffectiveGasPriceWei":{"type":"string","nullable":true}},"required":["signedGasPriceWei","maxFeePerGasWei","effectiveGasPriceWei","pullSignedGasPriceWei","pullEffectiveGasPriceWei"]}},"required":["kind","chain","vm","recipient","txHash","creditedAmountAtomic","mode","balance","spotTxHash","spotMovedAt","relayGas"]},"finalDestination":{"type":"object","nullable":true,"properties":{"chainKey":{"type":"string","enum":["hypercore"]},"asset":{"type":"string","enum":["USDC"]}},"required":["chainKey","asset"]},"requesterWallet":{"type":"string"},"recipientWallet":{"type":"string"},"avgSavedBps":{"type":"integer","nullable":true},"savedVsWorstBps":{"type":"integer","nullable":true},"savingsQuoteCount":{"type":"integer","nullable":true},"usdValueBridged":{"type":"string","nullable":true},"usdValueSaved":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"tierSavedBps":{"type":"integer","nullable":true},"txHash":{"type":"string","nullable":true}},"required":["kind","status","bps","amountAtomic","asset","chain","wallet","tierSavedBps","txHash"]}},"privacy":{"type":"boolean"},"privacyModel":{"type":"string","nullable":true},"userIp":{"type":"string","nullable":true},"buildExpiresAtMs":{"type":"integer"},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"createdAt":{"type":"integer"},"submittedAt":{"type":"integer","nullable":true},"updatedAt":{"type":"integer"},"completedAt":{"type":"integer","nullable":true}},"required":["transferId","status","statusDetail","venue","fromChain","toChain","fromAsset","toAsset","amountInAtomic","expectedOutAtomic","minOutAtomic","receivedAmountAtomic","receivedAsset","sourceTxHash","sourceTxVerification","destinationTxHash","feeTxHash","claim","postStep","finalDestination","requesterWallet","recipientWallet","avgSavedBps","savedVsWorstBps","savingsQuoteCount","usdValueBridged","usdValueSaved","fees","privacy","privacyModel","buildExpiresAtMs","createdAt","submittedAt","updatedAt","completedAt"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/orders/{id}":{"get":{"summary":"Read one order - the same record as a transfer","description":"An ALIAS of `GET /v1/bridge/transfers/{id}`, on the same handler and answering the identical body. An order and a transfer are one record here: the id comes back from `/bridge/build` and tracks the work from that moment on. The alias exists because \"order\" is the word an integrator already has for the thing they are tracking. Open by id, like the route it aliases.","tags":["bridge"],"parameters":[{"schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The order","content":{"application/json":{"schema":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"statusDetail":{"type":"string","nullable":true},"venue":{"type":"string"},"fromChain":{"type":"string"},"toChain":{"type":"string"},"fromAsset":{"type":"string","nullable":true},"toAsset":{"type":"string","nullable":true},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"receivedAsset":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true},"sourceTxVerification":{"type":"string","nullable":true,"enum":["verified","pending","unverified_no_rpc","unverified_rpc_error","refuted",null]},"destinationTxHash":{"type":"string","nullable":true},"feeTxHash":{"type":"string","nullable":true},"claim":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["redeem","deposit","spot_transfer"]},"chain":{"type":"string"},"vm":{"type":"string","enum":["evm","svm"]}},"required":["kind","chain","vm"]},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]},"recipient":{"type":"string"},"txHash":{"type":"string","nullable":true},"creditedAmountAtomic":{"type":"string","nullable":true},"mode":{"type":"string","enum":["relayed","manual","forwarded"]},"balance":{"type":"string","enum":["perps","spot"]},"spotTxHash":{"type":"string","nullable":true},"spotMovedAt":{"type":"integer","nullable":true},"relayGas":{"type":"object","nullable":true,"properties":{"signedGasPriceWei":{"type":"string"},"maxFeePerGasWei":{"type":"string"},"effectiveGasPriceWei":{"type":"string","nullable":true},"pullSignedGasPriceWei":{"type":"string","nullable":true},"pullEffectiveGasPriceWei":{"type":"string","nullable":true}},"required":["signedGasPriceWei","maxFeePerGasWei","effectiveGasPriceWei","pullSignedGasPriceWei","pullEffectiveGasPriceWei"]}},"required":["kind","chain","vm","recipient","txHash","creditedAmountAtomic","mode","balance","spotTxHash","spotMovedAt","relayGas"]},"finalDestination":{"type":"object","nullable":true,"properties":{"chainKey":{"type":"string","enum":["hypercore"]},"asset":{"type":"string","enum":["USDC"]}},"required":["chainKey","asset"]},"requesterWallet":{"type":"string"},"recipientWallet":{"type":"string"},"avgSavedBps":{"type":"integer","nullable":true},"savedVsWorstBps":{"type":"integer","nullable":true},"savingsQuoteCount":{"type":"integer","nullable":true},"usdValueBridged":{"type":"string","nullable":true},"usdValueSaved":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"tierSavedBps":{"type":"integer","nullable":true},"txHash":{"type":"string","nullable":true}},"required":["kind","status","bps","amountAtomic","asset","chain","wallet","tierSavedBps","txHash"]}},"privacy":{"type":"boolean"},"privacyModel":{"type":"string","nullable":true},"userIp":{"type":"string","nullable":true},"buildExpiresAtMs":{"type":"integer"},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"createdAt":{"type":"integer"},"submittedAt":{"type":"integer","nullable":true},"updatedAt":{"type":"integer"},"completedAt":{"type":"integer","nullable":true}},"required":["transferId","status","statusDetail","venue","fromChain","toChain","fromAsset","toAsset","amountInAtomic","expectedOutAtomic","minOutAtomic","receivedAmountAtomic","receivedAsset","sourceTxHash","sourceTxVerification","destinationTxHash","feeTxHash","claim","postStep","finalDestination","requesterWallet","recipientWallet","avgSavedBps","savedVsWorstBps","savingsQuoteCount","usdValueBridged","usdValueSaved","fees","privacy","privacyModel","buildExpiresAtMs","createdAt","submittedAt","updatedAt","completedAt"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/orders":{"get":{"summary":"The caller’s own orders for one of their wallets","description":"Requires a session, newest first, keyset paginated - the same scoping `/bridge/history` uses, narrowed to one `sender`. The address is NOT the ownership predicate: whose orders these are still comes from the session, and `sender` only subtracts from the page that session may already read. A wallet the caller has not linked is `403 wallet_not_linked` rather than an empty page. Every row carries `userIp` here, which the open id-addressed reads omit.","tags":["bridge"],"parameters":[{"schema":{"type":"string","maxLength":4096},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":26,"maxLength":600},"required":true,"name":"sender","in":"query"}],"responses":{"200":{"description":"One page of the caller’s orders for that wallet","content":{"application/json":{"schema":{"type":"object","properties":{"transfers":{"type":"array","items":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"statusDetail":{"type":"string","nullable":true},"venue":{"type":"string"},"fromChain":{"type":"string"},"toChain":{"type":"string"},"fromAsset":{"type":"string","nullable":true},"toAsset":{"type":"string","nullable":true},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"receivedAsset":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true},"sourceTxVerification":{"type":"string","nullable":true,"enum":["verified","pending","unverified_no_rpc","unverified_rpc_error","refuted",null]},"destinationTxHash":{"type":"string","nullable":true},"feeTxHash":{"type":"string","nullable":true},"claim":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["redeem","deposit","spot_transfer"]},"chain":{"type":"string"},"vm":{"type":"string","enum":["evm","svm"]}},"required":["kind","chain","vm"]},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]},"recipient":{"type":"string"},"txHash":{"type":"string","nullable":true},"creditedAmountAtomic":{"type":"string","nullable":true},"mode":{"type":"string","enum":["relayed","manual","forwarded"]},"balance":{"type":"string","enum":["perps","spot"]},"spotTxHash":{"type":"string","nullable":true},"spotMovedAt":{"type":"integer","nullable":true},"relayGas":{"type":"object","nullable":true,"properties":{"signedGasPriceWei":{"type":"string"},"maxFeePerGasWei":{"type":"string"},"effectiveGasPriceWei":{"type":"string","nullable":true},"pullSignedGasPriceWei":{"type":"string","nullable":true},"pullEffectiveGasPriceWei":{"type":"string","nullable":true}},"required":["signedGasPriceWei","maxFeePerGasWei","effectiveGasPriceWei","pullSignedGasPriceWei","pullEffectiveGasPriceWei"]}},"required":["kind","chain","vm","recipient","txHash","creditedAmountAtomic","mode","balance","spotTxHash","spotMovedAt","relayGas"]},"finalDestination":{"type":"object","nullable":true,"properties":{"chainKey":{"type":"string","enum":["hypercore"]},"asset":{"type":"string","enum":["USDC"]}},"required":["chainKey","asset"]},"requesterWallet":{"type":"string"},"recipientWallet":{"type":"string"},"avgSavedBps":{"type":"integer","nullable":true},"savedVsWorstBps":{"type":"integer","nullable":true},"savingsQuoteCount":{"type":"integer","nullable":true},"usdValueBridged":{"type":"string","nullable":true},"usdValueSaved":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"tierSavedBps":{"type":"integer","nullable":true},"txHash":{"type":"string","nullable":true}},"required":["kind","status","bps","amountAtomic","asset","chain","wallet","tierSavedBps","txHash"]}},"privacy":{"type":"boolean"},"privacyModel":{"type":"string","nullable":true},"userIp":{"type":"string","nullable":true},"buildExpiresAtMs":{"type":"integer"},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"createdAt":{"type":"integer"},"submittedAt":{"type":"integer","nullable":true},"updatedAt":{"type":"integer"},"completedAt":{"type":"integer","nullable":true}},"required":["transferId","status","statusDetail","venue","fromChain","toChain","fromAsset","toAsset","amountInAtomic","expectedOutAtomic","minOutAtomic","receivedAmountAtomic","receivedAsset","sourceTxHash","sourceTxVerification","destinationTxHash","feeTxHash","claim","postStep","finalDestination","requesterWallet","recipientWallet","avgSavedBps","savedVsWorstBps","savingsQuoteCount","usdValueBridged","usdValueSaved","fees","privacy","privacyModel","buildExpiresAtMs","createdAt","submittedAt","updatedAt","completedAt"]}},"nextCursor":{"type":"string","nullable":true}},"required":["transfers","nextCursor"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"This route requires a wallet sign-in","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"403":{"description":"That wallet is not linked to this account","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/history":{"get":{"summary":"The caller’s own transfers","description":"Requires a session. Newest first, keyset paginated: pass the previous page’s `nextCursor` back as `cursor`. There is deliberately no user parameter - whose transfers these are comes from the session.","tags":["bridge"],"parameters":[{"schema":{"type":"string","maxLength":4096},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"One page of the caller’s transfers","content":{"application/json":{"schema":{"type":"object","properties":{"transfers":{"type":"array","items":{"type":"object","properties":{"transferId":{"type":"string"},"status":{"type":"string"},"statusDetail":{"type":"string","nullable":true},"venue":{"type":"string"},"fromChain":{"type":"string"},"toChain":{"type":"string"},"fromAsset":{"type":"string","nullable":true},"toAsset":{"type":"string","nullable":true},"amountInAtomic":{"type":"string"},"expectedOutAtomic":{"type":"string"},"minOutAtomic":{"type":"string"},"receivedAmountAtomic":{"type":"string","nullable":true},"receivedAsset":{"type":"string","nullable":true},"sourceTxHash":{"type":"string","nullable":true},"sourceTxVerification":{"type":"string","nullable":true,"enum":["verified","pending","unverified_no_rpc","unverified_rpc_error","refuted",null]},"destinationTxHash":{"type":"string","nullable":true},"feeTxHash":{"type":"string","nullable":true},"claim":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["redeem","deposit","spot_transfer"]},"chain":{"type":"string"},"vm":{"type":"string","enum":["evm","svm"]}},"required":["kind","chain","vm"]},"postStep":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["hypercore_deposit"]},"chain":{"type":"string","enum":["arbitrum"]},"vm":{"type":"string","enum":["evm"]},"recipient":{"type":"string"},"txHash":{"type":"string","nullable":true},"creditedAmountAtomic":{"type":"string","nullable":true},"mode":{"type":"string","enum":["relayed","manual","forwarded"]},"balance":{"type":"string","enum":["perps","spot"]},"spotTxHash":{"type":"string","nullable":true},"spotMovedAt":{"type":"integer","nullable":true},"relayGas":{"type":"object","nullable":true,"properties":{"signedGasPriceWei":{"type":"string"},"maxFeePerGasWei":{"type":"string"},"effectiveGasPriceWei":{"type":"string","nullable":true},"pullSignedGasPriceWei":{"type":"string","nullable":true},"pullEffectiveGasPriceWei":{"type":"string","nullable":true}},"required":["signedGasPriceWei","maxFeePerGasWei","effectiveGasPriceWei","pullSignedGasPriceWei","pullEffectiveGasPriceWei"]}},"required":["kind","chain","vm","recipient","txHash","creditedAmountAtomic","mode","balance","spotTxHash","spotMovedAt","relayGas"]},"finalDestination":{"type":"object","nullable":true,"properties":{"chainKey":{"type":"string","enum":["hypercore"]},"asset":{"type":"string","enum":["USDC"]}},"required":["chainKey","asset"]},"requesterWallet":{"type":"string"},"recipientWallet":{"type":"string"},"avgSavedBps":{"type":"integer","nullable":true},"savedVsWorstBps":{"type":"integer","nullable":true},"savingsQuoteCount":{"type":"integer","nullable":true},"usdValueBridged":{"type":"string","nullable":true},"usdValueSaved":{"type":"string","nullable":true},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"tierSavedBps":{"type":"integer","nullable":true},"txHash":{"type":"string","nullable":true}},"required":["kind","status","bps","amountAtomic","asset","chain","wallet","tierSavedBps","txHash"]}},"privacy":{"type":"boolean"},"privacyModel":{"type":"string","nullable":true},"userIp":{"type":"string","nullable":true},"buildExpiresAtMs":{"type":"integer"},"deposit":{"type":"object","properties":{"address":{"type":"string"},"amountAtomic":{"type":"string"},"memo":{"type":"string"},"deadlineMs":{"type":"integer"},"tokenAddress":{"type":"string","nullable":true},"chainKey":{"type":"string"}},"required":["address","amountAtomic","deadlineMs","tokenAddress","chainKey"]},"createdAt":{"type":"integer"},"submittedAt":{"type":"integer","nullable":true},"updatedAt":{"type":"integer"},"completedAt":{"type":"integer","nullable":true}},"required":["transferId","status","statusDetail","venue","fromChain","toChain","fromAsset","toAsset","amountInAtomic","expectedOutAtomic","minOutAtomic","receivedAmountAtomic","receivedAsset","sourceTxHash","sourceTxVerification","destinationTxHash","feeTxHash","claim","postStep","finalDestination","requesterWallet","recipientWallet","avgSavedBps","savedVsWorstBps","savingsQuoteCount","usdValueBridged","usdValueSaved","fees","privacy","privacyModel","buildExpiresAtMs","createdAt","submittedAt","updatedAt","completedAt"]}},"nextCursor":{"type":"string","nullable":true}},"required":["transfers","nextCursor"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"This route requires a wallet sign-in","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/venues":{"get":{"summary":"The venue registry, with readiness and switches","description":"Every venue slug the engine knows, with the three keys of the routing rule - code-level routability, the runtime kill switch, and whether its cached state is fresh enough to route on - plus the FIRST thing standing between it and a fan-out.","tags":["bridge"],"responses":{"200":{"description":"One row per venue","content":{"application/json":{"schema":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"routable":{"type":"boolean"},"notRoutableReason":{"type":"string","nullable":true},"enabled":{"type":"boolean"},"registered":{"type":"boolean"},"snapshotFresh":{"type":"boolean"},"snapshotAgeMs":{"type":"integer","nullable":true},"health":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"]},"reason":{"type":"string","nullable":true},"capabilities":{"type":"object","nullable":true,"properties":{"archetype":{"type":"string","enum":["aggregator","intent","pool","canonical","offchain"]},"tradeTypes":{"type":"array","items":{"type":"string"}},"executionShapes":{"type":"array","items":{"type":"string"}},"feeCapture":{"type":"string","enum":["venue-param","none"]},"requiresUserIp":{"type":"boolean"},"privacyModel":{"type":"string","enum":["unlinkable","custodial-hop","none"]}},"required":["archetype","tradeTypes","executionShapes","feeCapture","requiresUserIp","privacyModel"]}},"required":["venue","routable","notRoutableReason","enabled","registered","snapshotFresh","snapshotAgeMs","health","reason","capabilities"]}}},"required":["venues"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/routes":{"get":{"summary":"Which venues serve a corridor, and with which assets","tags":["bridge"],"description":"The corridor index, which is rebuilt from every venue snapshot to answer - so it is CACHEABLE and says so. The body carries `generatedAt`, and the response carries a weak `ETag` and a short `Cache-Control`: send the tag back as `If-None-Match` and a repeat is a `304` with no index build behind it.","parameters":[{"schema":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"required":true,"name":"fromChain","in":"query"},{"schema":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"required":true,"name":"toChain","in":"query"},{"schema":{"anyOf":[{"type":"boolean"},{"type":"string","enum":["true","false"]}],"default":false},"required":false,"name":"privacy","in":"query"}],"responses":{"200":{"description":"One row per candidate venue","content":{"application/json":{"schema":{"type":"object","properties":{"fromChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"toChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"privacy":{"type":"boolean"},"routes":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"enabled":{"type":"boolean"},"tokenSymbols":{"type":"array","items":{"type":"string"}},"tokenSymbolCount":{"type":"integer"}},"required":["venue","enabled","tokenSymbols","tokenSymbolCount"]}},"generatedAt":{"type":"integer"}},"required":["fromChain","toChain","privacy","routes","generatedAt"]}}}},"304":{"description":"The `If-None-Match` validator still matches; the body is unchanged"},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/source-chains":{"get":{"summary":"Which chains a transfer may start from","description":"Every chain some live venue will accept funds FROM, with how many venues would take it. Read off the venue catalogs’ own `supportsSource`, narrowed by the same three keys `/bridge/venues` reports, so a chain only a switched-off venue serves is absent. It says nothing about whether this app can SIGN there - that is `executable` on a quote or board row, per venue, and is a different question.","tags":["bridge"],"responses":{"200":{"description":"One row per source-capable chain","content":{"application/json":{"schema":{"type":"object","properties":{"chains":{"type":"array","items":{"type":"object","properties":{"chain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"venues":{"type":"integer","minimum":0,"exclusiveMinimum":true}},"required":["chain","venues"]}}},"required":["chains"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/bridge/watch":{"post":{"summary":"Watch a corridor, and get its live board","description":"A heartbeat saying \"somebody is looking at this corridor\". It registers or renews the watch, which promotes the corridor to the board scheduler’s HOT tier, and answers with the corridor’s current board so the first paint is this response rather than whatever the socket delivers first. OPEN and anonymous, rate-limited per IP. Send it again every `heartbeatMs`; stop sending it and the corridor demotes on its own 30 s later. Subscribe to `channel` for updates - a board carries no user data, so `quotes:{corridorKey}` is public. The amount is bucketed to two significant figures, so a client heartbeating on every keystroke lands on one board rather than one per digit.","tags":["bridge"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fromChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"toChain":{"type":"string","enum":["ethereum","arbitrum","optimism","base","polygon","bnb","avalanche","linea","scroll","zksync","mantle","blast","mode","gnosis","celo","unichain","sonic","ink","plume","worldchain","monad","sei","xlayer","plasma","berachain","hyperevm","stable","robinhood","arc","fantom","zircuit","lisk","soneium","abstract","taiko","metis","moonbeam","aurora","cronos","opbnb","ronin","rootstock","citrea","botanix","katana","solana","fogo","eclipse","bitcoin","litecoin","dogecoin","bitcoincash","zcash","dash","sui","aptos","movement","starknet","tron","ton","stellar","cardano","xrpl","near","algorand","polkadot","assethub","injective","noble","osmosis","cosmoshub","hypercore","lighter"]},"fromToken":{"type":"string","nullable":true,"minLength":1,"maxLength":128,"default":null},"toToken":{"type":"string","nullable":true,"minLength":1,"maxLength":128,"default":null},"amountAtomic":{"type":"string","pattern":"^[1-9][0-9]{0,77}$"},"privacy":{"type":"boolean","default":false}},"required":["fromChain","toChain","amountAtomic"]}}}},"responses":{"200":{"description":"The corridor’s board, the channel to subscribe to, and the heartbeat cadence","content":{"application/json":{"schema":{"type":"object","properties":{"corridorKey":{"type":"string"},"channel":{"type":"string"},"board":{"type":"object","properties":{"corridorKey":{"type":"string"},"fromChain":{"type":"string"},"fromAsset":{"type":"string","nullable":true},"toChain":{"type":"string"},"toAsset":{"type":"string","nullable":true},"amountAtomic":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"postStep":{"type":"string","nullable":true,"enum":["hypercore_deposit"],"default":null},"amountOutAtomic":{"type":"string"},"grossAmountOutAtomic":{"type":"string"},"amountInAtomic":{"type":"string"},"minAmountOutAtomic":{"type":"string"},"fees":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["PROTOCOL","SOLVER","ORIGIN_GAS","DESTINATION_GAS","APP","VENUE_OTHER"]},"tokenAddress":{"type":"string","nullable":true},"decimals":{"type":"integer"},"amountAtomic":{"type":"string"},"amountUsd":{"type":"number"},"deductedFrom":{"type":"string","enum":["input","output","gas"]},"label":{"type":"string"}},"required":["kind","tokenAddress","decimals","amountAtomic","deductedFrom"]},"default":[]},"executable":{"type":"boolean"},"priceUnconfirmed":{"type":"boolean"},"expiresAt":{"type":"integer"},"feeBps":{"type":"integer"},"feeAmountAtomic":{"type":"string"},"tierSavedBps":{"type":"integer","nullable":true},"shortfallBps":{"type":"integer","nullable":true},"etaSeconds":{"type":"integer","nullable":true},"eligibility":{"type":"string"},"reason":{"type":"string","nullable":true},"quotedAt":{"type":"integer"},"ageMs":{"type":"integer"}},"required":["venue","amountOutAtomic","grossAmountOutAtomic","amountInAtomic","minAmountOutAtomic","executable","priceUnconfirmed","expiresAt","feeBps","feeAmountAtomic","tierSavedBps","shortfallBps","etaSeconds","eligibility","reason","quotedAt","ageMs"]}},"best":{"type":"string","nullable":true},"feeDisclosure":{"type":"object","properties":{"platformBps":{"type":"integer"},"tierSavedBps":{"type":"integer","nullable":true},"asset":{"type":"string","nullable":true}},"required":["platformBps","tierSavedBps","asset"]},"refreshedAt":{"type":"integer"},"pending":{"type":"boolean"}},"required":["corridorKey","fromChain","fromAsset","toChain","toAsset","amountAtomic","rows","best","feeDisclosure","refreshedAt","pending"]},"watchers":{"type":"integer"},"heartbeatMs":{"type":"integer"},"privacy":{"type":"boolean"},"emptyReason":{"type":"string","nullable":true,"enum":["no_private_route","not_priceable",null]}},"required":["corridorKey","channel","board","watchers","heartbeatMs","privacy","emptyReason"]}}}},"400":{"description":"Malformed request, an unknown asset, or a signed transaction that is not what we built","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"No such decision or transfer - or the aggregator is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The decision is indicative, the quote expired or drifted, the venue is ineligible, or execution is switched off","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"502":{"description":"The venue refused to build, or the broadcast was rejected","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/leaderboard":{"get":{"summary":"Top wallets by bridged volume","description":"Ranked by volume in a rolling window, in micro-USD converted once when each transfer completed rather than at read time. Wallets are shortened server-side. Open: a signed-in caller additionally gets their own row and rank in `me`, even when they are outside the page. Ranks are strict ordinals - 1, 2, 3, never 1, 2, 2, 4 - and stay global across pages.","tags":["leaderboard"],"parameters":[{"schema":{"type":"string","enum":["24h","7d","30d","all"],"default":"24h"},"required":false,"name":"window","in":"query"},{"schema":{"type":"string","maxLength":256},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":25},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"The page, plus the caller's own row when they are signed in","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"string","enum":["24h","7d","30d","all"]},"entries":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","minimum":0,"exclusiveMinimum":true},"wallet":{"type":"string","minLength":1},"username":{"type":"string","nullable":true},"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1}},"required":["rank","wallet","volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits"]}},"me":{"type":"object","nullable":true,"properties":{"rank":{"type":"integer","minimum":0,"exclusiveMinimum":true},"wallet":{"type":"string","minLength":1},"username":{"type":"string","nullable":true},"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1}},"required":["rank","wallet","volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits"]},"nextCursor":{"type":"string","nullable":true},"at":{"type":"integer"}},"required":["window","entries","me","nextCursor","at"]}}}}}}},"/profile":{"get":{"summary":"The caller's own volume, savings and ranks","description":"Requires a session. Per-window volume, transfer counts, volume-weighted bps saved and the money that came to, the rank held in each window, and the rolling 14-day volume a later fee rule would read. `GET /v1/bridge/history` lists the transfers these totals summarise.","tags":["leaderboard"],"responses":{"200":{"description":"Wallets, per-window totals, ranks and rolling volume","content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","minLength":1},"username":{"type":"string","nullable":true},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"chainFamily":{"type":"string","enum":["evm","solana","tron","bitcoin","sui"]},"linkedAt":{"type":"integer"},"nickname":{"type":"string","nullable":true}},"required":["address","chainFamily","linkedAt","nickname"]}},"windows":{"type":"object","properties":{"24h":{"type":"object","properties":{"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1},"savedUsd":{"type":"number"},"rank":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true},"lastTransferAt":{"type":"integer","nullable":true}},"required":["volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits","savedUsd","rank","lastTransferAt"]},"7d":{"type":"object","properties":{"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1},"savedUsd":{"type":"number"},"rank":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true},"lastTransferAt":{"type":"integer","nullable":true}},"required":["volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits","savedUsd","rank","lastTransferAt"]},"30d":{"type":"object","properties":{"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1},"savedUsd":{"type":"number"},"rank":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true},"lastTransferAt":{"type":"integer","nullable":true}},"required":["volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits","savedUsd","rank","lastTransferAt"]},"all":{"type":"object","properties":{"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"bridges":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1},"savedUsd":{"type":"number"},"rank":{"type":"integer","nullable":true,"minimum":0,"exclusiveMinimum":true},"lastTransferAt":{"type":"integer","nullable":true}},"required":["volumeUnits","volumeUsd","bridges","avgSavedBps","savedUnits","savedUsd","rank","lastTransferAt"]}},"required":["24h","7d","30d","all"]},"twap":{"type":"object","properties":{"avgSavedBps":{"type":"integer","nullable":true},"orders":{"type":"integer","minimum":0}},"required":["avgSavedBps","orders"]},"rolling14dVolumeUnits":{"type":"string","minLength":1},"rolling14dVolumeUsd":{"type":"number","minimum":0},"at":{"type":"integer"}},"required":["userId","username","wallets","windows","twap","rolling14dVolumeUnits","rolling14dVolumeUsd","at"]}}}},"400":{"description":"Malformed request or address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"The signature, domain, nonce or expiry did not check out","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}},"429":{"description":"Rate limited; retry after `retryAfterMs`","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_address","nonce_not_found","nonce_already_used","domain_mismatch","message_expired","issued_at_out_of_range","invalid_signature","rate_limited","unauthorized","invalid_username","username_taken","invalid_nickname","last_wallet","wallet_not_yours"]},"message":{"type":"string"},"retryAfterMs":{"type":"integer"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/stats":{"get":{"summary":"Platform headline figures","description":"All-time bridged volume, transfer count, live venue count and the mean bps saved. Open and cached. Volume includes transfers made without a session: they have no user to rank, which is a reason to leave them off a leaderboard and not out of a total.","tags":["leaderboard"],"responses":{"200":{"description":"The platform totals","content":{"application/json":{"schema":{"type":"object","properties":{"volumeUnits":{"type":"string","minLength":1},"volumeUsd":{"type":"number","minimum":0},"transfers":{"type":"integer","minimum":0},"venuesLive":{"type":"integer","minimum":0},"avgSavedBps":{"type":"integer"},"savedUnits":{"type":"string","minLength":1},"at":{"type":"integer"}},"required":["volumeUnits","volumeUsd","transfers","venuesLive","avgSavedBps","savedUnits","at"]}}}}}}},"/prices":{"get":{"summary":"Current USD price per canonical asset","description":"The latest hourly price bucket for every canonical asset that has one, in integer micro-USD. Open and cached. Served from what the worker stored, never from a price feed on the request path - so every caller sees the same figure and a public endpoint cannot spend a third-party rate limit. An asset with no recent price is ABSENT rather than zero.","tags":["prices"],"responses":{"200":{"description":"The price map","content":{"application/json":{"schema":{"type":"object","properties":{"prices":{"type":"object","properties":{"USDC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"USDT":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"USDG":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"USDBC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"USDCE":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"USDCSPOT":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"BTC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"WBTC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"ETH":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"WETH":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"SOL":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"WSOL":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"BNB":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"POL":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"AVAX":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"TRX":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"HYPE":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"CELO":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"MNT":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"RON":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"SUI":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"APT":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"TON":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"ADA":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"XRP":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"XLM":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"NEAR":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"ALGO":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"LTC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"DOGE":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"BCH":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"ZEC":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]},"ATOM":{"type":"object","properties":{"microUsd":{"type":"string","pattern":"^\\d+$"},"asOfMs":{"type":"integer"}},"required":["microUsd","asOfMs"]}}},"asOfMs":{"type":"integer"}},"required":["prices","asOfMs"]}}}}}}},"/prices/{asset}/history":{"get":{"summary":"One asset’s hourly USD prices for the last month","description":"Roughly thirty days of hourly price buckets for one canonical asset, in integer micro-USD, oldest first. Open and cached. The window is returned alongside the points and both ends are hour-aligned, so a partial series - a newly listed asset, or an hour the feed was down for - occupies exactly the slice of the axis it really covers instead of being stretched across the whole month. A missing hour is ABSENT rather than carried forward or zero, and an asset with no history at all comes back with an empty list.","tags":["prices"],"parameters":[{"schema":{"type":"string","enum":["USDC","USDT","USDG","USDBC","USDCE","USDCSPOT","BTC","WBTC","ETH","WETH","SOL","WSOL","BNB","POL","AVAX","TRX","HYPE","CELO","MNT","RON","SUI","APT","TON","ADA","XRP","XLM","NEAR","ALGO","LTC","DOGE","BCH","ZEC","ATOM"]},"required":true,"name":"asset","in":"path"}],"responses":{"200":{"description":"The series and the window it is plotted against","content":{"application/json":{"schema":{"type":"object","properties":{"asset":{"type":"string","enum":["USDC","USDT","USDG","USDBC","USDCE","USDCSPOT","BTC","WBTC","ETH","WETH","SOL","WSOL","BNB","POL","AVAX","TRX","HYPE","CELO","MNT","RON","SUI","APT","TON","ADA","XRP","XLM","NEAR","ALGO","LTC","DOGE","BCH","ZEC","ATOM"]},"windowStartMs":{"type":"integer"},"windowEndMs":{"type":"integer"},"points":{"type":"array","items":{"type":"object","properties":{"bucketStartMs":{"type":"integer"},"microUsd":{"type":"string","pattern":"^\\d+$"}},"required":["bucketStartMs","microUsd"]}}},"required":["asset","windowStartMs","windowEndMs","points"]}}}}}}},"/ops/config":{"get":{"summary":"Every knob, its effective value and where that value came from","description":"One row per knob this process knows about: the stored override, else the environment, else the code default - with `source` saying which. `writable: false` marks a knob its reader resolves once at boot; it is listed for completeness and refused on write.","tags":["ops"],"responses":{"200":{"description":"The catalogue","content":{"application/json":{"schema":{"type":"object","properties":{"implementation":{"type":"string","enum":["env","db"]},"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"envName":{"type":"string"},"value":{"nullable":true},"source":{"type":"string","enum":["db","env","default"]},"defaultValue":{"nullable":true},"validatorName":{"type":"string"},"effect":{"type":"string"},"writable":{"type":"boolean"}},"required":["key","envName","source","validatorName","effect","writable"]}}},"required":["implementation","entries"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/config/{key}":{"put":{"summary":"Set one knob, without a restart","description":"The value is checked by the SAME validator its readers apply, so an accepted value is one the engine uses verbatim rather than clamps and complains about. On a refusal nothing is written and the old value keeps serving, and the response says what is still in force. On success this process is already on the new value before it answers, and every other process is told within the second.","tags":["ops"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9-]+$"},"required":true,"name":"key","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{},"note":{"type":"string","minLength":1,"maxLength":500}},"required":["value"]}}}},"responses":{"200":{"description":"The knob’s new state, what it replaced, and whether the fleet was told","content":{"application/json":{"schema":{"type":"object","properties":{"entry":{"type":"object","properties":{"key":{"type":"string"},"envName":{"type":"string"},"value":{"nullable":true},"source":{"type":"string","enum":["db","env","default"]},"defaultValue":{"nullable":true},"validatorName":{"type":"string"},"effect":{"type":"string"},"writable":{"type":"boolean"}},"required":["key","envName","source","validatorName","effect","writable"]},"previousValue":{"nullable":true},"version":{"type":"integer"},"propagated":{"type":"boolean"}},"required":["entry","version","propagated"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}},"delete":{"summary":"Revert one knob to the environment or the code default","description":"Removes the override rather than setting it back to a guess. Idempotent: reverting a knob that has no override is a success, and is still audited.","tags":["ops"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[a-z0-9-]+$"},"required":true,"name":"key","in":"path"}],"responses":{"200":{"description":"The knob’s new state and the override that was dropped","content":{"application/json":{"schema":{"type":"object","properties":{"entry":{"type":"object","properties":{"key":{"type":"string"},"envName":{"type":"string"},"value":{"nullable":true},"source":{"type":"string","enum":["db","env","default"]},"defaultValue":{"nullable":true},"validatorName":{"type":"string"},"effect":{"type":"string"},"writable":{"type":"boolean"}},"required":["key","envName","source","validatorName","effect","writable"]},"previousValue":{"nullable":true},"version":{"type":"integer"},"propagated":{"type":"boolean"}},"required":["entry","version","propagated"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/venues":{"get":{"summary":"Every registered venue, its effective routability and its health","description":"`enabled` is what the router would decide right now - the code-level refusal, then the master switch, then the venue’s own - because \"the switch says true\" and \"the engine will route there\" are different facts.","tags":["ops"],"responses":{"200":{"description":"One row per registered venue","content":{"application/json":{"schema":{"type":"object","properties":{"aggregatorEnabled":{"type":"boolean"},"venues":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"switchKey":{"type":"string"},"enabled":{"type":"boolean"},"switchEnabled":{"type":"boolean"},"switchSource":{"type":"string","enum":["db","env","default"]},"routable":{"type":"boolean"},"health":{"type":"string","enum":["healthy","degraded","unhealthy","unknown"]}},"required":["venue","switchKey","enabled","switchEnabled","switchSource","routable","health"]}}},"required":["aggregatorEnabled","venues"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/index-exclusions":{"get":{"summary":"Which venues the corridor index dropped, and on which clause","description":"The one exclusion with no other record: a venue refused by the capability table, a kill switch, the health monitor or the privacy gate shows up in a decision’s `rejected` rows, while a venue the index never returned shows up nowhere. Counters are per PROCESS and reset on restart - `instances` says how long each has been counting, and a non-zero `dropped` means the rows are a sample. Read this before shipping any rule that narrows the index further.","tags":["ops"],"responses":{"200":{"description":"The merged counters, largest first","content":{"application/json":{"schema":{"type":"object","properties":{"instances":{"type":"array","items":{"type":"object","properties":{"instance":{"type":"string"},"since":{"type":"number"},"updatedAt":{"type":"number"}},"required":["instance","since","updatedAt"]}},"dropped":{"type":"integer","minimum":0},"truncated":{"type":"boolean"},"rows":{"type":"array","items":{"type":"object","properties":{"corridor":{"type":"string"},"venue":{"type":"string"},"clause":{"type":"string","enum":["chain_missing","direction","corridor_list","from_asset","to_asset","pair_rule","pair_rule_shadow"]},"count":{"type":"integer","minimum":0}},"required":["corridor","venue","clause","count"]}}},"required":["instances","dropped","truncated","rows"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/relayer":{"get":{"summary":"The HyperCore deposit relayer: balances, budgets and what it has earned","description":"What somebody checks instead of Arbiscan (`docs/hyperliquid.md`, \"The relayer pays for itself\"). The relayer’s own ether and USDC on Arbitrum, whether it is under the refill floor, the last gas refill it made, how much of the hour’s relay and refill budgets is gone, and the relay fees settled since midnight UTC. Every source answers independently: a lane with no Arbitrum node reports null balances and the rest of the figures, rather than failing the whole report.","tags":["ops"],"responses":{"200":{"description":"The relayer’s state","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","nullable":true},"ethWei":{"type":"string","nullable":true},"usdcAtomic":{"type":"string","nullable":true},"refillFloorWei":{"type":"string"},"belowFloor":{"type":"boolean","nullable":true},"lastRefill":{"type":"object","nullable":true,"properties":{"atMs":{"type":"integer"},"usdcAtomic":{"type":"string"},"weiAtomic":{"type":"string"},"txHash":{"type":"string"},"impliedMicroUsd":{"type":"string"},"router":{"type":"string"}},"required":["atMs","usdcAtomic","weiAtomic","txHash","impliedMicroUsd","router"]},"budgets":{"type":"object","properties":{"relaysThisHour":{"type":"integer","nullable":true},"relayMaxPerHour":{"type":"integer"},"refillsThisHour":{"type":"integer","nullable":true},"refillMaxPerHour":{"type":"integer"}},"required":["relaysThisHour","relayMaxPerHour","refillsThisHour","refillMaxPerHour"]},"lastCheck":{"type":"object","nullable":true,"properties":{"atMs":{"type":"integer"},"ethWei":{"type":"string","nullable":true},"usdcAtomic":{"type":"string","nullable":true},"decision":{"type":"string","enum":["above_floor","refilled","too_little_usdc","hourly_cap","locked","unreadable","refused"]},"trigger":{"type":"string","enum":["loop","relay","fee_pull"]}},"required":["atMs","ethWei","usdcAtomic","decision","trigger"]},"pollIntervalMs":{"type":"integer"},"feesToday":{"type":"object","properties":{"amountAtomic":{"type":"string"},"legs":{"type":"integer"},"asset":{"type":"string"},"chain":{"type":"string"}},"required":["amountAtomic","legs","asset","chain"]},"feesOutstanding":{"type":"object","properties":{"amountAtomic":{"type":"string"},"legs":{"type":"integer"}},"required":["amountAtomic","legs"]}},"required":["address","ethWei","usdcAtomic","refillFloorWei","belowFloor","lastRefill","budgets","lastCheck","pollIntervalMs","feesToday","feesOutstanding"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/venues/{slug}/enable":{"post":{"summary":"Turn one venue on","description":"Sugar over `PUT /v1/ops/config/bridge-venue-{slug}-enabled`, so the switch flipped here is byte-for-byte the one the router reads. A venue the capability table refuses in code stays refused whatever this sets.","tags":["ops"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9-]+$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The switch’s new state","content":{"application/json":{"schema":{"type":"object","properties":{"entry":{"type":"object","properties":{"key":{"type":"string"},"envName":{"type":"string"},"value":{"nullable":true},"source":{"type":"string","enum":["db","env","default"]},"defaultValue":{"nullable":true},"validatorName":{"type":"string"},"effect":{"type":"string"},"writable":{"type":"boolean"}},"required":["key","envName","source","validatorName","effect","writable"]},"previousValue":{"nullable":true},"version":{"type":"integer"},"propagated":{"type":"boolean"}},"required":["entry","version","propagated"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/venues/{slug}/disable":{"post":{"summary":"Take one venue out of every fan-out","description":"The switch this whole feature exists for. Takes effect on the next quote in this process and within the second everywhere else.","tags":["ops"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9-]+$"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The switch’s new state","content":{"application/json":{"schema":{"type":"object","properties":{"entry":{"type":"object","properties":{"key":{"type":"string"},"envName":{"type":"string"},"value":{"nullable":true},"source":{"type":"string","enum":["db","env","default"]},"defaultValue":{"nullable":true},"validatorName":{"type":"string"},"effect":{"type":"string"},"writable":{"type":"boolean"}},"required":["key","envName","source","validatorName","effect","writable"]},"previousValue":{"nullable":true},"version":{"type":"integer"},"propagated":{"type":"boolean"}},"required":["entry","version","propagated"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/fee-ledger/{id}/settle":{"post":{"summary":"Settle one fee leg by hand","description":"`expected → settled`, for a leg the poller cannot resolve. REFUSES rather than no-ops: a leg already settled, paid or voided comes back 409 with the status it is actually in, because a silent success is how a reconciliation ends up believing something happened. `note` is required.","tags":["ops"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":500}},"required":["note"]}}}},"responses":{"200":{"description":"The transition","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"transferId":{"type":"string","nullable":true,"format":"uuid"},"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"previousStatus":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"updatedAtMs":{"type":"integer"}},"required":["id","transferId","kind","status","previousStatus","bps","amountAtomic","asset","chain","wallet","updatedAtMs"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The leg is in a status this action cannot move it out of","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/fee-ledger/{id}/void":{"post":{"summary":"Close one fee leg as never earned","description":"`expected → void` or `owed → void`, for a transfer that did not happen or a debt that will not be paid. `note` is required.","tags":["ops"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":500}},"required":["note"]}}}},"responses":{"200":{"description":"The transition","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"transferId":{"type":"string","nullable":true,"format":"uuid"},"kind":{"type":"string","enum":["platform","referral","relay_fee","relay_gas"]},"status":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"previousStatus":{"type":"string","enum":["offered","expected","settled","owed","paid","void"]},"bps":{"type":"integer"},"amountAtomic":{"type":"string"},"asset":{"type":"string","nullable":true},"chain":{"type":"string"},"wallet":{"type":"string","nullable":true},"updatedAtMs":{"type":"integer"}},"required":["id","transferId","kind","status","previousStatus","bps","amountAtomic","asset","chain","wallet","updatedAtMs"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The leg is in a status this action cannot move it out of","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/anomalies":{"get":{"summary":"What is currently wrong, newest occurrence first","description":"One row per INCIDENT, not per occurrence: a venue outage that reported ten thousand times is one row reading 10000, because a page of ten thousand identical lines is a page nobody reads. Open incidents by default; `resolved=true` asks for the closed ones. `byCode` totals the WHOLE filtered set rather than this page, which is the only way to see that one row absorbed four hundred thousand failures while the other forty-nine absorbed one each.","tags":["ops"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200},"required":false,"name":"code","in":"query"},{"schema":{"type":"string","enum":["info","warn","error","critical"]},"required":false,"name":"severity","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":20160},"required":false,"name":"windowMinutes","in":"query"},{"schema":{"type":"string"},"required":false,"name":"resolved","in":"query"},{"schema":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":200,"default":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"The page, the per-code totals, and the cursor after it","content":{"application/json":{"schema":{"type":"object","properties":{"implementation":{"type":"string","enum":["log","db"]},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"severity":{"type":"string","enum":["info","warn","error","critical"]},"dedupKey":{"type":"string"},"message":{"type":"string"},"context":{"nullable":true},"firstSeenAtMs":{"type":"integer"},"lastSeenAtMs":{"type":"integer"},"count":{"type":"integer"},"resolvedAtMs":{"type":"integer","nullable":true},"resolvedBy":{"type":"string","nullable":true}},"required":["id","code","severity","dedupKey","message","firstSeenAtMs","lastSeenAtMs","count","resolvedAtMs","resolvedBy"]}},"byCode":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string"},"incidents":{"type":"integer"},"occurrences":{"type":"integer"}},"required":["code","severity","incidents","occurrences"]}},"nextCursor":{"type":"string","nullable":true}},"required":["implementation","entries","byCode","nextCursor"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ops/anomalies/{id}/resolve":{"post":{"summary":"Close one incident","description":"REFUSES rather than no-ops: an incident already closed comes back 409 naming who closed it, because a silent success would overwrite the first person who actually looked. `note` is required. Closing does NOT silence the alert - the next occurrence opens a NEW incident with its own first-seen and notifies again, which is exactly the thing worth being told.","tags":["ops"],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":500}},"required":["note"]}}}},"responses":{"200":{"description":"The closed incident","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"severity":{"type":"string","enum":["info","warn","error","critical"]},"dedupKey":{"type":"string"},"message":{"type":"string"},"context":{"nullable":true},"firstSeenAtMs":{"type":"integer"},"lastSeenAtMs":{"type":"integer"},"count":{"type":"integer"},"resolvedAtMs":{"type":"integer","nullable":true},"resolvedBy":{"type":"string","nullable":true}},"required":["id","code","severity","dedupKey","message","firstSeenAtMs","lastSeenAtMs","count","resolvedAtMs","resolvedBy"]}}}},"400":{"description":"An unknown key, a boot-only key, or a value the key’s own validator refuses","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"401":{"description":"No ops token, or the wrong one","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"404":{"description":"The ops surface is not configured on this lane, or no such venue or fee leg","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"The incident was already closed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{"nullable":true}}},"required":["code","message"]}},"required":["error"]}}}}}}}}}