destinationPayload + destinationGasLimit on a userOps=tx quote to run arbitrary logic atomically after tokens are delivered on the destination chain — stake, swap, vault deposit, etc.
Only supported on
userOps=tx routes. Not available for deposit-address routes or Sui destinations.Quote parameters
Both
destinationPayload and destinationGasLimit must be set together — passing only one is rejected.
How it works
Tokens are delivered to Socket’s BungeeReceiver contract (same address on all supported chains via CREATE3), which then calls your executor:amount of token before the call, so your executor can pull from it directly.
IBungeeExecutor interface
This is the v3 / OpenRouter single-output signature. Do not use the older marketplace executor (different multi-output signature).callData is exactly what was passed as destinationPayload at quote time.
Constraints
destinationPayload+destinationGasLimitare all-or-nothing.- Not supported on Sui or deposit-address (
userOps=deposit) routes. - BungeeReceiver is deployed on all
OPEN_ROUTER_CHAIN_IDS(Ethereum, Arbitrum, Base, Optimism, Polygon, BNB, Gnosis, Linea, Mantle, Scroll, Sonic, Soneium, Unichain, Worldchain, HyperEVM, and more). CalldataExecutor(0xC914...9008) is a reference no-op executor that forwards calldata to an arbitrary target — useful for simple forwarding. No registration needed; security is handled by BungeeReceiver’s per-quote signature verification.
Status
After you submit the origin transaction, pollGET /v3/swap/status?quoteId=... as usual.
When a destination payload was part of the quote, the status response includes:
Treat destination delivery (
status / destination leg) and payload execution as related but distinct signals — funds can arrive even if payload execution fails (for example, out of gas).
Examples
Quote request (TypeScript)
Quote request (TypeScript)
Example executor contract (Solidity)
Example executor contract (Solidity)