Swap V3 User Reference
Last verified against the Socket Swap V3 swagger: 2026-06-10. This reference covers the user-facing Swap V3 endpoints:GET /v3/swap/quote: Swap V3 quote API.userOps=txmaps to OpenRouter direct routes.GET /v3/swap/status: Swap V3 status API.
Endpoint Selection
Use/v3/swap/quote to fetch executable transaction routes, deposit-address routes, and CEX withdraw routes in one normalized route model.
OpenRouter direct routes currently support:
- Same-chain swaps when
originChainId === destinationChainId. - Cross-chain bridge routes when
originChainId !== destinationChainId.
Common Token and Amount Rules
inputAmountis a string in the smallest token unit for EVM-style chains.- The native token address is
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE. - EVM addresses are normalized to lowercase by the API.
receiverAddressmust be valid for the destination chain.userAddressis required for OpenRouter transaction routes.- Same-chain quotes reject identical
inputTokenandoutputToken.
Swap V3 Quote
Request
| Parameter | Type | Description |
|---|---|---|
userOps | string | Comma-separated route types. Use tx for OpenRouter transaction routes. Also supports deposit and cex-withdraw. |
originChainId | string | Required for tx and deposit. Source chain ID. |
destinationChainId | string | Destination chain ID. |
inputToken | string | Source token address. |
inputAmount | string | Source amount in smallest units. |
outputToken | string | Destination token address. |
receiverAddress | string | Destination receiver. |
userAddress | string | Required for tx. Source wallet that will sign the transaction. |
| Parameter | Type | Description |
|---|---|---|
slippage | number string | Slippage percent, for example 0.5. |
feeBps | number string | Integrator fee in basis points. Supports decimals. Requires feeTakerAddress. |
feeTakerAddress | string | Fee recipient. Required when feeBps is set. |
includeProvider | string | Comma-separated provider IDs to include. Same-chain maps to DEX IDs; cross-chain maps to bridge IDs. |
excludeProvider | string | Comma-separated provider IDs to exclude. Cannot overlap with includeProvider. |
refuel | true or false | Optional refuel request. Defaults to false. |
destinationPayload | hex string | Destination payload. Requires destinationGasLimit. |
destinationGasLimit | string | Gas limit for destinationPayload. Requires destinationPayload. |
refundAddress | string | Required for deposit and cex-withdraw. |
exchange | string | Required for cex-withdraw, for example coinbase or binance. |
| Provider ID | Display name |
|---|---|
zeroxv2 | 0x v2 |
openocean | OpenOcean |
kyberswap | KyberSwap |
magpie | Magpie |
bebopPmm | Bebop PMM |
tempoStablecoin | Tempo Stablecoin |
ondoGm | Ondo GM |
| Provider ID | Display name |
|---|---|
across | Across |
arbitrum-native | Arbitrum Native Bridge |
bob-gateway | BOB Gateway |
celer | Celer |
cctp-v2 | CCTP v2 (fast) |
cctp-v2-slow | CCTP v2 (slow / canonical) |
gaszip | GasZip |
gnosis-native | Gnosis Native Bridge |
hypercore | Hypercore Deposit |
kyo-ag | Kyo AG |
mayan | Mayan |
native-op-stack | Native OP Stack Bridge |
near-intents | Near Intents |
oft | OFT (LayerZero) |
polygon-native | Polygon Native Bridge |
relay | Relay |
rhinofi | RhinoFi |
scroll-native | Scroll Native Bridge |
tempo-stablecoin-dex | Tempo Stablecoin DEX |
Same-Chain OpenRouter Swap Example
Cross-Chain OpenRouter Bridge Example
Response Shape
| Field | Description |
|---|---|
quoteId | Stable route ID. Use it for status polling. For OpenRouter tx routes this is the on-chain request hash. |
expiresAt | Unix timestamp after which the quote should be discarded. |
output.amount | Expected destination output amount after applicable fees. |
output.minAmountOut | Minimum acceptable destination output amount. |
routeTags | Ranking labels added by Swap V3: SUGGESTED, FASTEST, MAX_OUTPUT. |
approval | Present for ERC20 inputs. Approve this spender before sending txData. |
txData.kind | Transaction type. OpenRouter EVM routes use evm_tx. |
txData.object | Transaction payload to send from userAddress. |
statusCheck | Suggested polling endpoint and cadence. |
Swap V3 Status
Request
| Parameter | Required | Description |
|---|---|---|
quoteId | Yes | Quote ID returned by /v3/swap/quote. |
includeQuoteDetails | No | Set to true to include stored quote row details in the response. |
quoteId.
Response Shape
| Status | Meaning |
|---|---|
PENDING | Quote or route has not started. |
IN_PROGRESS | Source transaction is known, destination completion is pending. |
COMPLETED | Route is complete. |
FAILED | Route failed. |
EXPIRED | Quote or execution window expired. |
REFUNDED | Funds were refunded. |
Execution Flow
- Request quotes from
/v3/swap/quotewithuserOps=tx. - Select a route. Prefer
routeTagsor compareoutput.valueInUsd,estimatedTime, andgasFee. - Check quote freshness with
expiresAt. - If
approvalis present, approveapproval.spenderAddressforapproval.amountofapproval.tokenAddress. - Submit the route transaction from
userAddress. For an EVM route, sendtxData.objectas the transaction. - Poll status with the returned
quoteId. - Continue polling until the route reaches a terminal status.
Fees
Integrator fees are set withfeeBps and feeTakerAddress.
Rules:
feeBpsandfeeTakerAddressmust be provided together.feeBpsmust be greater than0and at most10000.- For direct DEX routes, fees can be taken from input or output depending on the OpenRouter fee resolution.
- For direct bridge no-swap routes, fees are forced to the input side.
- The client-facing output amount is already net of applicable fees.
output and execution data. It does not expose a separate affiliate fee object on tx routes.
Validation and Error Notes
Common400 errors:
- Missing
userOpsfor/v3/swap/quote. - Missing
originChainIdforuserOps=tx. - Missing
userAddressforuserOps=tx. - Missing
refundAddressforuserOps=depositoruserOps=cex-withdraw. - Missing
exchangeforuserOps=cex-withdraw. - Invalid
slippage. - Invalid or unsupported chain ID.
destinationPayloadwithoutdestinationGasLimit, or the reverse.feeBpswithoutfeeTakerAddress, or the reverse.- Provider listed in both include and exclude filters.
Implementation Notes for Integrators
- OpenRouter EVM routes usually ask the user to approve the AllowanceHolder contract, not the final bridge or DEX.
- The transaction
tois usually the AllowanceHolder. The OpenRouter call is wrapped inside the returned calldata. - Use
quoteIdexactly as returned. It is used for status lookup and source transaction recording. - Do not rebuild calldata client-side. Use the returned
txData. - Do not send expired quotes.
- For same-chain swaps,
routeDetails.dexDetailsis populated in Swap V3 when route metadata is available. - For cross-chain routes,
routeDetails.bridgeDetailsdescribes the bridge leg. If there is an origin swap leg,routeDetails.dexDetailsmay also be present.