Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Here, you'll find everything you need to understand how the Delta API works and how to implement it. Start with our brief overview for a quick introduction to Delta's smart contract, then explore how to use its functions effectively.
Velora's API provides the most straightforward and efficient access to the Velora Protocol. It connects your application to a vast network of liquidity sources guaranteeing optimal token swap rates across multiple blockchain networks.
Velora currently has two versions of its API available:
Here’s an example of an implementation for Velora's Market API. It utilizes Velora's endpoints to fetch pricing information and build transactions for token swaps.
Velora Market API is the most straightforward and efficient way to access to the Velora Protocol. It connects your application to a vast network of liquidity sources guaranteeing optimal token swap rates across multiple blockchain networks.
To get started, we recommend familiarizing yourself with the available API versions to understand their unique features and differences. From there, dive into the various endpoints tailored for specific tasks, whether you need to fetch a price quote, construct a transaction, or streamline both processes using the all-in-one Swap endpoint.
You’ll also find a practical example to guide you through the implementation process, making it easier to integrate Velora into your application.
If you'd like to find the latest integrations, feel free to use DexLib, our open-source library that contains all live and pending DEX integrations.
Introduction to Velora API version 5
Please note that as of the launch of v6.2, Velora no longer maintains v5. We recommend all v5 integrations to upgrade to v6.2.
Velora's goal is to deliver the best market prices by aggregating over multiple decentralized exchanges, market makers, and lending protocols.
Velora API allows users to fetch optimal prices to swap from one token to another and then build transaction data that can be used to execute transactions on-chain. Currently, Velora only supports EVM-based networks (Ethereum, BSC, Polygon, etc) and tokens following ERC20 standard.
Before you get deeper into the docs, here is a quick overview of the general flow you will use to interact with the Velora API. Let's take the example of you wanting to swap 10 ETH to DAI.
First, you should call /prices endpoint (detailed documentation ) using an HTTP query like GET https://api.paraswap.io/prices/?srcToken=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&destToken=0x6b175474e89094c44da98b954eedeac495271d0f&amount=10000000000000000000&srcDecimals=18&destDecimals=18&side=SELL&network=1&version=5. This will return the optimal prices using ParaSwap's Hopper Algorithm
If you are satisfied with the price, you can call the /transactions endpoint (detailed documentation ). This will return a transaction object.
You should then give the appropriate allowance to the tokenTransferProxy for the source token. You can find the address of tokenTransferProxy in the payload returned in the price endpoint. You can skip this step if a high enough allowance was already given.
You can finally use this transaction data to execute the swaps on-chain by sending it to the provider.
Check out the following pages to understand the Velora v5 API. To try out all API endpoints, visit the of Velora v5.
Developers can also use our JS/TS SDK for web and Node.js integrations
If you want to do some swaps, you can directly use our UI.
SELL:
simpleSwap
multiSwap
megaSwap
swapOnUniswapV2Fork
BUY:
simpleBuy
buy
buyOnUniswapV2Fork
directUniV3Buy
In this guide, you'll explore the Velora Market API, its different versions, and the various actions it enables.
Start by reading the Overview section to better understand how the Market API aggregates liquidity across multiple DEXs and AMMs to provide optimal trade execution.
This guide will help you to:
Leverage the API effectively.
Retrieve a price and get the most optimal route for a trade.
Build parameters for a transaction with the response from the prices endpoint.
Find the optimal fee strategy for your integration.
Portikus Adapter is Velora's Delta contract
When working on the API implementation, you’ll use the following contract addresses at these stages:
Order creation
Signing order
Submitting Order to API
On-Chain Execution
Delta’s contract has been deployed on Ethereum and Base networks. It shares the same address across both chains.
In this section you can find all the information related to Velora API available versions
Velora currently has two versions of its API available. It is highly recommended to integrate or upgrade to v6.2, the latest version of the Market API, to take full advantage of its latest innovations.
v6.2 introduces key enhancements, including gas optimizations and greater flexibility for partners in managing their fees.
To cancel orders, you can use the /cancel endpoint provided by the API, which would remove the orders from the order book. The signature is an EIP-712 signature, built with the following structure. Both LIMIT and MARKET orders can be canceled.
API v6.2
API v5
https://api.paraswap.io/delta/orders/cancelBody
orderIds
string[]
Order IDs to cancel
signature
string
EIP-712 signature with the structure described above
Response
{
"success": true
}{
"errorType": "OrderCancellationError",
"details": "Order not found"
}Upon successful cancellation, the API will return a confirmation message indicating that the limit order has been successfully cancelled.
domain
{
"name": "Portikus",
"version": "2.0.0",
"chainId": <chainId>,
"verifyingContract": <deltaAddress>
}type
{
"OrderCancellations": [
{
"name": "orderIds",
"type": "string[]",
}
]
}value
{
"orderIds": [<id1>, <id2>]
}directCurveV1Swap
directCurveV2Swap
directBalancerV2GivenInSwap
Ethereum
Base
Optimism
Arbitrum
Polygon
BSC
Introduction to Velora API v6.2
Velora v6.2 has been released! See what's new here: https://x.com/VeloraDEX/status/1803435422011498551
Velora V6.2's main goal is to provide the best possible gas-optimized protocol for order routing. It has significant improvements in terms of smart contract architecture that achieve both best-in-class gas efficiency and scalability through modularity.
To use V6.2, you need to pass &version=6.2 query param when calling /prices. The process for swapping remains the same:
Call GET /prices to retrieve an optimal price for a given pair & amount.
Call POST /transactions for retrieving the that includes the call data
Alternatively, you can use GET /swap to retrieve both the price config & Transaction Object.
You can also use the JavaScript/TypeScript SDK for easier integrations:
Major changes in V6.2:
No longer need to approve a different smart contract for ERC20 tokens. Augustus V6.2 is the only contract you need to interact with. More details .
More control over : should you choose to take a surplus fee, you can cap it to 1% of the trade volume as protection for your users if it applies to your specific case. You can also send partner fees directly to the user. Take a look at the new params (isCapSurplus , isSurplusToUser , isDirectFeeTransfer) params in section.
SELL:
swapExactAmountIn
swapExactAmountInOnUniswapV2
swapExactAmountInOnUniswapV3
swapExactAmountInOnBalancerV2
BUY:
swapExactAmountOut
swapExactAmountOutOnUniswapV2
swapExactAmountOutOnUniswapV3
swapExactAmountOutOnBalancerV2
GET https://api.paraswap.io/delta/prices/bridge-info
Returns info on supported source destination chains and destination tokens for cross-chain orders.
The data structure is a nested dictionary where the primary keys are sourceChainId values, and the secondary keys are destinationChainId
Velora Delta is a new set of smart contracts developed by Velora. It's built on top of the Portikus Intents network and is currently available on the Ethereum and Base networks. This development unlocks several benefits for swapping tokens, including:
Gas-less trading: users can submit a trade without using a gas token, as Delta will execute the trades on their behalf.
MEV Protection: By submitting your trade through Velora Delta, you can protect your users’ swaps from events like sandwich attacks.
Price Competition:
POST https://api.paraswap.io/delta/orders
The Submit Delta Order for Auction endpoint allows you to submit a Delta order to be auctioned on Velora Delta. This enables decentralized and efficient execution of large token swaps through the Delta smart contract.
By sending a properly formatted request, you can specify order details such as the source and destination tokens, amounts, deadline, and additional parameters required for execution.
excludeDirectContractMethods is no longer supported in /prices. It has been replaced by excludeContractMethodsWithoutFeeModel, which ensures all swaps can be monetized.
swapExactAmountInOnCurveV2
swapOnAugustusRFQTryBatchFill
swapExactAmountInOutOnMakerPSM
swapExactAmountInOutOnMakerPSM
Simple Delta flow using API with axios looks like this:
This function is used to fetch a price quote for swapping
In this case, we’re swapping 100 DAI for PSP tokens on Ethereum (chainId: 1) using Velora's Delta API.
On this section, partners can pick between two models:
Fee Model: It allows partners to take up to 2% of the trade in partner fees (200 bps)
Surplus Model: Which only works if a surplus is generated from the trade. On this case, the partner will collect 50% of the order surplus instead of a flat percent fee to the specified partner address.
This part of the code uses EIP-712 for Signing, which is a standard for signing structured data on Ethereum, allowing off-chain signatures that can be verified on-chain without gas costs. This ensures a secure, gas-efficient, and human-readable signing process.
At this stage, the signed order is sent and an auction is performed between all the available Agents.
This function is used to check the status of an order and retrieve a result.
If the order status is executed, it means a taker has filled the order, and the swap has been completed.
If the status is still 'PENDING' or 'OPEN', the order is waiting for execution.
A more detailed example of Delta usage, including fallback to Market (traditional swapping flow), can be found in examples.
const API_URL = 'https://api.paraswap.io';
const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
const PSP_TOKEN = '0xcafe001067cdef266afb7eb5a286dcfd277f3de5';
const { data: quote } = await axios.get(`${API_URL}/quote`, {
params: {
chainId: 1,
srcToken: DAI_TOKEN,
destToken: PSP_TOKEN,
amount: '100000000000000000000', // 100 DAI
srcDecimals: 18,
destDecimals: 18,
mode: 'delta',
side: 'SELL',
},
});const accountWallet = new ethers.Wallet(/*Private Key or Mnemonic*/);
const { data: builtOrder } = await axios.post(`${API_URL}delta/orders/build`, {
price: quote.delta,
chainId: 1,
owner: account.address,
/* if you want to collect fees
partnerAddress: /.../,
partnerFeeBps: /.../, - takes precedence if passed with `partnerTakesSurplus`
partnerTakesSurplus: true,
*/
});// Delta protocol works with EIP-712 signatures
const signature = accountWallet.signTypedData(
builtOrder.domain,
builtOrder.types,
builtOrder.value,
);
// compact the signature
const compactSignature = ethers.Signature.from(signature).compactSerialized;const { data: deltaAuction } = await axios.post(`${API_URL}/orders`, {
chainId: 1,
order: builtOrder.value,
signature: compactSignature,
// partner: '...' // if available
});// poll if necessary
const { data: auction } = await axios.get(`${API_URL}/orders/${deltaAuction.id}`);
if (auction?.status === 'EXECUTED') {
console.log('Auction was executed');
}sourceChainIddestinationChainIdResponse
{
"supportedTokens": {
"1": {
"10": [
"0x4200000000000000000000000000000000000006",
"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
"0x7F5c764cBc14f9669B88837ca1490cCa17c31607"
When executed, this script:
Connects to an Ethereum wallet.
Retrieves the user's wallet address and prepares to swap 100 DAI for PSP tokens on Ethereum Mainnet (Chain ID: 1).
Requests a quote from Velora with the mode: "all", meaning it will prioritize Delta pricing but fall back to market pricing if Delta is unavailable.
If Delta pricing is available, the script:
Builds an order for execution.
Signs the order using EIP-712 structured signing.
Submits the order for execution through the Delta auction system.
If Delta pricing is not available, the script:
Logs the reason for the fallback.
Retrieves a market price route instead.
Builds a transaction using the market price.
This example ensures the swap execution is optimized for efficiency while providing a fail-safe fallback in case Delta pricing is unavailable. As a developer, you should expect a seamless experience for token swaps with automatic routing adjustments.
order*
Order
The order to be submitted.
signature*
string
Signature of the order from order.owner address. EOA signatures must be submitted in ERC-2098 Compact Representation.
chainId*
string
Chain ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Fantom - 250, zkEVM - 1101, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100).
type
MARKET | LIMIT
Indicates order type. Defaults to MARKET. Used for filtering only
Example Responses:
The first example response indicates a successful order submission because it includes an id, orderHash, status, and other relevant order details. The status is "NOT_STARTED", meaning the order has been created but not yet processed.
The second response, { "error": "Validation failed with error" }, indicates a failed submission due to a validation issue, likely caused by missing or incorrect parameters in the request.
import axios from 'axios';
import { ethers } from 'ethers';
const API_URL = "https://api.paraswap.io";
const chainId = 1; // Mainnet
const DAI_TOKEN = '0x6b175474e89094c44da98b954eedeac495271d0f';
const PSP_TOKEN = '0xcafe001067cdef266afb7eb5a286dcfd277f3de5';
async function quoteWithFallback() {
// @ts-expect-error assume window.ethereum is available
const ethersProvider = new ethers.providers.Web3Provider(window.ethereum);
const accounts = await ethersProvider.listAccounts();
const account = accounts[0]!;
const signer = ethersProvider.getSigner(account);
const amount = '100000000000000000000'; // 100 DAI
const { data: quote } = await axios.get(`${API_URL}/quote`, {
params: {
chainId,
srcToken: DAI_TOKEN,
destToken: PSP_TOKEN,
amount,
userAddress: account,
srcDecimals: 18,
destDecimals: 18,
mode: 'all', // Delta quote if possible, with fallback to Market price
side: 'SELL',
},
});
if ('delta' in quote) {
// Delta pricing is available - we can build and submit a order
const price = quote.delta;
// build order
const { data: builtOrder } = await axios.post(`${API_URL}/orders/build`, {
price,
chainId,
owner: account,
});
// sign the order
const signature = signer.signTypedData(
builtOrder.domain,
builtOrder.types,
builtOrder.value,
);
// compact the signature
const compactSignature = ethers.Signature.from(signature).compactSerialized;
// submit the order
const { data: deltaAuction } = await axios.post(`${API_URL}/orders`, {
order: builtOrder.value,
signature: compactSignature,
// partner: '...' // if available
});
// poll if necessary
const { data: auction } = await axios.get(`${API_URL}/orders/${deltaAuction.id}`);
if (auction?.status === 'EXECUTED') {
console.log('Auction was executed');
}
} else {
// Delta pricing failed - falling back to market
console.log(
`Delta Quote failed: ${quote.fallbackReason.errorType} - ${quote.fallbackReason.details}`
);
const priceRoute = quote.market;
// build transaction params
const { data: txParams } = await axios.post(`${API_URL}/transactions/${chainId}`, {
srcToken: DAI_TOKEN,
destToken: PSP_TOKEN,
srcAmount: amount,
slippage: 100, // 1%
priceRoute,
userAddress: account,
// partner: '...' // if available
});
// submit the transaction
const swapTx = await signer.sendTransaction(txParams);
}
}{
"id": "57165af8-eee8-408e-b8e8-86cc7f5c9f5c",
"auctionOrderId": "e4579d19-e4b9-4fa1-87f3-edcf6c002a3b",
"deltaVersion": "2.0",
"user": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"signature": "0xd3696d88ae37871f79356a8cc5fee465a6cf514e7e875a6e4e004caac16079f69d03023d2deecbaf8e11fd300572b25dd9a7669986e8c6dbbb712f489071ce23",
"status": "NOT_STARTED",
"bridgeStatus": null,
"order": {
"owner": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"beneficiary": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"srcToken": "0x4200000000000000000000000000000000000006",
"destToken": "0xfde4c96c8593536e31f229ea8f37b2ada2699bb2",
"srcAmount": "500000000000000",
"destAmount": "2140607",
"expectedAmount": "2151364",
"kind": 0,
"metadata": "0x",
"deadline": 1757371581,
"nonce": "1757367983280",
"partnerAndFee": "90631063861114836560958097440945986548822432573276877133894239693005947666432",
"permit": "0x",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 10,
"outputToken": "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58",
"scalingFactor": 0,
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001490"
}
},
"bridgeMetadata": null,
"orderVersion": "2.0.0",
"orderHash": "0x079ea5b71361f8140259f8cf3844f7a29bb310c1cf8f8688bb5e9f40a688efcd",
"partiallyFillable": false,
"chainId": 8453,
"type": "MARKET",
"partner": "paraswap.io",
"referrerAddress": null,
"includeAgents": null,
"excludeAgents": null,
"bridgeProtocol": "ACROSS",
"deltaGasOverhead": 185712,
"expiresAt": "2025-09-08T22:46:21.000Z",
"createdAt": "2025-09-08T21:46:40.398Z",
"updatedAt": "2025-09-08T21:46:40.398Z"
}{
"error": "Validation failed with error"
}Submits the transaction directly to the Ethereum network using the user's wallet.
partiallyFillable
boolean
Allow the order to be filled in parts. Default: false
partner
string
Partner string.
includeAgents
string[]
List of agent names to include. If not provided, all the agents are included
excludeAgents
string[]
List of agent names to exclude. If not provided, none of the agents are excluded
referrerAddress
string
Referrer address
POST https://api.paraswap.io/transactions/:network
Build parameters for a transaction with the response from /prices endpoint.
Path parameters define the network on which the transaction will be executed. Since blockchain networks operate independently, specifying the correct network ensures that the API queries the right environment for liquidity and transaction execution.
As an integrator, you can modify the behavior of the API call based on the Query parameters. This allows you to customize the response based on your needs.
The request body provides the details needed to execute a swap, including token details, amounts, pricing data, and user-specific parameters.
Example:
Here’s an example of a successful and failed transaction.
The following is a list of the most common error messages of the /transactions endpoint. Most are self-explanatory and can be self-solved, but feel free to contact Velora Support using the chat in the bottom right corner of this page.
Validation failed: permit signature should be lower than 706
Validation failed: <error> - params validation failed (message has the exact reason of failure)
Missing price route - price route param is not passed
eip1559
boolean
Allows the API to return EIP-1559 styled transaction with maxFeePerGas and maxPriorityFeePerGas paramters.
*Note: We currently support EIP1559 transactions in the following chains:
Mainnet, Ropsten, and Avalanche.
Default: false
srcAmount
integer
Source Amount with decimals. Required if side=SELL. Could only be omitted if slippage is provided when side=BUY
destAmount
integer
Destination amount with decimals. Required if side=BUY. Could only be omitted if slippage is provided when side=SELL.
priceRoute
object
priceRoute from response body returned from /prices endpoint. priceRoute should be sent exactly as it was returned by the /prices endpoint.
slippage
integer
Allowed slippage percentage represented in basis points.
Eg: for 2.5% slippage, set the value to 2.5 * 100 = 250; for 10% = 1000. Slippage could be passed instead of destAmount when side=SELL or srcAmount when side=BUY.
Min: 0; Max: 10000
userAddress
string
Address of the caller of the transaction (msg.sender)
txOrigin
string
Whenever msg.sender (userAddress) i.e. address calling the Velora contract is different than the address sending the transaction, txOrigin must be passed along with userAddress.
receiver
string
Address of the Receiver (that will receive the output of the swap). Used for Swap&Transfer.
partnerAddress
string
Address that will be entitled to claim fees or surplus.
*Note: Fees have to be claimed from the unless isSurplusToUser or isDirectFeeTransfer are used
partnerFeeBps
string
If provided it is used together with partnerAddress. Should be in basis points percentage. Look at slippage parameter description for understanding better.
Eg: 200 (for 2% fee percent)
*Note: Fees have to be claimed from the unless isSurplusToUser or isDirectFeeTransfer are used
partner
string
Your project name.
Used for providing analytics on your project swaps.
permit
string
Hex string for the signature used for Permit. This can be used to avoid giving approval. Helps in saving gas.
deadline
integer
Timestamp (10 digit/seconds precision) till when the given transaction is valid. For a deadline of 5 minute, deadline: Math.floor(Date.now()/1000) + 300
E.g.: 1629214486
isCapSurplus
boolean
Allows for capping the surplus at 1% maximum.
Default: true
takeSurplus
boolean
Allows to collect surplus. Works with partnerAddress
Default: false
isSurplusToUser
boolean
Specify if user should receive surplus instead of partner.
Default: false
isDirectFeeTransfer
boolean
Specify if fees should be sent directly to the partner instead of registering them on FeeClaimer.
Default: false
Missing srcAmount (sell)Cannot specify both slippage and destAmount (sell)
Missing slippage or destAmount (sell)
Missing slippage or srcAmount (buy)
Source Amount Mismatch (sell)
Destination Amount Mismatch (buy)
Missing destAmount (buy)
Cannot specify both slippage and srcAmount (buy)
Network Mismatch
Source Token Mismatch
Destination Token Mismatch
Contract method doesn't support swap and transfer
Side Mismatch
Source Decimals Mismatch
Destination Decimals Mismatch
It is not allowed to pass both params: "positiveSlippageToUser" and "takeSurplus". - We advise removing "positiveSlippageToUser" because it is deprecated
When "isSurplusToUser"="true", "takeSurplus" must be also "true" and either "partnerAddress" or "partner" must be set
When "isDirectFeeTransfer"="true", please also set "takeSurplus"="true" and provide partner/fee information via "partnerFeeBps" & "partnerAddress" or valid "partner" params; or add "referrer" param
Internal Error while building transaction - something went wrong during the transaction build
Unable to build transaction <code> - something went wrong during the transaction build
It is not allowed to have limit-orders Dex or paraswappool Dex in route and 'ignoreChecks=true' together. Consider requesting the price with excluded limit-orders if you want to use 'ignoreChecks': &excludeDEXS=ParaSwapPool,ParaSwapLimitOrders
It seems like the rate has changed, please re-query the latest Price
The rate has changed, please re-query the latest Price
This transaction has some errors and may fail. Please contact support for more details
Not enough <token> balance
Not enough <token> allowance given to TokenTransferProxy(<spender>)
Unable to check price impact - src or dest tokens don’t have valid usd price
network
number
Network ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100, Sonic - 146, Unichain - 130, Plasma - 9745).
gasPrice
string
Gas-price to be used for the transaction in wei.
ignoreChecks
boolean
Allows the API to skip performing on-chain checks such as balances, allowances, as well as possible transaction failures.
*Note: The response does not contain gas parameter when ignoreChecks is set to true.
Default: false
ignoreGasEstimate
boolean
Allows the API to skip gas checks
*Note: The response does not contain gas parameter when ignoreGasEstimate is set to true.
Default: false
onlyParams
boolean
Allows the API to return the contract parameters only.
Default: false
srcToken
string
Destination Token Address. Only Token Symbol could be specified for tokens from /tokens.
srcDecimals
integer
Source Token Decimals. (Can be omitted if Token Symbol is provided for srcToken).
destToken
string
Destination Token Address. Only Token Symbol could be specified for tokens from /tokens.
destDecimals
integer
Destination Token Decimals. (Can be omitted if Token Symbol is provided for destToken).
GET https://api.paraswap.io/prices
This endpoint gets the optimal price and price route required to swap from one token to another.
You’ll find the parameters to build a successful query below:
Here are two examples of a successful price response and a failed query.
The first query was a sell price request on Ethereum Mainnet (chainId: 1) using Velora's Market API. The request aimed to swap 1,000 USDC for ETH (destToken: 0xeeee...eeee) while retrieving the best possible route for the trade.
As a result, it successfully retrieved an optimized route for swapping 1,000 USDC to ETH via Uniswap V3, with minimal slippage and efficient execution while estimating gas costs.
The following is a list of the most common error messages of the /prices endpoint. Most are self-explanatory and can be self-solved, but feel free to contact Velora Support using the chat in the bottom right corner of this page.
Invalid route, from token should be the first token of the route
Invalid route, to token should be the last token of the route
Token not found. Please pass srcDecimals & destDecimals query params to trade any tokens -Check the doc for more details
The /swap endpoint allows you to make one API call to get both the priceRoute object as well as the Transaction Object.
It is designed to simplify the trading process by combining price estimation and transaction calldata generation into a single API call. This makes it a convenient option for users who want a quick and streamlined way to execute trades without handling multiple requests. However, while it offers ease of use, it also comes with certain limitations.
Lower rate limits
{
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"to": "0x6a000f20005980200259b80c5102003040001068",
"value": "0",
"data": "0xe3ead59e0000000000000000000000005f0000d4780a00d2dce0a00004000800cb0e5041000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000db4d11c67691ad50000000000000000000000000000000000000000000000000dd8426a4440caf10a8104c26c244959a1d46f205acc49520000000000000000000000000133fc2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000160a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000006000240000ff00000300000000000000000000000000000000000000000000000000000000a9059cbb0000000000000000000000004610ba8d5d10fba8c048a2051a0883ce04eabace00000000000000000000000000000000000000000000000000000000000f42406a000f20005980200259b80c51020030400010680000008000240000ff0600030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f4240000000000000000000004de54610ba8d5d10fba8c048a2051a0883ce04eabace",
"gasPrice": "16000000000",
"chainId": 1
}{
"error": "Unable to process the transaction"
}side
string
SELL or BUY.
Default: SELL.
network
string
Network ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100, Sonic - 146, Unichain - 130, Plasma - 9745).
Default: 1.
otherExchangePrices
boolean
If provided, others object is filled in the response with price quotes from other exchanges (if available for comparison).
Default: false
includeDEXS
string
Comma Separated List of DEXs to include.
All supported DEXs by chain can be found
eg: UniswapV3, CurveV1
excludeDEXS
string
Comma Separated List of DEXs to exclude.
All supported DEXs by chain can be found
eg: UniswapV3, CurveV1
excludeRFQ
boolean
Exclude all RFQs from pricing
eg: AugustusRFQ, Hashflow
Default: false
includeContractMethods
string
Comma Separated List of Comma Separated List of Contract Methods to include in pricing (without spaces). View the list of the supported methods for and eg: swapExactAmountIn,swapExactAmountInOnUniswapV2
excludeContractMethods
string
Comma Separated List of Contract Methods to exclude from pricing (without spaces). View the list of the supported methods for and
userAddress
string
User's Wallet Address.
route
string
Dash (-) separated list of tokens (addresses or symbols from /tokens) to comprise the price route. Max 4 tokens.
*Note: If route is specified, the response will only comprise of the route specified which might not be the optimal route.
partner
string
Partner string.
destDecimals*
integer
Destination Token Decimals. (Can be omitted if Token Symbol is used in destToken).
maxImpact
number
In %. It's a way to bypass the API price impact check (default = 15%).
receiver
String
Receiver's Wallet address. (Can be omitted if swapping tokens from and to same account)
srcTokenTransferFee
string
If the source token is a tax token, you should specify the tax amount in BPS.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
destTokenTransferFee
string
If the destination token is a tax token, you should specify the tax amount in BPS.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
srcTokenDexTransferFee
string
If the source token is a tax token, you should specify the tax amount in BPS. Some tokens only charge tax when swapped in/out DEXs and not on ordinary transfers.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
destTokenDexTransferFee
string
If the destination token is a tax token, you should specify the tax amount in BPS. Some tokens only charge tax when swapped in/out DEXs, not on ordinary transfers.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
version
number
To specify the protocol version. Values: 5 or 6.2 Default: 5
excludeContractMethodsWithoutFeeModel
boolean
Specify that methods without fee support should be excluded from the price route. Default: false
ignoreBadUsdPrice
boolean
If tokens USD prices are not available, Bad USD Price error will be thrown. Use this param to skip this check. Default: false
Invalid tokens - (srcToken and destToken) or (route) params are not passed
If receiver is defined userAddress should also be defined
It is not allowed to pass both params: "positiveSlippageToUser" and "takeSurplus". - We advice removing "positiveSlippageToUser", because it is deprecated
excludeDirectContractMethods param is deprecated, please use excludeContractMethodsWithoutFeeModel for newer versions
Invalid Amount - amount param is not a valid number
Validation failed: <error> - params validation failed (message has the exact reason for failure)
Price Timeout - reverts when a query takes more time than expected
No routes found with enough liquidity
Bad USD price - src or dest tokens don’t have valid usd price
Estimated_loss_greater_than_max_impact
Internal Error while computing the price - something went wrong during the price route calculation
Invalid max USD impact - maxUSDImpact is not a valid number
Error while handling price request - something went wrong during the price route calculation
srcToken*
string
Source Token Address. Instead Token Symbol could be used for tokens listed in the /tokens endpoint.
srcDecimals*
integer
Source Token Decimals. (Can be omitted if Token Symbol is used in srcToken).
destToken*
string
Destination Token Address. Instead Token Symbol could be used for tokens listed in the /tokens endpoint.
amount*
string
srcToken amount (in case of SELL) or destToken amount (in case of BUY). The amount should be in WEI/Raw units (eg. 1WBTC -> 100000000)
It doesn't check sufficient allowances and balances
It doesn't return the gas field in txParams, thus the transaction should be simulated locally
It automatically excludes RFQ-based DEXs such as AugustusRFQ & ParaSwapLimitOrders.
GET https://api.paraswap.io/swap
This endpoint gets the optimal price and price route required to swap from one token to another.
Additionally the swap endpoint also generates the parameters required for the transaction.
srcToken*
string
Source Token Address. Instead Token Symbol could be used for tokens listed in the /tokens endpoint.
srcDecimals*
integer
Source Token Decimals. (Can be omitted if Token Symbol is used in srcToken).
destToken*
string
Destination Token Address. Instead Token Symbol could be used for tokens listed in the /tokens endpoint.
amount*
string
srcToken amount (in case of SELL) or destToken amount (in case of BUY). The amount should be in WEI/Raw units (eg. 1WBTC -> 100000000)
Example:
Here’s an example of an integrator that used the swap function to request a price and generate a transaction.
Swaps fees and Swap&Transfer (where the receiver is not the same as the sender) don't work when swapOnUniswap, swapOnUniswapFork, swapOnZeroXv2, and swapOnZeroXv4 etc. contract methods are used.
If you would like to disable these methods you can do so by setting a whitelist for methods where Swap&Transfer is supportedincludeContractMethods=simpleSwap,multiSwap,megaSwap
The following is a list of the most common error messages of the /swap endpoint. Most are self-explanatory and can be self-solved, but feel free to contact Velora Support using the chat in the bottom right corner of this page.
Missing response from pricing API - failed to get a response from pricing API
Can not receive price route - failed to receive price route from the pricing API response
POST https://api.paraswap.io/delta/orders/build
This section explains how to construct a Delta Order, which is essential for executing trades using the Velora Delta API. The /orders/build endpoint retrieves a Delta price and allows fallback to market prices.
A successfully built order includes a structured object ready for signing.
Common errors include validation failures, unsupported assets, and signature mismatches.
{
"priceRoute": {
"blockNumber": 19462957,
"network": 1,
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcDecimals": 6,
"srcAmount": "1000000000",
"destToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"destDecimals": 18,
"destAmount": "283341969876959340",
"bestRoute": [
{
"percent": 100,
"swaps": [
{
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcDecimals": 6,
"destToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"destDecimals": 18,
"swapExchanges": [
{
"exchange": "UniswapV3",
"srcAmount": "1000000000",
"destAmount": "283341969876959340",
"percent": 100,
"poolAddresses": [
"0x88e6a0c2ddd26feeb64f039a2c41296fcb3f5640"
],
"data": {
"path": [
{
"tokenIn": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"tokenOut": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"fee": "500",
"currentFee": "500"
}
],
"gasUSD": "13.515820"
}
}
]
}
]
}
],
"gasCostUSD": "14.656605",
"gasCost": "118200",
"side": "SELL",
"version": "6.2",
"contractAddress": "0x6a000f20005980200259b80c5102003040001068",
"tokenTransferProxy": "0x6a000f20005980200259b80c5102003040001068",
"contractMethod": "swapExactAmountInOnUniswapV3",
"partnerFee": 0,
"srcUSD": "999.4370000000",
"destUSD": "1003.8267642998",
"partner": "anon",
"maxImpactReached": false,
"hmac": "7975cda2fd343cb90f1a15d1ec11302c467a8d7d"
}
}{
"error": "Validation failed with error"
}{
"priceRoute": {
"blockNumber": 20184108,
"network": 1,
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcDecimals": 6,
"srcAmount": "1000000",
"destToken": "0x6b175474e89094c44da98b954eedeac495271d0f",
"destDecimals": 18,
"destAmount": "997620341641628401",
"bestRoute": [
{
"percent": 100,
"swaps": [
{
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcDecimals": 6,
"destToken": "0x6b175474e89094c44da98b954eedeac495271d0f",
"destDecimals": 18,
"swapExchanges": [
{
"exchange": "ShibaSwap",
"srcAmount": "1000000",
"destAmount": "997620341641628401",
"percent": 100,
"poolAddresses": [
"0x4610bA8d5D10FBa8C048A2051a0883CE04eaBAcE"
],
"data": {
"router": "0xF9234CB08edb93c0d4a4d4c70cC3FfD070e78e07",
"path": [
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"0x6b175474e89094c44da98b954eedeac495271d0f"
],
"factory": "0x115934131916C8b277DD010Ee02de363c09d037c",
"initCode": "0x65d1a3b1e46c6e4f1be1ad5f99ef14dc488ae0549dc97db9b30afe2241ce1c7a",
"feeFactor": 10000,
"pools": [
{
"address": "0x4610bA8d5D10FBa8C048A2051a0883CE04eaBAcE",
"fee": 30,
"direction": false
}
],
"gasUSD": "5.515040"
}
}
]
}
]
}
],
"gasCostUSD": "5.932529",
"gasCost": "107570",
"side": "SELL",
"version": "6.2",
"contractAddress": "0x6a000f20005980200259b80c5102003040001068",
"tokenTransferProxy": "0x6a000f20005980200259b80c5102003040001068",
"contractMethod": "swapExactAmountIn",
"partnerFee": 0,
"srcUSD": "1.0000000000",
"destUSD": "0.9973641328",
"partner": "anon",
"maxImpactReached": false,
"hmac": "39d19445379b69c115149340c5caaa05c898e840"
},
"txParams": {
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"to": "0x6a000f20005980200259b80c5102003040001068",
"value": "0",
"data": "0xe3ead59e0000000000000000000000005f0000d4780a00d2dce0a00004000800cb0e5041000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000f42400000000000000000000000000000000000000000000000000db4d11c67691ad50000000000000000000000000000000000000000000000000dd8426a4440caf10a8104c26c244959a1d46f205acc49520000000000000000000000000133fc2c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000160a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000006000240000ff00000300000000000000000000000000000000000000000000000000000000a9059cbb0000000000000000000000004610ba8d5d10fba8c048a2051a0883ce04eabace00000000000000000000000000000000000000000000000000000000000f42406a000f20005980200259b80c51020030400010680000008000240000ff0600030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000f4240000000000000000000004de54610ba8d5d10fba8c048a2051a0883ce04eabace",
"gasPrice": "16000000000",
"chainId": 1
}
}{
"error": "computePrice Errorside
string
SELL or BUY.
Default: SELL.
network
string
Network ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100, Sonic - 146, Unichain - 130, Plasma - 9745).
Default: 1.
otherExchangePrices
boolean
If provided, others object is filled in the response with price quotes from other exchanges (if available for comparison).
Default: false
includeDEXS
string
Comma Separated List of DEXs to include.
Supported DEXs:
Uniswap, Kyber, Bancor, AugustusRFQ, Oasis, Compound, Fulcrum, 0x, MakerDAO, Chai, Aave, Aave2, MultiPath, MegaPath, Curve, Curve3, Saddle, IronV2, BDai, idle, Weth, Beth, UniswapV2, Balancer, 0xRFQt, SushiSwap, LINKSWAP, Synthetix, DefiSwap, Swerve, CoFiX, Shell, DODOV1, DODOV2, OnChainPricing, PancakeSwap, PancakeSwapV2, ApeSwap, Wbnb, acryptos, streetswap, bakeryswap, julswap, vswap, vpegswap, beltfi, ellipsis, QuickSwap, COMETH, Wmatic, Nerve, Dfyn, UniswapV3, Smoothy, PantherSwap, OMM1, OneInchLP, CurveV2, mStable, WaultFinance, MDEX, ShibaSwap, CoinSwap, SakeSwap, JetSwap, Biswap, BProtocol
eg: UniswapV3,0x
excludeDEXS
string
Comma Separated List of DEXs to exclude. (from the list of DEXs mentioned above).
includeContractMethods
string
Comma Separated List of Contract Methods to include without spaces. Available values: swapOnUniswap, buyOnUniswap, swapOnUniswapFork, buyOnUniswapFork, swapOnUniswapV2Fork, buyOnUniswapV2Fork, simpleBuy, simpleSwap, multiSwap, megaSwap, protectedMultiSwap, protectedMegaSwap, protectedSimpleSwap, protectedSimpleBuy, swapOnZeroXv2, swapOnZeroXv4, buy.
eg: simpleSwap,multiSwap
excludeContractMethods
string
Comma Separated List of Contract Methods to exclude without spaces. (from the list of contract methods mentioned above).
userAddress
string
User's Wallet Address.
route
string
Dash (-) separated list of tokens (addresses or symbols from /tokens) to comprise the price route. Max 4 tokens.
*Note: If route is specified, the response will only comprise of the route specified which might not be the optimal route.
partner
string
Partner string.
partnerFeeBps
string
If provided it is used together with partnerAddress. Should be in basis points percentage. Look at slippage parameter description for understanding better. Eg: 200 (for 2% fee percent)
*Note: Fees have to be claimed from the Fee Claimer contract unless isSurplusToUser or isDirectFeeTransfer are used
partnerAddress
string
Address that will be entitled to claim fees or surplus.
*Note: Fees have to be claimed from the Fee Claimer contract unless isSurplusToUser or isDirectFeeTransfer are used
slippage
integer
Allowed slippage percentage represented in basis points.
Eg: for 2.5% slippage, set the value to 2.5 * 100 = 250; for 10% = 1000. Slippage could be passed instead of destAmount when side=SELL or srcAmount when side=BUY.
Min: 0; Max: 10000
destDecimals*
integer
Destination Token Decimals. (Can be omitted if Token Symbol is used in destToken).
maxImpact
number
In %. It's a way to bypass the API price impact check (default = 15%).
receiver
String
Receiver's Wallet address. (Can be omitted if swapping tokens from and to same account)
srcTokenTransferFee
string
If the source token is a tax token, you should specify the tax amount in BPS.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
destTokenTransferFee
string
If the destination token is a tax token, you should specify the tax amount in BPS.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
srcTokenDexTransferFee
string
If the source token is a tax token, you should specify the tax amount in BPS. Some tokens only charge tax when swapped in/out DEXs and not on ordinary transfers.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
destTokenDexTransferFee
string
If the destination token is a tax token, you should specify the tax amount in BPS. Some tokens only charge tax when swapped in/out DEXs, not on ordinary transfers.
*For example: for a token with a 5% tax, you should set it to 500 as
[(500/10000)*100=5%]
**Note: not all DEXs and contract methods support trading tax tokens, so we will filter those that don't.
version
number
To specify the protocol version. Values: 5 or 6.2 Default: 5
ignoreBadUsdPrice
boolean
If tokens USD prices are not available, Bad USD Price error will be thrown. Use this param to skip this check. Default: false
isSurplusToUser
boolean
Specify if user should receive surplus instead of partner.
Default: false
isDirectFeeTransfer
boolean
Specify if fees should be sent directly to the partner instead of registering them on FeeClaimer.
Default: false
isCapSurplus
boolean
Allows for capping the surplus at 1% maximum.
Default: true
takeSurplus
boolean
Allows to collect surplus. Works with partnerAddress
Default: false
Use this guide to generate a Delta Order and prepare it for signing before submission.
price*
DeltaPrice
The delta object retrieved from /quote .
chainId*
number
Chain ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Fantom - 250, zkEVM - 1101, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100).
owner*
string
Order owner address.
bridge
DeltaBridge
Required only for cross-chain orders. See below for details
DeltaBridge structure:
protocolSelector
string
Selector that indicates the bridge protocol used. Obtained from the price API
destinationChainId
number
Destination chain ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Fantom - 250, zkEVM - 1101, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100).
outputToken
string
Output token on the destination chain. List of supported output tokens can be obtained from /bridge-info . Output token can also be obtained from price.bridge.outputToken
scalingFactor
number
Specifies difference between the decimals in source bridge token and destination token
ValidationError - validation for params failed
UnsupportedChain - the chain ID is not supported by Delta.
UnsupportedToken - the token is not supported by Delta.
InvalidHmac - hmac check failed, meaning price object returned from /quote endpoint was mutated.
Permit(ERC-2612) - expected to have 224 bytes length (owner, spender, value, deadline, v, r, s).
Permit2
TransferFrom format - expected length is 96 bytes (32 for permitNonce, 64 for compact signature), amount and deadline should be the same as in Order.
Allowance format - expected length is 192 bytes.
DAI Style Permit - expected length is 256 bytes.
0x01 - special permit value that signifies existing Permit2 allowance.
Delta Contract should be specified as a spender is a permit.
Once the Delta Order is built, it must be signed using the EIP-712 standard before submission. This section provides a working example using ethers.js and axios.
Example:
The following snippet provides an example implementation of constructing the DeltaBridge structure for the cross-chain swap
The fees are enabled by encoding partnerAndFee param of the order, before its signed by a user.
The param includes three values:
partnerAddress - on-chain address which will be able to collect the fees.
partnerFeeBps - flat fee percent which will be taken from the order. The value is in base points (100is 1%), which the maximum allowed value of 200.
partnerTakeSurplus - a flag that, if set, allows the partner to collect 50% of the surplus as fees. It has no impact if passed together with partnerFeeBps, since partnerFeeBps takes precedence.
These are encoded into a single uint256 value, which then is used as partnerAndFee.
{
"toSign": {
"domain": {
"name": "Portikus",
"version": "2.0.0",
"chainId": 1,
"verifyingContract": "0x0000000000bbf5c5fd284e657f01bd000933c96d"
},
"types": {
"Order": [
{
"name": "owner",
"type": "address"
},
{
"name": "beneficiary",
"type": "address"
},
{
"name": "srcToken",
"type": "address"
},
{
"name": "destToken",
"type": "address"
},
{
"name": "srcAmount",
"type": "uint256"
},
{
"name": "destAmount",
"type": "uint256"
},
{
"name": "expectedAmount",
"type": "uint256"
},
{
"name": "deadline",
"type": "uint256"
},
{
"name": "kind",
"type": "uint8"
},
{
"name": "nonce",
"type": "uint256"
},
{
"name": "partnerAndFee",
"type": "uint256"
},
{
"name": "permit",
"type": "bytes"
},
{
"name": "metadata",
"type": "bytes"
},
{
"name": "bridge",
"type": "Bridge"
}
],
"Bridge": [
{
"name": "protocolSelector",
"type": "bytes4"
},
{
"name": "destinationChainId",
"type": "uint256"
},
{
"name": "outputToken",
"type": "address"
},
{
"name": "scalingFactor",
"type": "int8"
},
{
"name": "protocolData",
"type": "bytes"
}
]
},
"value": {
"owner": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"beneficiary": "0x0000000000000000000000000000000000000000",
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcAmount": "10000000",
"destAmount": "9127760",
"expectedAmount": "9219960",
"deadline": 1757333024,
"kind": 0,
"nonce": "47551995136396664604384293391986507799897145387152361812735887931703330715323",
"permit": "0x",
"partnerAndFee": "0",
"metadata": "0x",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 8453,
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"scalingFactor": 0,
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
}
}
}{
"errorType": "InvalidHmac",
"details": "Invalid HMAC"
}import { ethers, TypedDataEncoder } from "ethers"; // ethers V6
import axios from "axios";
const userWallet = new ethers.Wallet(ethers.id("alice"));
const userAddress = userWallet.address;
const chainId = 1;
// fetch price
const { data: quoteData } = await axios.get("https://api.paraswap.io/quote?mode=delta&...");
const price = quoteData.delta;
// prepare build order params
const buildOrderParams = {
price,
owner: userAddress,
chainId,
partnerAddress: "0x81037e7be71bce9591de0c54bb485ad3e048b8de",
partnerFeeBps: 100, // 1%
partnerTakesSurplus: false, // the default
};
// build the order to sign
const { data: buildOrderData } = await axios.post("https://api.paraswap.io/delta/orders/build", buildOrderParams);
const { domain, types, value: order } = buildOrderData.toSign;
// hash the order
const eip712Hash = TypedDataEncoder.hash(
domain,
types,
order,
);
// sign and compact
const signature = userWallet.signingKey.sign(typedHash).compactSerialized; // ERC-2098 representationimport { ethers, TypedDataEncoder } from "ethers"; // ethers V6
import axios from "axios";
const ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"; // same across all chains
const USDC_ADDRESS_ETH = "0xA0b86991c6218b36c1d19D4a2e9EB0CE3606EB48"; // USDC on Ethereum
const WETH_ADDRESS_OP = "0x4200000000000000000000000000000000000006";
const userWallet = new ethers.Wallet(ethers.id("alice"));
const userAddress = userWallet.address;
const srcChainId = 1;
const destChainId = 10;
const buildAndSignOrder = async (
srcToken: string,
srcDecimals: number,
// dest token on destination chain
destToken: string,
destDecimals: number,
srcChainId: number,
destChainId: number,
amount: number,
) => {
const { data: quoteData } = await axios.get(`https://api.paraswap.io/quote`, {
params: {
mode: "delta",
srcToken,
srcDecimals,
destToken,
destDecimals,
chainId: srcChainId,
destChainId,
amount,
},
});
const price = quoteData.delta;
// prepare build order params
const buildOrderParams = {
price,
owner: userAddress,
chainId: srcChainId,
partnerAddress: "0x81037e7be71bce9591de0c54bb485ad3e048b8de",
partnerFeeBps: 100, // 1%
partnerTakesSurplus: false, // the default,
bridge: price.bridge,
};
// build the order to sign
const { data: buildOrderData } = await axios.post(
"https://api.paraswap.io/delta/orders/build",
buildOrderParams,
);
const { domain, types, value: order } = buildOrderData.toSign;
// hash the order
const eip712Hash = TypedDataEncoder.hash(domain, types, order);
// sign and compact
const signature = userWallet.signingKey.sign(eip712Hash).compactSerialized; // ERC-2098 representation
return { order, signature };
};
// swap 1 USDC on Mainnet to WETH on Optimism
const order = await buildAndSignOrder(
USDC_ADDRESS_ETH,
6,
WETH_ADDRESS_OP,
18,
srcChainId,
destChainId,
10 ** 18,
);
beneficiary
string
Order beneficiary. Default: zero address, meaning owner address.
slippage
number
Slippage in base points (100 is 1%). Default: 100.
deadline
number
Order expiry time as UNIX timestamp. Default: 1 hour from order creation.
nonce
string
Arbitrary uint256 value to be used as order nonce. Default: value generated with internal algos. It is recommended to omit this param.
permit
string
Encoded permit to be used in order settlement. Supported permit types are described here. Default: 0x.
partiallyFillable
boolean
If true, order will be generated as partially fillable. Default: false.
partnerAddress
string
Address of the partner. Used to collect fees from the order. Default: zero address.
partnerFeeBps
number
Partner fee percent in base points (100 is 1%). Max value is 200. Default: 0.
partnerTakesSurplus
boolean
If true, partner will collect 50% of the order surplus instead of flat percent fee. Default: false.
protocolData
string
Protocol-specific data, obtained from pricing API
Available order statuses (status property)
NOT_STARTED
The initial state of an order when it enters the system. Orders in this state are waiting to be included in a batch auction. Orders that failed execution may also be reset to this state to retry.
RUNNING
Orders that are actively being considered for execution in the current batch auction.
EXECUTING
Orders that have been assigned to a winning agent who has been notified to execute them. This status indicates that on-chain execution is in progress. Orders remain in this state untiltransaction confirmation or timeout.
INSUFFICIENT_BALANCE
This state indicates that an order has insufficient token balance during secondary validation. This happens when a user's token balance drops below the required amount after the initial validation. Since this is a non-terminal status, the system will periodically recheck the balance, allowing the order to proceed to auction if the user adds sufficient funds.
INSUFFICIENT_ALLOWANCE
This state indicates that an order has insufficient token allowance during secondary validation. This occurs when a user's approval for the Delta contract is reduced or revoked after initial validation. Since this is a non-terminal status, the system will periodically recheck the allowance, allowing the order to proceed if the user reinstates or increases the approval.
INVALIDATED
A terminal status indicating that an order has failed secondary validation before being included in an auction. This happens when orders undergo re-validation after initial posting but before auction inclusion. Orders may be invalidated due to changed conditions since initial validation, for example nonce was invalidated because other order with the same nonce has already been executed.
Available bridge statuses (bridgeStatus property, set only for cross-chain orders, null for same-chain orders).
PENDING
The initial status for a bridged order after execution on the source chain. Indicates that the transaction has been successfully executed on the source chain, but hasn't been bridged yet.
FILLED
A terminal state indicating that the order has been filled on the destination chain. fillTx property in bridgeMetadata becomes available.
REFUNDED
A terminal state indicating that the order has been refunded on the source chain. The refunded token would be the one that was sent to bridge after the swap. depositRefundTxHash property in bridgeMetadata becomes available.
GET https://api.paraswap.io/delta/orders
The Get Delta Orders for a User endpoint allows integrators to fetch all orders associated with a specific address, making it invaluable for dashboards, trade history tracking, and compliance purposes.
userAddress*
string
User Address.
chainId
string[]
Comma-separated list of chain ids (e.g. chainId=1,8453
page
integer
Default: 1.
limit
integer
Default: 100.
These are the two most common messages when using this endpoint.
ValidationError - validation for params failed
UnsupportedChain - the chain ID is not supported by Delta.
To avoid running into ValidationError and UnsupportedChain errors when using this endpoint, here are some recommendations:
Check Required Parameters: Ensure all mandatory parameters are included in your request. Missing or incorrectly formatted fields often trigger this error.
Validate Data Types: Confirm that parameters match the expected types (e.g., numbers vs. strings, correct JSON structure).
Follow API Documentation: Double-check the expected format for each parameter in the official API documentation.
Verify Supported Chains: Check the API documentation or a dedicated "supported chains" endpoint to ensure the chain ID is compatible with Delta.
Use Correct Chain IDs: Some APIs require chain IDs in decimal format, while others expect hex. Ensure you’re using the correct format.
{
"id": "57165af8-eee8-408e-b8e8-86cc7f5c9f5c",
"deltaVersion": "2.0",
"status": "EXECUTED",
"user": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"order": {
"owner": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"beneficiary": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"srcToken": "0x4200000000000000000000000000000000000006",
"destToken": "0xfde4c96c8593536e31f229ea8f37b2ada2699bb2",
"srcAmount": "500000000000000",
"destAmount": "2140607",
"expectedAmount": "2151364",
"kind": 0,
"metadata": "0x",
"deadline": 1757371581,
"nonce": "1757367983280",
"partnerAndFee": "90631063861114836560958097440945986548822432573276877133894239693005947666432",
"permit": "0x",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 10,
"outputToken": "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58",
"scalingFactor": 0,
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001490"
}
},
"orderHash": "0x079ea5b71361f8140259f8cf3844f7a29bb310c1cf8f8688bb5e9f40a688efcd",
"chainId": 8453,
"partner": "paraswap.io",
"expiresAt": "2025-09-08T22:46:21.000Z",
"createdAt": "2025-09-08T21:46:40.398Z",
"updatedAt": "2025-09-08T21:47:10.977Z",
"partiallyFillable": false,
"includeAgents": null,
"excludeAgents": null,
"bridgeMetadata": {
"depositId": 4598367,
"fillDeadline": 1757379701,
"outputAmount": "2148676",
"fillTx": "0x0043cf3ae9f69c6cc7098b4a5bc6454af90067a1a7c553900d20a2afe5dcf8e3"
},
"bridgeStatus": "filled",
"referrerAddress": null,
"type": "MARKET",
"transactions": [
{
"id": "d7e43ea0-5254-4330-9e96-cb55b54ee546",
"hash": "0x0cdd73270941d1a366c34340a2b77a51f56cc3b445f4a9f268fd12af9d6c16a7",
"blockNumber": 35289330,
"blockHash": "0xf141d321f442494a3caaeeb069ec58ce1de5ef17827841ae6d569334dcf0aef9",
"gasUsed": 276385,
"gasPrice": 2999412,
"blobGasUsed": 0,
"blobGasPrice": 0,
"index": 155,
"status": 1,
"from": "0x2e5ef37ade8afb712b8be858fec7389fe32857e2",
"to": "0x0000000000bbf5c5fd284e657f01bd000933c96d",
"receivedAmount": "2152016",
"receivedAmountUSD": 2.15,
"spentAmount": "500000000000000",
"spentAmountUSD": 2.16,
"filledPercent": 10000,
"protocolFee": "651",
"partnerFee": "0",
"agent": "laita",
"orderId": "57165af8-eee8-408e-b8e8-86cc7f5c9f5c",
"bidId": "2081f754-9c72-4243-8557-9f3b9d6c90f6"
}
]
}
[
{
"id": "57165af8-eee8-408e-b8e8-86cc7f5c9f5c",
"deltaVersion": "2.0",
"user": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"status": "EXECUTED",
"order": {
"owner": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"beneficiary": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"srcToken": "0x4200000000000000000000000000000000000006",
"destToken": "0xfde4c96c8593536e31f229ea8f37b2ada2699bb2",
"srcAmount": "500000000000000",
"destAmount": "2140607",
"expectedAmount": "2151364",
"kind": 0,
"metadata": "0x",
"deadline": 1757371581,
"nonce": "1757367983280",
"partnerAndFee": "90631063861114836560958097440945986548822432573276877133894239693005947666432",
"permit": "0x",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 10,
"outputToken": "0x94b008aa00579c1307b0ef2c499ad98a8ce58e58",
"scalingFactor": 0,
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001490"
}
},
"partiallyFillable": false,
"orderHash": "0x079ea5b71361f8140259f8cf3844f7a29bb310c1cf8f8688bb5e9f40a688efcd",
"chainId": 8453,
"partner": "paraswap.io",
"expiresAt": "2025-09-08T22:46:21.000Z",
"createdAt": "2025-09-08T21:46:40.398Z",
"updatedAt": "2025-09-08T21:47:10.977Z",
"includeAgents": null,
"excludeAgents": null,
"bridgeMetadata": {
"depositId": 4598367,
"fillDeadline": 1757379701,
"outputAmount": "2148676",
"fillTx": "0x0043cf3ae9f69c6cc7098b4a5bc6454af90067a1a7c553900d20a2afe5dcf8e3"
},
"bridgeStatus": "filled",
"referrerAddress": null,
"type": "MARKET",
"transactions": [
{
"id": "d7e43ea0-5254-4330-9e96-cb55b54ee546",
"hash": "0x0cdd73270941d1a366c34340a2b77a51f56cc3b445f4a9f268fd12af9d6c16a7",
"blockNumber": 35289330,
"blockHash": "0xf141d321f442494a3caaeeb069ec58ce1de5ef17827841ae6d569334dcf0aef9",
"gasUsed": 276385,
"gasPrice": 2999412,
"blobGasUsed": 0,
"blobGasPrice": 0,
"index": 155,
"status": 1,
"from": "0x2e5ef37ade8afb712b8be858fec7389fe32857e2",
"to": "0x0000000000bbf5c5fd284e657f01bd000933c96d",
"receivedAmount": "2152016",
"receivedAmountUSD": 2.15,
"spentAmount": "500000000000000",
"spentAmountUSD": 2.16,
"filledPercent": 10000,
"protocolFee": "651",
"partnerFee": "0",
"agent": "laita",
"orderId": "57165af8-eee8-408e-b8e8-86cc7f5c9f5c",
"bidId": "2081f754-9c72-4243-8557-9f3b9d6c90f6"
}
]
},
{
"id": "7e6b0bf4-4b71-4b93-bd84-a6dac8d2911a",
"deltaVersion": "2.0",
"user": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"status": "EXECUTED",
"order": {
"owner": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"beneficiary": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"srcToken": "0x0b2c639c533813f4aa9d7837caf62653d097ff85",
"destToken": "0x4200000000000000000000000000000000000006",
"srcAmount": "6505099",
"destAmount": "1491804070300740",
"expectedAmount": "1499300573166573",
"kind": 0,
"metadata": "0x",
"deadline": 1757085896,
"nonce": "1757082301370",
"partnerAndFee": "90631063861114836560958097440945986548822432573276877133894239693005947666432",
"permit": "0x000000000000000000000000b0326588271f2531fbfc9a13d52d3da45be1d9560000000000000000000000000000000000bbf5c5fd284e657f01bd000933c96d000000000000000000000000000000000000000000000000000000000063428b0000000000000000000000000000000000000000000000000000000068bee73a000000000000000000000000000000000000000000000000000000000000001bf7e752fbd74f7e10cb3457fe444e4c9f33f0d339a6dd86f44ef7fae93ff630415610f6dd6997d3771e19f5864988c68be8e00a737efa950481412c3427af1b37",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 8453,
"outputToken": "0x4200000000000000000000000000000000000006",
"scalingFactor": 0,
"protocolData": "0x000000000000000000000000924a9f036260ddd5808007e1aa95f08ed08aa56900000000000000000000000000000000000000000000000000000021864c4f46"
}
},
"partiallyFillable": false,
"orderHash": "0x1b07c0e7e7a98ec8e4d391b112465ad3343bd6b8cb420aa6a0d2e203ba3a5b96",
"chainId": 10,
"partner": "paraswap.io",
"expiresAt": "2025-09-05T15:24:56.000Z",
"createdAt": "2025-09-05T14:25:11.292Z",
"updatedAt": "2025-09-05T14:25:43.733Z",
"includeAgents": null,
"excludeAgents": null,
"bridgeMetadata": {
"depositId": 3383355,
"fillDeadline": 1757094011,
"outputAmount": "1499413876136046",
"fillTx": "0x84da86fd9449a2b8a4d2b6914879cc1ccc5267ec58696560b58f46c97655eb1c"
},
"bridgeStatus": "filled",
"referrerAddress": null,
"type": "MARKET",
"transactions": [
{
"id": "d6efdcd5-d169-46f8-bfef-206d818ac483",
"hash": "0xa1c0d6ac1d1f9ba354ac034b4c780f01a23a183d66e957daa486b13afc216855",
"blockNumber": 140741769,
"blockHash": "0x5cb55e493165cf1e7a2cce2349a700bcbabd7b9daf25aaed6528485bf38779bf",
"gasUsed": 362017,
"gasPrice": 1101208,
"blobGasUsed": 0,
"blobGasPrice": 0,
"index": 15,
"status": 1,
"from": "0x2e5ef37ade8afb712b8be858fec7389fe32857e2",
"to": "0x0000000000bbf5c5fd284e657f01bd000933c96d",
"receivedAmount": "1499557863204788",
"receivedAmountUSD": 6.52,
"spentAmount": "6505099",
"spentAmountUSD": 6.5,
"filledPercent": 10000,
"protocolFee": "257290038215",
"partnerFee": "0",
"agent": "laita",
"orderId": "7e6b0bf4-4b71-4b93-bd84-a6dac8d2911a",
"bidId": "b992925a-54a9-48bc-9dfd-cd159cd60d5f"
}
]
},
{
"id": "45545c6a-a657-48f3-b3ce-c3e9be2316d0",
"deltaVersion": "2.0",
"user": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"status": "EXECUTED",
"order": {
"owner": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"beneficiary": "0xb0326588271f2531fbfc9a13d52d3da45be1d956",
"srcToken": "0x0b2c639c533813f4aa9d7837caf62653d097ff85",
"destToken": "0x4200000000000000000000000000000000000006",
"srcAmount": "2196554",
"destAmount": "488746921607604",
"expectedAmount": "491202936289050",
"kind": 0,
"metadata": "0x",
"deadline": 1757082771,
"nonce": "1757079183686",
"partnerAndFee": "90631063861114836560958097440945986548822432573276877133894239693005947666432",
"permit": "0x000000000000000000000000b0326588271f2531fbfc9a13d52d3da45be1d9560000000000000000000000000000000000bbf5c5fd284e657f01bd000933c96d000000000000000000000000000000000000000000000000000000000021844a0000000000000000000000000000000000000000000000000000000068bedb06000000000000000000000000000000000000000000000000000000000000001c4675562642981eb04e9858348310ff987d90c3a7ec562401c9fe6c1bc3911be127f10f1fcf57b7d4a68e094bf368ee328d6f1016ead6af2fdb40e4bad238e999",
"bridge": {
"protocolSelector": "0x21eaa4cd",
"destinationChainId": 8453,
"outputToken": "0x4200000000000000000000000000000000000006",
"scalingFactor": 0,
"protocolData": "0x000000000000000000000000924a9f036260ddd5808007e1aa95f08ed08aa5690000000000000000000000000000000000000000000000000000000afbbe917c"
}
},
"partiallyFillable": false,
"orderHash": "0xcdc9843d583ac27251090548f8c697f3a2dd3593282da26fcdca857acb743ecc",
"chainId": 10,
"partner": "paraswap.io",
"expiresAt": "2025-09-05T14:32:51.000Z",
"createdAt": "2025-09-05T13:33:14.493Z",
"updatedAt": "2025-09-05T13:44:43.679Z",
"includeAgents": null,
"excludeAgents": null,
"bridgeMetadata": {
"depositId": 3383287,
"fillDeadline": 1757090893,
"outputAmount": "490189613478551",
"fillTx": "0xe018e615c93abb6d16613d28a860476459c0d077559ac7699a18b1cc6b9f5bc5"
},
"bridgeStatus": "filled",
"referrerAddress": null,
"type": "MARKET",
"transactions": [
{
"id": "37370696-5f9d-4c55-b1ad-8af4fc06bbe9",
"hash": "0x9d68335c7350c9f70bfd67bb74240fa99eed8a5c335029a704720f8384627bfd",
"blockNumber": 140740211,
"blockHash": "0xaf50d44ca9473c7ceef1e1ddbc7afa9ec0694c3a3366913422cab498c9856d49",
"gasUsed": 423252,
"gasPrice": 1101096,
"blobGasUsed": 0,
"blobGasPrice": 0,
"index": 5,
"status": 1,
"from": "0x2e5ef37ade8afb712b8be858fec7389fe32857e2",
"to": "0x0000000000bbf5c5fd284e657f01bd000933c96d",
"receivedAmount": "490236786721811",
"receivedAmountUSD": 2.19,
"spentAmount": "2196554",
"spentAmountUSD": 2.2,
"filledPercent": 10000,
"protocolFee": "0",
"partnerFee": "0",
"agent": "laita",
"orderId": "45545c6a-a657-48f3-b3ce-c3e9be2316d0",
"bidId": "dd4b8cb4-ece4-4718-a133-fdc5045790b0"
}
]
}
]{
"error": "Validation failed with error"
}{
"error": "Validation failed with error"
}EXECUTED
A terminal state indicating that the order has been successfully executed on-chain.
FAILED
A terminal state indicating that the order failed execution after multiple retry attempts.
EXPIRED
A terminal state indicating that the order's deadline has passed without successful execution.
type
LIMIT | MARKET
Filters orders by types.
status
OrderStatus[]
Comma-separated list of statuses described above. Other possible values are:
- ACTIVE - any non-terminal status from the list above
- INACTIVE - any terminal status from the list above
- SUSPENDED - orders that are suspended, but might be executed in future (INSUFFICIENT_BALANCE/INSUFFICIENT_ALLOWANCE statuses)
GET https://api.paraswap.io/quote
When implementing this endpoint, you can enable API to fallback to market prices if the Delta pricing is not available. If the quote obtained comes from Market pricing data, you’ll get the learn more about the cause in the fallback reason parameter.
The endpoint behaves differently based on the mode passed:
DELTA - will return the Delta pricing data in the delta field, which can then be used to build, sign and submit a Delta Order.
MARKET - will return the Market pricing data in the market field , which is an equivalent to the successful response from /prices?version=6.2 of the Velora API, which can then be used to . Cross-chain orders are not supported in MARKET mode.
delta ObjectThis section provides information about the swap, bridging path, fees, and available bridge routes.
BridgeInfo object
BridgeFee object
AvailableBridge objectLists all potential bridge routes and their parameters. Each item represents one destination bridge option, containing:
BridgeParams Examples for Successful Responses for each mode.
The following is a list of the most common error messages and fallback reasons of the /delta/quote endpoint. Most are self-explanatory and can be self-solved, but feel free to contact Velora Support using the chat in the bottom right corner of this page.
ValidationError - validation for params failed
UnsupportedChain - the chain ID is not supported by Delta.
UnsupportedToken - the token is not supported by Delta.
amount*
string
srcToken amount (in case of SELL) or destToken amount (in case of BUY). The amount should be in WEI/Raw units (eg. 1WBTC -> 100000000)
side
SELL | BUY
Default: SELL.
chainId*
number
Chain ID. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Fantom - 250, zkEVM - 1101, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100).
userAddress
string
User's Wallet Address.
partner
string
Partner string.
mode
ALL | DELTA | MARKET
Preferred mode for the trade. In case of "all", Delta pricing is returned, with Market as a fallback.
Default: ALL.
MARKET mode is not supported for cross-chain orders
destChainId
number
Destination chain ID for cross-chain quote. (Mainnet - 1, Optimism - 10, BSC - 56, Polygon - 137, Fantom - 250, zkEVM - 1101, Base - 8453, Arbitrum - 42161, Avalanche - 43114, Gnosis - 100).
ALL - default mode. Will return the Delta pricing data in the delta field. In case the Delta prices are unavailable, fallback to MARKET mode and returns the Market pricing data. Also specifies the fallback reason in fallbackReason field. Refer here for example of usage of this mode.
destAmountBeforeFee
string
Destination token amount before applying fees
gasCostUSD
string
Estimated gas cost of executing the transaction, in USD.
gasCost
string
Estimated gas cost in units of gas.
srcUSD
string
USD equivalent of srcAmount.
destUSD
string
USD equivalent of destAmount after all fees.
partner
string
Partner identifier
partnerFee
number
Partner fee
bridge
Bridge?
Bridge details that should be signed within the order. Available only for cross-chain orders
bridgeInfo
BridgeInfo?
Provides metadata about the selected bridge route.
hmac
string
Hash-based message authentication code
fees
BridgeFee[]
Breakdown of fees charged by the bridge protocol. Some bridges might have no fee
gasCostUSD
string
Gas cost estimate in USD for the transaction
bridgeParams
BridgeParams[]
Set of configurations and objects for each protocol variant.
SourceEth - Native chain token cannot be used as source token in Delta.UnsupportedSide - BUY is not supported by Delta yet.
PricingError - internal oracle failed to provide a price.
GasCostExceedsTradeAmount - estimated value paid for gas is bigger than trade amount.
srcToken*
string
Source Token Address.
srcDecimals*
integer
Source Token Decimals.
destToken*
string
Destination Token Address. For cross-chain quote - destination token on the destination chain. Supported destination tokens for cross-chain can be obtained from /bridge-info endpoint
destDecimals*
integer
Destination Token Decimals.
delta
object?
Main data structure containing details about the swap and bridge operation. Used to sign and submit a Delta order. See below for details
market
object?
Will return the Market pricing . Included when mode=MARKET, or mode=ALL and delta pricing is not available
deltaAddress
string
Address of the Delta smart contract used to execute the transaction.
srcToken
string
ERC20 token address being sent (source token).
destToken
string
Token address being received . For cross-chain orders, this would be the token received on the source chain and sent to bridge
srcAmount
string
Amount of srcToken to be sent
destAmount
string
Final amount received after all fees. For cross-chain orders, this would be the amount received on the source chain and sent to bridge
protocolName
string
Name of the bridge protocol (e.g., Across, CCTPStandard, StargateTaxi).
destAmountAfterBridge
string
Amount expected after bridging, in destination token units, on the destination chain
destUSDAfterBridge
string
USD value of destAmountAfterBridge.
estimatedTimeMs
number
Estimated transfer time in milliseconds.
feeToken
string
Token address in which the fee is charged (0xeeee... = native token).
amount
string
Fee amount in token’s smallest unit.
amountInUSD
string
Fee value in USD.
destToken
string
Destination token received on the source chain
destAmount
string
Destination amount received on the source chain
destAmountBeforeFee
string
Destination amount received on the source chain before applying fees
destUSD
string
USD equivalent of destAmount.
bridgeInfo
BridgeInfo
Bridge metadata (same structure as above)
bridge
Bridge
Protocol configuration for that bridge (same structure as above)
{
"delta": {
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"srcAmount": "100000000",
"destAmount": "41290907243749599",
"destAmountBeforeFee": "42763539574055205",
"gasCostUSD": "3.436417",
"gasCost": "318930",
"srcUSD": "99.99940000000001",
"destUSD": "96.3531578668",
"destUSDBeforeFee": "99.7895748668493",
"gasCostBeforeFee": "98300",
"gasCostUSDBeforeFee": "1.0591657900269833",
"partner": "paraswap.io-staging",
"partnerFee": 0,
"hmac": "7c6b4b9d3a7bfed5c29c924f84abe4bce4add7e9"
},
"deltaAddress": "0x0000000000bbf5c5fd284e657f01bd000933c96d"
}{
"delta": {
"srcToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"srcAmount": "10000000",
"destAmount": "9479298",
"destAmountBeforeFee": "10000000",
"gasCostUSD": "0.5206030000",
"gasCost": "338300",
"srcUSD": "9.9980900000",
"destUSD": "9.4774870000",
"destUSDBeforeFee": "9.9980900000",
"gasCostBeforeFee": "25000",
"gasCostUSDBeforeFee": "0.0384722157",
"partner": "anon",
"partnerFee": 0,
"bridge": {
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002258",
"scalingFactor": 0,
"destinationChainId": 8453,
"protocolSelector": "0x21eaa4cd"
},
"bridgeInfo": {
"protocolName": "Across",
"destAmountAfterBridge": "9474900",
"destUSDAfterBridge": "9.473090294099999",
"estimatedTimeMs": 20000,
"fees": [
{
"amount": "4396",
"feeToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"amountInSrcToken": "4396",
"amountInUSD": "0.004395160364"
}
]
},
"availableBridges": [
{
"destToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destAmount": "9479298",
"destAmountBeforeFee": "10000000",
"destUSD": "9.4774870000",
"destUSDBeforeFee": "9.9980900000",
"gasCostUSD": "0.5206030000",
"gasCost": "338300",
"gasCostUSDBeforeFee": "0.0384722157",
"gasCostBeforeFee": "25000",
"bridgeParams": [
{
"bridgeInfo": {
"protocolName": "StargateTaxi",
"destAmountAfterBridge": "9405953",
"destUSDAfterBridge": "9.404156462977",
"estimatedTimeMs": 180828,
"fees": [
{
"feeToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"amount": "14777250162456",
"amountInSrcToken": "59126",
"amountInUSD": "0.0591156504123971"
}
]
},
"bridge": {
"protocolSelector": "0x7ae1d4cb",
"destinationChainId": 8453,
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"scalingFactor": 0,
"protocolData": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000075e8000000000000000000000000c026395860db2d07ee33e05fe50ed7bd583189c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d644d0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000d7098bf27180000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000001cdec000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}
}
]
},
{
"destToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destAmount": "9479298",
"destAmountBeforeFee": "10000000",
"destUSD": "9.4774870000",
"destUSDBeforeFee": "9.9980900000",
"gasCostUSD": "0.5206030000",
"gasCost": "338300",
"gasCostUSDBeforeFee": "0.0384722157",
"gasCostBeforeFee": "25000",
"bridgeParams": [
{
"bridgeInfo": {
"protocolName": "CCTPStandard",
"destAmountAfterBridge": "9476819",
"destUSDAfterBridge": "9.475008927571",
"estimatedTimeMs": 900000,
"fees": [
{
"feeToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"amount": "619803340000",
"amountInUSD": "0.0025",
"amountInSrcToken": "2479"
}
]
},
"bridge": {
"protocolSelector": "0x786b64df",
"destinationChainId": 8453,
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"scalingFactor": 0,
"protocolData": "0x0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d0"
}
},
{
"bridgeInfo": {
"protocolName": "CCTPFast",
"destAmountAfterBridge": "9475819",
"destUSDAfterBridge": "9.474009118570999",
"estimatedTimeMs": 20000,
"fees": [
{
"feeToken": "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"amount": "619803340000",
"amountInUSD": "0.0025",
"amountInSrcToken": "2479"
},
{
"feeToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"amount": "1000",
"amountInSrcToken": "1000",
"amountInUSD": "0.000999809"
}
]
},
"bridge": {
"protocolSelector": "0x786b64df",
"destinationChainId": 8453,
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"scalingFactor": 0,
"protocolData": "0x000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e8"
}
}
]
},
{
"destToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"destAmount": "9479298",
"destAmountBeforeFee": "10000000",
"destUSD": "9.4774870000",
"destUSDBeforeFee": "9.9980900000",
"gasCostUSD": "0.5206030000",
"gasCost": "338300",
"gasCostUSDBeforeFee": "0.0384722157",
"gasCostBeforeFee": "25000",
"bridgeParams": [
{
"bridgeInfo": {
"protocolName": "Across",
"destAmountAfterBridge": "9474900",
"destUSDAfterBridge": "9.473090294099999",
"estimatedTimeMs": 20000,
"fees": [
{
"amount": "4396",
"feeToken": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"amountInSrcToken": "4396",
"amountInUSD": "0.004395160364"
}
]
},
"bridge": {
"outputToken": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
"protocolData": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002258",
"scalingFactor": 0,
"destinationChainId": 8453,
"protocolSelector": "0x21eaa4cd"
}
}
]
}
],
"hmac": "9079eea5889a708d7addff1658084bd508fe3798"
},
"deltaAddress": "0x76e0ebb8d4c6dccb3fdedab7a3e1c87036719a42"
}{
"fallbackReason": {
"errorType": "UnsupportedToken",
"details": "Token 0xa4bc2b90743294e5e6fd3321a9a131947f7785db is not supported"
},
"market": {
"blockNumber": 21222968,
"network": 1,
"srcToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"srcDecimals": 18,
"srcAmount": "1000000000000000000",
"destToken": "0xa4bc2b90743294e5e6fd3321a9a131947f7785db",
"destDecimals": 9,
"destAmount": "1106884085431",
"bestRoute": [
{
"percent": 100,
"swaps": [
{
"srcToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"srcDecimals": 18,
"destToken": "0xa4bc2b90743294e5e6fd3321a9a131947f7785db",
"destDecimals": 9,
"swapExchanges": [
{
"exchange": "UniswapV2",
"srcAmount": "1000000000000000000",
"destAmount": "1106884085431",
"percent": 100,
"poolAddresses": [
"0x98555273b697fA2b4CF3e009403B5ae31Fd2C7A1"
],
"data": {
"router": "0xF9234CB08edb93c0d4a4d4c70cC3FfD070e78e07",
"path": [
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xa4bc2b90743294e5e6fd3321a9a131947f7785db"
],
"factory": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
"initCode": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f",
"feeFactor": 10000,
"pools": [
{
"address": "0x98555273b697fA2b4CF3e009403B5ae31Fd2C7A1",
"fee": 30,
"direction": false
}
],
"gasUSD": "5.896714"
}
}
]
}
]
}
],
"gasCostUSD": "9.771593",
"gasCost": "132570",
"side": "SELL",
"version": "6.2",
"contractAddress": "0x6a000f20005980200259b80c5102003040001068",
"tokenTransferProxy": "0x6a000f20005980200259b80c5102003040001068",
"contractMethod": "swapExactAmountInOnUniswapV2",
"partnerFee": 0,
"srcUSD": "3102.2276074900",
"destUSD": "3121.4131209154",
"partner": "paraswap.io",
"maxImpactReached": false,
"hmac": "b9c7c2ed6a47c98af2a835184a64db4a50fc2b61"
}
}{
"market": {
"blockNumber": 21222968,
"network": 1,
"srcToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"srcDecimals": 18,
"srcAmount": "1000000000000000000",
"destToken": "0xa4bc2b90743294e5e6fd3321a9a131947f7785db",
"destDecimals": 9,
"destAmount": "1106884085431",
"bestRoute": [
{
"percent": 100,
"swaps": [
{
"srcToken": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"srcDecimals": 18,
"destToken": "0xa4bc2b90743294e5e6fd3321a9a131947f7785db",
"destDecimals": 9,
"swapExchanges": [
{
"exchange": "UniswapV2",
"srcAmount": "1000000000000000000",
"destAmount": "1106884085431",
"percent": 100,
"poolAddresses": [
"0x98555273b697fA2b4CF3e009403B5ae31Fd2C7A1"
],
"data": {
"router": "0xF9234CB08edb93c0d4a4d4c70cC3FfD070e78e07",
"path": [
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"0xa4bc2b90743294e5e6fd3321a9a131947f7785db"
],
"factory": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
"initCode": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f",
"feeFactor": 10000,
"pools": [
{
"address": "0x98555273b697fA2b4CF3e009403B5ae31Fd2C7A1",
"fee": 30,
"direction": false
}
],
"gasUSD": "5.896714"
}
}
]
}
]
}
],
"gasCostUSD": "9.771593",
"gasCost": "132570",
"side": "SELL",
"version": "6.2",
"contractAddress": "0x6a000f20005980200259b80c5102003040001068",
"tokenTransferProxy": "0x6a000f20005980200259b80c5102003040001068",
"contractMethod": "swapExactAmountInOnUniswapV2",
"partnerFee": 0,
"srcUSD": "3102.2276074900",
"destUSD": "3121.4131209154",
"partner": "paraswap.io",
"maxImpactReached": false,
"hmac": "b9c7c2ed6a47c98af2a835184a64db4a50fc2b61"
}
}{
"errorType": "UnsupportedToken",
"details": "Token 0xa4bc2b90743294e5e6fd3321a9a131947f7785db is not supported"
}