The Exclusive Resolver API is a new feature available for resolvers within the 1inch Fusion mode. This API allows a 1inch Fusion resolver to be chosen as an exclusive filler at the beginning of the auction.
By providing a quote, a resolver commits to executing the order as soon as the user submits it to the 1inch Relayer API. The order must be executed before the end of the exclusivity period.
The executed order’s maker amount must match the amount provided by the resolver’s API for a specific initialRateBump
Performance metrics:
- Maximum response time (including network): 500ms
- SLA: 90%. Calculated from: Number of executed exclusive orders ÷ Total resolver’s exclusive orders × 100%. Only orders submitted by the user before the exclusivity period ends are counted.
API Endpoint: POST /quote
Returns a list of resolver’s quotes, sorted by the maker’s amount (descending), along with the corresponding taker amount rate bump from the minimal return amount.
Body
makerAsset: the address of the token that the user is selling.takerAsset: the address of the token that the user is buying.makerAmount: the amount of themakerAssetthat the user is selling.minTakerAmount: the minimum amount of thetakerAssetthat the user expects to receive.makerAddress: the wallet address of the user requesting a quote.quoteId: a unique ID of the quote.gasBumpEstimate(New!): estimated gas cost adjustment based on order fill through the 1inch router.gasPriceEstimate(New!): estimated gas price for executing the order.
These new fields allow resolvers to fine-tune their quotes more precisely based on gas costs.
Response
grid: an array containing details of proposed price improvements (max items: 50):makerAmount: partial or full fill amount.initialRateBump: rate bump at the beginning of the Dutch auction.- Min: 0
- Max: 16777215
- 10000000 → 100%
Example
Request:
Text
1
POST /quote
Body:
JSON
1234567891011
{
"chainId": 1,
"makerAsset": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"takerAsset": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"makerAmount": "1000000000000000000",
"minTakerAmount": "2400000000",
"makerAddress": "0xbe0eb53f46cd790cd13851d5eff43d12404d33e8",
"quoteId": "cf872857-c456-4f4f-aff0-84f7bebb7df2",
"gasBumpEstimate": "50000",
"gasPriceEstimate": "30000000000"
}
Response (HTTP code: 200):
JSON
12345678910111213141516
{
"grid": [
{
"makerAmount": "1000000000000000000", // 1 ETH (100%)
"initialRateBump": 10000 // improve minTakerAmount by 0.1%
},
{
"makerAmount": "500000000000000000", // 0.5 ETH (50%)
"initialRateBump": 100000 // improve minTakerAmount by 1%
},
{
"makerAmount": "100000000000000000", // 0.1 ETH (10%)
"initialRateBump": 1000000 // improve minTakerAmount by 10%
}
]
}
Errors
Use these error codes in API response in case:
- 400 Bad Request:
- Token pair is not supported.
- Cannot provide a quote for specified
makerAmount/minTakerAmount/makerAddress.
- 500 Internal Server Error:
- Unexpected error on the server.
Useful tips and formulas
Calculate: “How much does the user receive at the start of the auction?”
Text
1
takerAmount = minTakerAmount * (initialRateBump + 10000000) / 10000000
Calculate: “What initial rate bump is needed for a specific takerAmount?”
Text
1
initialRateBump = (takerAmount * 10000000 / minTakerAmount) - 10000000
Understanding gasBumpEstimate and gasPriceEstimate
gasBumpEstimate: this value is calculated based on the estimated gas cost required to fill an order via the 1inch router. If you anticipate that your execution will be more gas-efficient, you can adjust yourinitialRateBumpaccordingly to reflect this advantage.- Detailed calculation: Fusion SDK Gas Bump Calculation
gasPriceEstimate: this estimate provides an expected gas price for executing the transaction, helping to determine the most optimal bid pricing strategy.- Detailed calculation: Fusion SDK Gas Estimate Calculation
Additionally, for reference, you can check the related contract logic used in gas calculations:
Limit Order Settlement Contract Code
How to determine if my resolver is selected for exclusive execution?
To check whether your resolver is selected for exclusive execution, follow steps below.
- Import the necessary modules from the 1inch Fusion SDK:
TypeScript
123
import { Extension, FusionOrder, now } from "@1inch/fusion-sdk";
import { Address } from "@1inch/fusion-sdk";
- Create an object containing the details of the Fusion order:
TypeScript
1
const orderData = { ... }
- Provide the encoded order extension data
TypeScript
1
const ext = "0x..."; // Example encoded order extension
- Decode and process the Fusion order
TypeScript
1
const fusionOrder = FusionOrder.fromDataAndExtension(orderData, Extension.decode(ext));
- Check if the resolver is exclusive. Define the resolver’s promotee address and check whether it has exclusive execution rights using the updated Fusion SDK logic:
TypeScript
12345
const resolverPromoteeAddress = Address.ZERO_ADDRESS;
const isExclusive = fusionOrder.isExclusiveResolver(resolverPromoteeAddress);
const isExclusivePeriod = fusionOrder.isExclusivityPeriod(now());
- Interpret the results
isExclusive→ Returnstrueif the resolver is selected for exclusive execution.isExclusivePeriod→ Returnstrueif the exclusivity period is still active.
For further details, refer to the relevant Fusion SDK implementation: