Skip to content

Jump routes

Some assets no single fiat provider sells directly. A jump route delivers them in two legs, automatically:

  1. The fiat provider buys an intermediate asset it does support (Base USDC by default).
  2. Hyperstream settles that intermediate across chains/assets into the user's target asset.

The user just asks for the target asset and pays once — the SDK handles the hop. In a quote, a jump is tagged swapStrategy: "jump" (a direct purchase is "direct").

When it happens

You never trigger jump manually; the planner decides per quote:

  • The provider can sell the target asset → direct.
  • It can't (and the target isn't the intermediate itself) → jump.

If jump is disabled and the target isn't buyable, the quote fails with NO_ROUTE.

Enable it

Jump turns on automatically once you configure Hyperstream. You also need a refund wallet — where the intermediate is returned if settlement fails:

ts
const fiat = createFiat({
  providers: [transak(/* ... */)],
  cors: { origins: ["https://app.example.com"] },
  quoteSecret: env.TOKENFLIGHT_FIAT_SECRET,
  hyperstream: { apiUrl: env.HYPERSTREAM_API_URL },
  integratorId: env.HYPERSTREAM_INTEGRATOR_ID,
  jump: {
    // intermediateAsset defaults to Base USDC (chainId 8453)
    refundWallet: env.REFUND_WALLET, // or accept a per-request `refundTo`
  },
});
  • Configuring hyperstream (an apiUrl or a client) auto-enables jump — jump.enabled defaults to Boolean(hyperstream).
  • Every jump needs a refund address: set jump.refundWallet, or pass refundTo on each request. With neither, jump orders fail with CONFIGURATION_ERROR.
  • Override the intermediate asset with jump.intermediateAsset.

TIP

Wire these from env — HYPERSTREAM_API_URL, HYPERSTREAM_INTEGRATOR_ID, and REFUND_WALLET.

What's different about a jump order

A jump quote is priced once and sealed into the quoteId, then follows the same /quote/order flow as any purchase. Two things behave differently:

  • Slippage applies. Jump quotes carry a slippage tolerance (default 300 bps, clamped to 50–1000). The quote's minOutputAmount is the least the settlement may deliver; if the delivered amount comes in below it, the order fails with the reason oda_slippage_exceeded.
  • delivered ≠ done. When the provider delivers the intermediate, a direct order is completed — but a jump order is only processing, and stays there until Hyperstream finishes settling to the target. fiat.cron() drives it the rest of the way to completed (or failed), so always run the cron on a jump-capable deployment.

Everything else — the quote fields, the order action, polling GET /order/{orderId} — is identical to a direct purchase.

Common errors

ErrorCauseFix
NO_ROUTE (jump disabled)Target unbuyable and jump is offEnable jump, or pick a buyable target
NO_ROUTE (no route)Hyperstream has no route for the pairTry another target/intermediate, or retry
CONFIGURATION_ERROR (refund wallet)No jump.refundWallet and no refundToSet one of them
oda_slippage_exceededDelivered amount below minOutputAmountRaise slippageBps and re-quote

oda_slippage_exceeded is a settlement failure reason on the order record, not an HTTP error — you see it on the order status, not as a response from /quote or /order.