Exclusive Resolver API Terms

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 the makerAsset that the user is selling.
  • minTakerAmount: the minimum amount of the takerAsset that 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
      • 10000000100%

Example

Request:

Text
1
POST /quote

Body:

JSON
1
2
3
4
5
6
7
8
9
10
11
{
  "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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "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 your initialRateBump accordingly to reflect this advantage.
  • gasPriceEstimate: this estimate provides an expected gas price for executing the transaction, helping to determine the most optimal bid pricing strategy.

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.

  1. Import the necessary modules from the 1inch Fusion SDK:
TypeScript
1
2
3
import { Extension, FusionOrder, now } from "@1inch/fusion-sdk";

import { Address } from "@1inch/fusion-sdk";
  1. Create an object containing the details of the Fusion order:
TypeScript
1
const orderData = { ... }
  1. Provide the encoded order extension data
TypeScript
1
const ext = "0x..."; // Example encoded order extension
  1. Decode and process the Fusion order
TypeScript
1
const fusionOrder = FusionOrder.fromDataAndExtension(orderData, Extension.decode(ext));
  1. 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
1
2
3
4
5
const resolverPromoteeAddress = Address.ZERO_ADDRESS;

const isExclusive = fusionOrder.isExclusiveResolver(resolverPromoteeAddress);

const isExclusivePeriod = fusionOrder.isExclusivityPeriod(now());
  1. Interpret the results
  • isExclusive → Returns true if the resolver is selected for exclusive execution.
  • isExclusivePeriod → Returns true if the exclusivity period is still active.

For further details, refer to the relevant Fusion SDK implementation:

Did you find what you need?