confidential: true on /quote. The race narrows to venues with a
private settlement path, and the best output wins. If none can quote, you get 404 NO_LIQUIDITY,
never a public fill.
Each hides the direct link between deposit and payout; how strongly depends on the venue. Your
integrator fee applies, paid beside the swap. Read
estimatedTimeSeconds
before executing.
Compliance
- Houdini Swap receives your request’s IP and user agent, plus
clientTimezone(your user’s IANA timezone, defaultUTC). Its terms bar US persons and sanctioned jurisdictions. - Hinkal’s terms bar Cuba, Iran, North Korea, Syria, and Crimea, Sevastopol, Donetsk and Luhansk.
excludeVenues: ["houdini"] or ["hinkal"] where you can’t meet it.
Hinkal
Your user pays into Hinkal’s shared pool, and Hinkal pays the recipient from a fresh wallet through LI.FI, so the payout can arrive in another token or on another chain. LI.FI’s 0.25% and Hinkal’s 0.10% plus a small flat fee come out of the quoted output. The deposit itself is heavy (450k to 670k gas), paid by the user’s wallet and shown in the quote’sgas.
Limits
- Races only when the quote has
authorizeSteps: true(oronlyVenuesnaminghinkal), so a flow that can’t collect the signatures below never gets a Hinkal quote. - From Ethereum, Base, Arbitrum, Polygon, BNB Chain or Robinhood Chain. Pays out on any of those, plus Solana, Arc, Tempo, Avalanche, Monad and HyperEVM.
- Any token Hinkal’s pool takes, except stETH and PAXG. Up to $10,000 a swap.
- Needs
destinationAddresson the quote, or the quote is only a preview. Takes norefundAddressother thanuserAddress. - Up to 12 swaps an hour per IP, or 120 per API key. Past that,
/executeanswers502 BUILD_FAILED. Send your key. - Not available through the MCP server or x402.
AUTHORIZE steps
Before Hinkal’s swap is built, the paying wallet (userAddress) signs twice. /execute asks for
each signature with an AUTHORIZE answer:
sign, then call /execute again with the same quoteToken, this
authorization and the signature, before expiresAt, with a new Idempotency-Key. Repeat
until a TRANSACTION comes back. Signing moves no funds. Check each step before your user signs:
personal_sign: opens a read-only session. The message must be exactly the three lines above. Refuse one that addsThis signature can also be used to submit transactions.: that mode’s key could move the wallet’s funds.eth_signTypedData_v4: Hinkal’sPrivateSendBridgeorder, signed on the input chain. Its domain is only{ name: "Hinkal Enclave", chainId }, it’s for the input token (the zero address for the chain’s coin) and at most the input amount, andrecipientsholds exactly one entry: yourdestinationAddress.- The
TRANSACTION: the approval on a token sell, thenprooflessDepositon0x7cb60446d7635C68EDf1c568cac74A1f98c1Cfa4(the same address on every chain), your fee when one applies, and astatusRef. Send itscallsone by one.
executeAndTrack checks and signs both
steps, then sends the deposit. In Python, check_authorize checks each
step. A sandbox quote skips the steps.
When a Hinkal swap fails
A failed payout is not refunded on its own./status reports failed (never refunded), with
venueStatus ending (needs recovery), and the funds wait at Hinkal on the source chain. The
paying wallet gets them back with POST /recover, within 7 days. After 7
days RAVN no longer holds the swap and its status reads unknown.
