GET /v3/swap/quote— fetch executable transaction routes, deposit-address routes, and CEX withdraw routesGET /v3/swap/status— poll the status of a submitted routeGET /v3/swap/supported-chains— list supported chainsGET /v3/swap/tokens/list— list supported tokensGET /v3/swap/tokens/search— search tokens by address, name, or symbol
x-api-key and affiliate headers. For testing without credentials, use https://public-backend.socket.tech. See Get API Access for the full breakdown.
Endpoint Selection
Use/v3/swap/quote with userOps=tx for OpenRouter direct routes, which support:
- Same-chain swaps when
originChainId === destinationChainId - Cross-chain bridge routes when
originChainId !== destinationChainId
userOps=deposit. See the Deposit Addresses Guide.
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.
Step 1: Get a Quote
Request
Optional query parameters:
Same-chain DEX provider IDs
Cross-chain bridge provider IDs
Example: Same-chain swap
Example: Cross-chain bridge
Quote response
Step 2: Check Approval
If theapproval field is present in the route response, approve the approval.spenderAddress for approval.amount of approval.tokenAddress before submitting the transaction.
OpenRouter EVM routes usually ask the user to approve the AllowanceHolder contract, not the final bridge or DEX. The
to address in txData is typically the AllowanceHolder.Step 3: Submit the Transaction
SubmittxData.object as a transaction from userAddress.
Step 4: Poll Status
Request
The v3 status endpoint looks up execution state by
quoteId.
Status response
Full Execution Flow
- Request quotes from
/v3/swap/quotewithuserOps=tx. - Select a route. Prefer
routeTagsor compareoutput.valueInUsd,estimatedTime, andgasFee. - Check quote freshness with
expiresAt— do not send expired quotes. - If
approvalis present, approveapproval.spenderAddressforapproval.amount. - Submit the route transaction from
userAddressusingtxData.object. - Poll status with the returned
quoteId. - Poll until the route reaches a terminal status.
Using contractCaller
By default, Socket’s AllowanceHolder contract requires that the wallet signing the transaction is also the entity callingAllowanceHolder.exec. If your integration routes the call through an intermediate contract (e.g. a router or bridge contract you own), the AllowanceHolder will see your contract as the caller — not the user’s wallet — and the transaction will revert with CallerNotSignedUser.
Set contractCaller to your intermediate contract’s address when this applies:
contractCaller is only needed for userOps=tx (direct OpenRouter routes). It has no effect on deposit or CEX-withdraw routes. userAddress still acts as the default refund address unless you also set refundAddress.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.
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
- OpenRouter EVM routes usually ask the user to approve the AllowanceHolder contract, not the final bridge or DEX.
- Use
quoteIdexactly as returned — it is used for status lookup and source transaction recording. - Do not rebuild calldata client-side. Use the returned
txData. - For same-chain swaps,
routeDetails.dexDetailsis populated 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.
Charging Fees
Add integrator fees to your quotes
Deposit Addresses
Accept deposits from any chain
Destination Payload
Execute calldata on the destination chain
Chain Support
See all supported networks