Skip to main content
POST
/
v1
/
transaction_bundler
/
aave
/
loop
Python (SDK)
from compass_api_sdk import CompassAPI, models


with CompassAPI(
    api_key_auth="<YOUR_API_KEY_HERE>",
) as compass_api:

    res = compass_api.transaction_bundler.transaction_bundler_aave_loop(chain=models.AaveLoopRequestChain.ARBITRUM, sender="0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B", collateral_token="USDC", borrow_token="WETH", initial_collateral_amount="1000", multiplier="2.5", max_slippage_percent="0.5", loan_to_value="60", estimate_gas=True, signed_authorization={
        "nonce": 1000,
        "address": "0xcA11bde05977b3631167028862bE2a173976CA11",
        "chain_id": 42161,
        "r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
        "s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
        "y_parity": 0,
    }, is_account_abstraction=False)

    # 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.transactionBundler.transactionBundlerAaveLoop({
chain: "arbitrum",
sender: "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
estimateGas: true,
signedAuthorization: {
nonce: 1000,
address: "0xcA11bde05977b3631167028862bE2a173976CA11",
chainId: 42161,
r: "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
s: "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
yParity: 0,
},
collateralToken: "USDC",
borrowToken: "WETH",
initialCollateralAmount: "1000",
multiplier: "2.5",
maxSlippagePercent: "0.5",
loanToValue: "60",
isAccountAbstraction: false,
});

console.log(result);
}

run();
curl --request POST \
--url https://api.compasslabs.ai/v1/transaction_bundler/aave/loop \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"chain": "arbitrum",
"sender": "0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B",
"estimate_gas": true,
"signed_authorization": {
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chainId": 42161,
"nonce": 1000,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"yParity": 0
},
"collateral_token": "USDC",
"borrow_token": "WETH",
"initial_collateral_amount": "1000",
"multiplier": "2.5",
"max_slippage_percent": "0.5",
"loan_to_value": "60",
"is_account_abstraction": false
}
'
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
chain: 'arbitrum',
sender: '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
estimate_gas: true,
signed_authorization: {
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
chainId: 42161,
nonce: 1000,
r: '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
s: '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
yParity: 0
},
collateral_token: 'USDC',
borrow_token: 'WETH',
initial_collateral_amount: '1000',
multiplier: '2.5',
max_slippage_percent: '0.5',
loan_to_value: '60',
is_account_abstraction: false
})
};

fetch('https://api.compasslabs.ai/v1/transaction_bundler/aave/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/v1/transaction_bundler/aave/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([
'chain' => 'arbitrum',
'sender' => '0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B',
'estimate_gas' => true,
'signed_authorization' => [
'address' => '0xcA11bde05977b3631167028862bE2a173976CA11',
'chainId' => 42161,
'nonce' => 1000,
'r' => '0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615',
's' => '0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c',
'yParity' => 0
],
'collateral_token' => 'USDC',
'borrow_token' => 'WETH',
'initial_collateral_amount' => '1000',
'multiplier' => '2.5',
'max_slippage_percent' => '0.5',
'loan_to_value' => '60',
'is_account_abstraction' => 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/v1/transaction_bundler/aave/loop"

payload := strings.NewReader("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": 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/v1/transaction_bundler/aave/loop")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.compasslabs.ai/v1/transaction_bundler/aave/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 \"chain\": \"arbitrum\",\n \"sender\": \"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B\",\n \"estimate_gas\": true,\n \"signed_authorization\": {\n \"address\": \"0xcA11bde05977b3631167028862bE2a173976CA11\",\n \"chainId\": 42161,\n \"nonce\": 1000,\n \"r\": \"0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615\",\n \"s\": \"0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c\",\n \"yParity\": 0\n },\n \"collateral_token\": \"USDC\",\n \"borrow_token\": \"WETH\",\n \"initial_collateral_amount\": \"1000\",\n \"multiplier\": \"2.5\",\n \"max_slippage_percent\": \"0.5\",\n \"loan_to_value\": \"60\",\n \"is_account_abstraction\": false\n}"

response = http.request(request)
puts response.read_body
{
  "transaction": {
    "chainId": "0x2105",
    "data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
    "from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
    "gas": "0x7a120",
    "maxFeePerGas": "0x59682f00",
    "maxPriorityFeePerGas": "0x3b9aca00",
    "nonce": "0x5",
    "to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
    "value": "0x0"
  }
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}

Authorizations

x-api-key
string
header
required

Your Compass API Key. Get your key here.

Body

application/json

Request model for executing an Aave loop strategy.

chain
enum<string>
default:arbitrum
required
Available options:
arbitrum,
base,
ethereum
Example:

"arbitrum"

sender
string
default:0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B
required

The address of the transaction sender.

Example:

"0x29F20a192328eF1aD35e1564aBFf4Be9C5ce5f7B"

collateral_token
string
default:USDC
required

Symbol or address of token to supply to Aave..

Examples:

"USDC"

"WETH"

borrow_token
string
default:WETH
required

Symbol or address of token to borrow from Aave..

Examples:

"WETH"

"USDC"

initial_collateral_amount
default:1000
required

Amount of collateral token to supply to Aave

Required range: x > 0
Example:

"1000"

multiplier
default:2.5
required

Leverage multiplier. Total loop collateral will be calculated as multiplier x initial_collateral_amount

Required range: x > 1
Example:

"2.5"

max_slippage_percent
default:0.5
required

Maximum allowed slippage for token swaps in percentage

Required range: 0 < x <= 100
Example:

2.5

loan_to_value
default:60
required

Loan To Value percentage of the loop

Required range: 0 < x <= 100
Example:

20.5

estimate_gas
boolean
default:true

Determines whether to estimate gas costs for transactions, also verifying that the transaction can be successfully executed.

Example:

true

signed_authorization
SignedAuthorization · object | null

EIP-7702 authorization. Required when is_account_abstraction is False.

Example:
{
"address": "0xcA11bde05977b3631167028862bE2a173976CA11",
"chainId": 42161,
"nonce": 1000,
"r": "0x5f9f3f3226ac91bc01a72dd117141f6c6de1ed30d3af9f95c3423316dc21d615",
"s": "0x78f7982ede9dabc53d7153974c5692fda8a21fc73bdafc42aaf135505e22817c",
"yParity": 0
}
emode_category
integer | null

Aave E-Mode category ID to set before executing the loop. If not provided, E-Mode will not be changed.

Required range: x >= 0
Example:

0

is_account_abstraction
boolean
default:false

Whether to use account abstraction for the transaction.

Examples:

true

false

account_owner
string | null

The owner address of the smart account (Safe). Required when is_account_abstraction is True. This address will be used as the 'from' address when building the execTransaction call.

Example:

"0x06A9aF046187895AcFc7258450B15397CAc67400"

Response

Successful Response

transaction
UnsignedMulticallTransaction · object
required

The unsigned multicall transaction data. User must sign and broadcast to network.

Example:
{
"chainId": "0x2105",
"data": "0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d",
"from": "0x4A83b4413CF41C3244027e1590E35a0F48403F0c",
"gas": "0x7a120",
"maxFeePerGas": "0x59682f00",
"maxPriorityFeePerGas": "0x3b9aca00",
"nonce": "0x5",
"to": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
"value": "0x0"
}