Appearance
Jump routes
Some assets no single fiat provider sells directly. A jump route delivers them in two legs, automatically:
- The fiat provider buys an intermediate asset it does support (Base USDC by default).
- 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(anapiUrlor aclient) auto-enables jump —jump.enableddefaults toBoolean(hyperstream). - Every jump needs a refund address: set
jump.refundWallet, or passrefundToon each request. With neither, jump orders fail withCONFIGURATION_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
minOutputAmountis the least the settlement may deliver; if the delivered amount comes in below it, the order fails with the reasonoda_slippage_exceeded. delivered≠ done. When the provider delivers the intermediate, a direct order iscompleted— but a jump order is onlyprocessing, and stays there until Hyperstream finishes settling to the target.fiat.cron()drives it the rest of the way tocompleted(orfailed), 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
| Error | Cause | Fix |
|---|---|---|
NO_ROUTE (jump disabled) | Target unbuyable and jump is off | Enable jump, or pick a buyable target |
NO_ROUTE (no route) | Hyperstream has no route for the pair | Try another target/intermediate, or retry |
CONFIGURATION_ERROR (refund wallet) | No jump.refundWallet and no refundTo | Set one of them |
oda_slippage_exceeded | Delivered amount below minOutputAmount | Raise 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.
Related
- Configuration — the full jump config options.
- Lifecycle & webhooks — how a jump order progresses through settlement.
- Calling the API — the
/quoteand/orderflow.