Users arrive with the wrong asset

They hold BTC and you need USDC on Base. Today that is three tabs and a bridge they have to trust. It can be one call inside your app.

17Chains15 EVM + BTC + SOL17Routing venuesRaced in parallel16/17Healthy nowDegraded venue0Fees for usersPermanently

Stop sending them away

Every dapp leaks at the same point: the user is ready, and their money is somewhere else in something else. The usual fix hands them to a bridge you do not control. This one keeps them on your page and ends in the real token on the chain you use.

BTCBITCOINSOLSOLANAETHARBITRUMUSDTBNB CHAINRAVNone callUSDCBase · your app

Why they do not come back

The funnel leaks

A user sent to an external bridge is on someone else's page. Plenty never return and you never find out which.

Wrapped assets land

A bridge that delivers a wrapped copy leaves your contracts holding something your protocol may not accept.

Every chain is work

Each new corridor you build yourself is another venue, another failure mode, another thing that breaks quietly.

Server plumbing

A swap API that needs a key makes you run a backend proxy just to hide it. This one needs none.

Three calls, from the browser

Quote, execute, poll. No key is required and every endpoint accepts browser calls, so the front end can call it directly.

onboard.tsno key
import { Ravn } from '@ravnexchange/sdk';

const ravn = new Ravn();

// 1. price it across every eligible venue at once
const quote = await ravn.quote({
  inputChainId: -1,          // Bitcoin
  outputChainId: 8453,       // Base
  inputToken:  'native',
  outputToken: USDC_BASE,
  inputAmount: '10000000',   // 0.1 BTC, in satoshis
  userAddress, destinationAddress,
});

// 2. turn the winning quote into something signable
const exec = await ravn.execute({ quoteToken: quote.quoteToken });

// 3. follow it to settlement
const status = await ravn.status({ swapId: exec.swapId });

Amounts are strings in the smallest unit: satoshis, wei, lamports. Nothing is lost to floating point.

What you get

Canonical out

Your contracts receive the destination chain's real token. No wrapper to whitelist, no synthetic to unwind.

Browser-callable

No key, and every endpoint accepts calls from a web page. No proxy service to run, pay for or keep alive.

Three execution types

TRANSACTION to sign and broadcast, SIGNATURE for gasless orders, DEPOSIT for send-to-address. The response tells you which.

Gasless where it wins

On market-maker routes the user signs a message and the market maker pays the gas. The price they sign is the price they get, and they need no gas token.

Sandbox

Test with no real funds and no metering before it touches a user.

Your fee

Charge 0 to 100 bps on your own key if you want the swap to fund the feature. We add nothing on top.

Start with a quote

No account needed. Paste the call, read the route that comes back, then decide whether to integrate.