TrenchyToolsAPI

Wallet transfers

Move value between your wallets and across chains: directly, through a centralized-exchange hop at the best available rate, through one named venue, or through a privacy-coin leg. Non-custodial throughout.

Funding a set of fresh wallets, sweeping them back, moving SOL to Robinhood chain or BNB Chain: /api/transfer does all of it with one request shape. You pick a route (where the coins travel) and a mode (how the exchange executes). You sign exactly one thing: a deposit from your wallet. We never hold the coins.

Routes

RouteWhat happensWhen to use it
directOne signed transfer on the same chain, wallet → wallet. Nothing in between.Moving money between wallets you are happy to see linked on chain. Same chain only.
exchange · venue: "auto"Smart routing. The order goes to the provider with the best price, speed and reliability at that moment, drawn from centralized-exchange liquidity. The destination is paid by the exchange, not by your wallet.Default. Best rate, no on-chain link between the two wallets.
exchange · venue: "<exchange>" — break wallet clusterExecution is forced through the exchange you name (bybit, kucoin, htx, mexc, …), so the destination is paid out by that exchange's hot wallet, not by the default route's. On-chain, the new wallet's funder is a different exchange from the one that funded your other wallets. GET /api/transfer/venues says which are open; a closed one is refused with transfer_route_off. The answer carries venueHonoured. Non-default venues cost about 1 % more (their withdrawal fee).Fresh wallets that must not share a funder with your existing ones.
exchange · venue: "random"A venue rolled per transfer (small amounts favour the cheapest route; larger ones mix venues).Batches: fan-outs whose destinations should look independently funded.
cross-chainAny exchange route with a different destination chain: SOL → ETH on Robinhood chain, SOL → BNB, ETH → SOL. The exchange does the conversion.Moving between chains without a bridge contract or a wrapped asset.

Which routes are open

The exchange switches venues off from time to time. GET /api/transfer/venues probes every route every two minutes without creating anything and reports open / closed / unknown per venue, plus the state of the default route. routes includes the same status on each venue entry, venue: "random" only rolls open venues, and a transfer to a closed venue is refused up front rather than silently rerouted.

GET /api/transfer/venues
{
  "exchange": "on", "checkedAt": "2026-10-22T23:52:10.000Z",
  "venues": {
    "binance": { "status": "open", "default": true },
    "bybit":   { "status": "open" },
    "kucoin":  { "status": "closed", "reason": "the exchange refuses this route for our account" },
    "htx":     { "status": "closed", "reason": "switched off at the exchange right now" },
    "mexc":    { "status": "closed", "reason": "switched off at the exchange right now" },
    "bitget":  { "status": "closed", "reason": "switched off at the exchange right now" },
    "gate":    { "status": "closed", "reason": "switched off at the exchange right now" }
  }
}

Modes

ModeExecutionFeeTiming
float (default)Market rate at execution; output may vary slightly.~0.1–0.4 %Fastest: usually under a few minutes.
fixedRate locked when the order is created; exact output guaranteed.0.8 %Same once the deposit confirms; the deposit must land within ~15 minutes or the order expires.
privateRouted through a Monero or Zcash leg before paying out: the exchange converts in, hops through the privacy coin, converts out.1 % + network feesTypically 5 minutes or more.
What the private mode does: it breaks the direct on-chain path between your deposit and the destination, so a block explorer cannot walk from one to the other. What it does not do: make you anonymous. The exchange route sees both sides and applies its own policies. Say "reduces on-chain linkability", never "untraceable".

Chains

ChainAs source (from)As destination (to)Native unit
Solana solyes — unsigned v0 deposit transactionyesSOL
Robinhood chain rhyes — {to, value, gas} deposit transactionyesETH
Ethereum ethnot yetyesETH
BNB Chain bnbnot yetyesBNB
Arc, Basenot yetnot yet (bridge route planned)—

How a transfer runs

  1. Quote

    GET /api/transfer/routes?from=sol&to=rh&amount=0.5 → every route and mode available now, with receive amount, fee, minimum and ETA. Respect min.

  2. Create

    POST /api/transfer → the exchange opens an order; you get a one-time deposit address and an unsigned deposit transaction from from.wallet for exactly the deposit amount.

  3. Sign and send

    Sign that transaction with your wallet and submit it (POST /api/sol/send, or your own node). Promptly: the address is single-use and fixed orders expire.

  4. Track

    GET /api/transfer/:id → awaiting_deposit → exchanging → completed with payoutHash on the destination chain. Failed or slow orders carry a help block with the receipt link and support contacts.

Budget: about 10 exchange orders a minute shared by every key (429 transfer_busy), 5 creations a minute per key, 25 legs per batch. The provider behind the exchange route is ours to run; you need no account with it.