Skip to main content
Some vaults cannot be exited instantly. Instead, the vault records a withdrawal request and pays it out later, after the vault operator processes it. With allowAsync, the Route API can file that request for your user, on the same chain or after a bridge. An async route works differently from a regular route. The transaction does not deliver tokenOut. The user receives a claim on the payout, such as an ERC-721 receipt, and tokenOut arrives later when the vault settles the request. The response describes this payout in an async object instead of amountOut.
Async redeems are available for Paxos Labs PAXGy → PAXG on Ethereum, including from PAXGy bridged to other chains, such as iPAXGy on Optimism. The async object describes the claim, settlement and refund in a protocol-neutral way. Read those fields rather than hard-coding PAXGy behavior, so your integration keeps working as more vaults are added.

How it works

  1. The user signs one transaction on the source chain.
  2. For a cross-chain route, the bridged tokens arrive on the destination chain, and Enso files the redeem request there in the same delivery transaction. For a same-chain route, the request is filed in the user’s transaction.
  3. The receipt goes to receiver.
  4. When the vault operator processes the request, tokenOut is paid to whoever holds the receipt at that time. No further transaction is needed from the user.

Request

Async redeems are available on GET and POST /api/v1/shortcuts/route. They are not available on /quote or the Bundle API. allowAsync does not force an async route. Enso compares async candidates against instant routes, such as a swap on a DEX, and returns the best one. Async candidates are ranked on async.estimatedAmountOut. The response contains an async object only when an async route wins, so always check for it.

Example: iPAXGy on Optimism to PAXG on Ethereum

Set ENSO_API_KEY to your Enso API key and ADDRESS to the user’s wallet. This request redeems 10 iPAXGy from Optimism into PAXG on Ethereum with 0.25% slippage.
The response, trimmed to the fields that matter here:
The same request with chainId: 1, no destinationChainId and PAXGy as tokenIn files the request on Ethereum directly.

How it differs from a regular route

Do not compute price impact or display an output amount from the top-level fields of an async route. They are null. Use async.estimatedAmountOut and async.priceImpact.

The async object

Slippage

The final payout of an async redeem cannot be checked in the transaction, because it is paid later at the vault’s rate at that time. Slippage instead protects the amount that goes into the request.
  • When steps before the redeem can change the amount, such as a bridge, a swap or a fee taken from the bridged tokens, the transaction checks that at least async.amountIn × (1 − slippage) reaches the redeem. Below that, the request is not filed. A same-chain transaction reverts. On a cross-chain route, the bridged tokens are refunded to receiver on the destination chain, as listed in metadata.bridgeRefundAssets.
  • When the request amount is fixed, for example a same-chain redeem of the user’s input, nothing can slip and no check is added.
  • async.estimatedMinAmountOut is the payout estimate for that smallest allowed input. It is not enforced on-chain.
  • With pricing: "atSettlement", the payout depends on the vault’s rate and fee when the operator processes the request. For PAXGy, the vault’s exchange rate changes over time, and the vault charges a 0.25% redeem fee.

Claims, cancellation and refunds

  • Payout. settlement says how tokenOut is paid. With push, the protocol sends it without further action. With claim, someone allowed by settlement.by must send settlement.call once the redeem is claimable.
  • Transferable claims. When claim.transferable is true, the claim can be moved to another account, and the payout goes to whoever holds it at settlement.
  • Cancellation. cancel is present only when the user can cancel the request, with cancel.by saying who may and cancel.contract and cancel.signature giving the call. When it is absent, the request cannot be cancelled by the user. Make this clear before the user signs.
  • Refunds. refund describes how tokenIn can come back instead of tokenOut. refund.by lists who can trigger it, and refund.settlement says how it is paid. A push refund goes to beneficiary, the account set at request, even if the claim was transferred. When refund is absent, the request can never be unwound.
  • Failed cross-chain delivery. If the redeem cannot be filed on the destination chain, for example because the bridged amount fell below the slippage check, the bridged tokens go to receiver on the destination chain. They are listed in metadata.bridgeRefundAssets and are not tokenIn on the source chain.
For PAXGy, the claim is a transferable ERC-721 receipt, PAXG is pushed to the receipt holder when the operator processes the order, the user cannot cancel, and the operator or the vault can refund PAXGy to beneficiary.

Errors

Integration checklist

  • Send allowAsync: true only on requests where your app can show an async result.
  • Check for async in every response, because the best route may still be instant.
  • Show async.estimatedAmountOut as an estimate, and use async.priceImpact for price impact checks.
  • Tell the user they receive a receipt now and tokenOut later, that the wait depends on the vault operator, and whether the request can be cancelled.
  • Submit soon after quoting, especially for cross-chain routes.

Updated 2026-10-13