from compass_api_sdk import CompassAPI, models
with CompassAPI(
api_key_auth="<YOUR_API_KEY_HERE>",
) as compass_api:
res = compass_api.credit.credit_loop(owner="0x5e5b00ed886A6879C2B934612D2312975427fcAf", chain=models.CreditLoopRequestChain.ETHEREUM, collateral_token="WETH", borrow_token="USDC", initial_collateral_amount=1.0, multiplier=2.0, loan_to_value=70.0, protocol=models.CreditProtocol.AAVE, sub_account_id=0, max_slippage_percent=0.5, gas_sponsorship=False, preview=False, pricing=models.CreditLoopRequestPricing.AUTO)
# Handle response
print(res)import { CompassApiSDK } from "@compass-labs/api-sdk";
const compassApiSDK = new CompassApiSDK({
apiKeyAuth: "<YOUR_API_KEY_HERE>",
});
async function run() {
const result = await compassApiSDK.credit.creditLoop({
owner: "0x5e5b00ed886A6879C2B934612D2312975427fcAf",
chain: "ethereum",
protocol: "AAVE",
collateralToken: "WETH",
borrowToken: "USDC",
initialCollateralAmount: 1,
multiplier: 2,
loanToValue: 70,
maxSlippagePercent: 0.5,
gasSponsorship: false,
});
console.log(result);
}
run();curl --request POST \
--url https://api.compasslabs.ai/v2/credit/loop \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"owner": "0x5e5b00ed886A6879C2B934612D2312975427fcAf",
"chain": "ethereum",
"protocol": "AAVE",
"collateral_token": "WETH",
"borrow_token": "USDC",
"initial_collateral_amount": 1,
"multiplier": 2,
"loan_to_value": 70,
"max_slippage_percent": 0.5,
"gas_sponsorship": false
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
owner: '0x5e5b00ed886A6879C2B934612D2312975427fcAf',
chain: 'ethereum',
protocol: 'AAVE',
collateral_token: 'WETH',
borrow_token: 'USDC',
initial_collateral_amount: 1,
multiplier: 2,
loan_to_value: 70,
max_slippage_percent: 0.5,
gas_sponsorship: false
})
};
fetch('https://api.compasslabs.ai/v2/credit/loop', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compasslabs.ai/v2/credit/loop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'owner' => '0x5e5b00ed886A6879C2B934612D2312975427fcAf',
'chain' => 'ethereum',
'protocol' => 'AAVE',
'collateral_token' => 'WETH',
'borrow_token' => 'USDC',
'initial_collateral_amount' => 1,
'multiplier' => 2,
'loan_to_value' => 70,
'max_slippage_percent' => 0.5,
'gas_sponsorship' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.compasslabs.ai/v2/credit/loop"
payload := strings.NewReader("{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.compasslabs.ai/v2/credit/loop")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compasslabs.ai/v2/credit/loop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}"
response = http.request(request)
puts response.read_body{
"preview": {
"iterations": 123,
"total_collateral_supplied": "<string>",
"total_borrowed": "<string>",
"achieved_multiplier": "<string>",
"projected_ltv": "<string>",
"projected_health_factor": "<string>",
"estimated_max_dust": "<string>",
"estimated_swap_cost": "<string>",
"legs": []
},
"transaction": {
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
},
"eip_712": {
"domain": {
"chainId": 8453,
"verifyingContract": "0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1"
},
"message": {
"baseGas": "0",
"data": "0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020",
"gasPrice": "0",
"gasToken": "0x0000000000000000000000000000000000000000",
"nonce": "7",
"operation": 1,
"refundReceiver": "0x0000000000000000000000000000000000000000",
"safeTxGas": "0",
"to": "0x93C23AAE4793C14D6DF35D2A2A2234204e1559dA",
"value": "0"
},
"primaryType": "SafeTx",
"types": {
"EIP712Domain": [
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"SafeTx": [
{
"name": "to",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "data",
"type": "bytes"
},
{
"name": "operation",
"type": "uint8"
},
{
"name": "safeTxGas",
"type": "uint256"
},
{
"name": "baseGas",
"type": "uint256"
},
{
"name": "gasPrice",
"type": "uint256"
},
{
"name": "gasToken",
"type": "address"
},
{
"name": "refundReceiver",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
}
]
}
},
"pt_maturity": "<string>",
"swap_provider": "market",
"quote_expires_at": "2023-11-07T05:31:56Z",
"max_firm_multiplier": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Open a leveraged loop
Open a leveraged position in ONE atomic transaction.
Supply collateral, borrow against it, swap the borrowed token back to collateral, repeat — until total collateral reaches multiplier x initial_collateral_amount. If any step fails the whole transaction reverts, so a position is never left half-built.
See the Leveraged Looping guide for chain coverage, market discovery, vault-share collateral, HyperEVM specifics and the full error list.
from compass_api_sdk import CompassAPI, models
with CompassAPI(
api_key_auth="<YOUR_API_KEY_HERE>",
) as compass_api:
res = compass_api.credit.credit_loop(owner="0x5e5b00ed886A6879C2B934612D2312975427fcAf", chain=models.CreditLoopRequestChain.ETHEREUM, collateral_token="WETH", borrow_token="USDC", initial_collateral_amount=1.0, multiplier=2.0, loan_to_value=70.0, protocol=models.CreditProtocol.AAVE, sub_account_id=0, max_slippage_percent=0.5, gas_sponsorship=False, preview=False, pricing=models.CreditLoopRequestPricing.AUTO)
# Handle response
print(res)import { CompassApiSDK } from "@compass-labs/api-sdk";
const compassApiSDK = new CompassApiSDK({
apiKeyAuth: "<YOUR_API_KEY_HERE>",
});
async function run() {
const result = await compassApiSDK.credit.creditLoop({
owner: "0x5e5b00ed886A6879C2B934612D2312975427fcAf",
chain: "ethereum",
protocol: "AAVE",
collateralToken: "WETH",
borrowToken: "USDC",
initialCollateralAmount: 1,
multiplier: 2,
loanToValue: 70,
maxSlippagePercent: 0.5,
gasSponsorship: false,
});
console.log(result);
}
run();curl --request POST \
--url https://api.compasslabs.ai/v2/credit/loop \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"owner": "0x5e5b00ed886A6879C2B934612D2312975427fcAf",
"chain": "ethereum",
"protocol": "AAVE",
"collateral_token": "WETH",
"borrow_token": "USDC",
"initial_collateral_amount": 1,
"multiplier": 2,
"loan_to_value": 70,
"max_slippage_percent": 0.5,
"gas_sponsorship": false
}
'const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
owner: '0x5e5b00ed886A6879C2B934612D2312975427fcAf',
chain: 'ethereum',
protocol: 'AAVE',
collateral_token: 'WETH',
borrow_token: 'USDC',
initial_collateral_amount: 1,
multiplier: 2,
loan_to_value: 70,
max_slippage_percent: 0.5,
gas_sponsorship: false
})
};
fetch('https://api.compasslabs.ai/v2/credit/loop', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compasslabs.ai/v2/credit/loop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'owner' => '0x5e5b00ed886A6879C2B934612D2312975427fcAf',
'chain' => 'ethereum',
'protocol' => 'AAVE',
'collateral_token' => 'WETH',
'borrow_token' => 'USDC',
'initial_collateral_amount' => 1,
'multiplier' => 2,
'loan_to_value' => 70,
'max_slippage_percent' => 0.5,
'gas_sponsorship' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.compasslabs.ai/v2/credit/loop"
payload := strings.NewReader("{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.compasslabs.ai/v2/credit/loop")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compasslabs.ai/v2/credit/loop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"owner\": \"0x5e5b00ed886A6879C2B934612D2312975427fcAf\",\n \"chain\": \"ethereum\",\n \"protocol\": \"AAVE\",\n \"collateral_token\": \"WETH\",\n \"borrow_token\": \"USDC\",\n \"initial_collateral_amount\": 1,\n \"multiplier\": 2,\n \"loan_to_value\": 70,\n \"max_slippage_percent\": 0.5,\n \"gas_sponsorship\": false\n}"
response = http.request(request)
puts response.read_body{
"preview": {
"iterations": 123,
"total_collateral_supplied": "<string>",
"total_borrowed": "<string>",
"achieved_multiplier": "<string>",
"projected_ltv": "<string>",
"projected_health_factor": "<string>",
"estimated_max_dust": "<string>",
"estimated_swap_cost": "<string>",
"legs": []
},
"transaction": {
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
},
"eip_712": {
"domain": {
"chainId": 8453,
"verifyingContract": "0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1"
},
"message": {
"baseGas": "0",
"data": "0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020",
"gasPrice": "0",
"gasToken": "0x0000000000000000000000000000000000000000",
"nonce": "7",
"operation": 1,
"refundReceiver": "0x0000000000000000000000000000000000000000",
"safeTxGas": "0",
"to": "0x93C23AAE4793C14D6DF35D2A2A2234204e1559dA",
"value": "0"
},
"primaryType": "SafeTx",
"types": {
"EIP712Domain": [
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"SafeTx": [
{
"name": "to",
"type": "address"
},
{
"name": "value",
"type": "uint256"
},
{
"name": "data",
"type": "bytes"
},
{
"name": "operation",
"type": "uint8"
},
{
"name": "safeTxGas",
"type": "uint256"
},
{
"name": "baseGas",
"type": "uint256"
},
{
"name": "gasPrice",
"type": "uint256"
},
{
"name": "gasToken",
"type": "address"
},
{
"name": "refundReceiver",
"type": "address"
},
{
"name": "nonce",
"type": "uint256"
}
]
}
},
"pt_maturity": "<string>",
"swap_provider": "market",
"quote_expires_at": "2023-11-07T05:31:56Z",
"max_firm_multiplier": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Body
Open a leveraged loop: repeatedly supply collateral, borrow, and swap the borrow back to collateral — all in ONE atomic transaction from the Credit Account.
The address that owns the Credit Account.
"0x5e5b00ed886A6879C2B934612D2312975427fcAf"
Blockchain network. Not every protocol is deployed on every chain — see the protocol field — and a chain with no credit venue at all returns a 422 naming the chains that do.
arbitrum, base, bsc, ethereum, hyperevm, tempo "ethereum"
Token supplied as collateral each iteration. Must already be in the Credit Account for the initial amount. For MORPHO it must be the market's collateral token.
"wstETH"
"WETH"
Token borrowed each iteration and swapped back to the collateral token. For MORPHO it must be the market's loan token.
"WETH"
"USDC"
Collateral (in token units) that the Credit Account must ALREADY hold when this is called — the loop never pulls from the owner's wallet mid-transaction. Fund the account first via /v2/credit/transfer (action=DEPOSIT).
x > 01.5
Target leverage: total collateral exposure = multiplier × initial_collateral_amount. Must be achievable at the requested loan_to_value (max ≈ 0.9 / (1 − LTV)).
x > 12
Per-iteration borrow LTV in percent. Must not exceed the protocol's maximum for the market (Aave reserve/e-mode LTV; Morpho LLTV with a safety margin; Euler's borrow LTV for the collateral vault); borrows are sized slightly inside the requested value so no leg sits on the protocol's revert boundary.
0 < x <= 10070
Lending protocol to loop into: AAVE, MORPHO, or EULER. On chain=hyperevm, AAVE is Hyperlend and MORPHO is Felix; EULER is not deployed there.
AAVE, EULER, MORPHO "AAVE"
Morpho only: the bytes32 market id (from /v2/credit/morpho_markets). Required when protocol=MORPHO.
Euler only: the EVK vault address collateral is supplied to (from /v2/credit/euler_markets). Required when protocol=EULER.
Euler only: the EVK vault address borrowed from (the sub-account's controller). Required when protocol=EULER.
Euler only: the EVC sub-account (0-255) holding this isolated looped position. 0 is the Credit Account itself.
0 <= x <= 255Per-swap slippage tolerance in percent. Loop dust is bounded by this per iteration, so tighter slippage means less dust.
0 < x <= 100.3
Aave only: e-mode category to enable before looping (higher LTV for correlated pairs, e.g. ETH-correlated). Both tokens must belong to the category or the build returns a 422. On Hyperlend (chain=hyperevm) category 1 is the HYPE-correlated set covering wstHYPE and WHYPE.
x >= 0If true, returns EIP-712 typed data for gas-sponsored execution instead of an unsigned transaction.
false
If true, build a display ESTIMATE: no firm RFQ quote is ever requested (quote_expires_at stays null). NOTE that this guarantees only that no firm quote was spent — it does not guarantee an absent transaction: on a pair no firm provider covers, and under pricing=market, the call still falls through to the aggregator and returns a signable transaction. How the estimate is priced follows pricing: on a firm-covered pair under 'auto' or 'firm' it is computed from the firm provider's live price levels (indicative); otherwise swap legs are priced by the default aggregator. Set it on every call made while a user is exploring parameters, and leave it false only for the build they actually intend to sign — firm quotes are single-use maker commitments, and requesting them for displays that are never executed degrades the pricing this API is offered.
Swap-leg routing policy. 'auto': firm quotes where a firm venue covers the pair, transparent fallback to the market aggregator otherwise. 'firm': never price on the market route — previews whose target the firm venue cannot serve return the coverage advisory alone (preview=null, zero aggregator calls), and executions fail with a typed error instead of silently substituting market pricing. 'market': never route through the firm venue; every leg is priced by the aggregator and bounded by max_slippage_percent (which firm legs ignore). 'firm' is incompatible with gas_sponsorship (sponsored loops force market routing).
auto, firm, market Response
Successful Response
The atomic loop transaction plus its guaranteed-floor preview.
Projected end state, computed on guaranteed swap floors. Null only on pricing='firm' preview responses whose target the firm venue cannot serve: no leg was priced on any venue, and the response carries the coverage advisory (max_firm_multiplier) alone.
Show child attributes
Show child attributes
Unsigned transaction for direct execution by the owner. Present when gas_sponsorship=false — except firm-priced previews (preview=true on a firm-priced build), which carry numbers only: the firm quotes are fetched at execution time, so there is no payload to sign yet.
Show child attributes
Show child attributes
{
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
}
EIP-712 typed data for gas-sponsored execution. Present when gas_sponsorship=true.
Show child attributes
Show child attributes
{
"domain": {
"chainId": 8453,
"verifyingContract": "0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1"
},
"message": {
"baseGas": "0",
"data": "0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020",
"gasPrice": "0",
"gasToken": "0x0000000000000000000000000000000000000000",
"nonce": "7",
"operation": 1,
"refundReceiver": "0x0000000000000000000000000000000000000000",
"safeTxGas": "0",
"to": "0x93C23AAE4793C14D6DF35D2A2A2234204e1559dA",
"value": "0"
},
"primaryType": "SafeTx",
"types": {
"EIP712Domain": [
{ "name": "chainId", "type": "uint256" },
{
"name": "verifyingContract",
"type": "address"
}
],
"SafeTx": [
{ "name": "to", "type": "address" },
{ "name": "value", "type": "uint256" },
{ "name": "data", "type": "bytes" },
{ "name": "operation", "type": "uint8" },
{ "name": "safeTxGas", "type": "uint256" },
{ "name": "baseGas", "type": "uint256" },
{ "name": "gasPrice", "type": "uint256" },
{ "name": "gasToken", "type": "address" },
{
"name": "refundReceiver",
"type": "address"
},
{ "name": "nonce", "type": "uint256" }
]
}
}
Maturity of the Pendle principal token supplied as collateral, ISO-8601 UTC. Present only for principal-token collateral, whose yield is fixed until this date; after it the position can be unwound (by redemption at par) but not increased.
Identifies which route priced the swap leg(s): 'market' — a DEX aggregator (iterative loop across pool liquidity, slippage-bounded floors) — or 'firm' — zero-slippage quotes, one per swap leg, each partially filled at the leg's size (exact fills, zero dust). On preview=true responses 'firm' means the numbers are INDICATIVE, computed from live maker price levels without spending any quote; execution fetches the firm quotes at signing time. Always present, including on fallbacks. This is the authoritative firm-vs-market signal and clients do need to read it: pricing is only what was REQUESTED (under 'auto' a firm build can fall back to market transparently), and quote_expires_at is absent on every preview — so neither substitutes for this field.
market, firm Deadline of the firm swap quotes (the earliest across the loop's swap legs) — sign and broadcast before it or the transaction reverts on-chain; refresh by re-calling this endpoint (discard the previous payload). Present only on executable firm-priced builds; null on previews (no quote is spent for a preview).
Multiplier bound firm zero-slippage quotes can fill for the requested position size, LTV and target (estimated without spending any quote). The requested multiplier is firm-servable iff it is <= this value; above it the loop executes at market rate with slippage-bounded floors instead. Present only on preview=true responses when a firm-quote venue covers the pair; null otherwise. Recompute per parameter change - minimum-size floors make reachability target-dependent.
Was this page helpful?