curl --request GET \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position', 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.beta.getpara.com/v1/wallets/{walletId}/yield/position",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"chainId": 8453,
"marketId": "morpho-v2-base-steakhouse-usdc",
"protocol": "aave-v3",
"asset": "USDC",
"tokenAddress": "<string>",
"suppliedBalance": "<string>",
"walletBalance": "<string>",
"withdrawal": {
"availableAmount": "<string>",
"advisory": true,
"restrictions": [
"<string>"
]
},
"blockNumber": 123,
"blockTimestamp": "2023-11-07T05:31:56Z",
"availableLiquidity": "<string>",
"vaultAddress": "0xbeef0e0834849aCC03f0089F01f4F1Eeb06873C9",
"shares": {
"balance": "<string>",
"decimals": 18
},
"reserve": {
"active": true,
"frozen": true,
"paused": true
}
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "FORBIDDEN",
"message": "invalid secret api key"
}{
"code": "NOT_FOUND",
"message": "wallet not found"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"code": "RATE_LIMITED",
"message": "Rate limit exceeded, try again shortly."
}{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}Get position
Get the wallet’s supplied USDC balance and estimated withdrawal availability in the selected market. Provide marketId or chainId. Para derives the chain from marketId; chainId alone selects Aave V3. If both are supplied, they must identify the same chain.
curl --request GET \
--url https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position', 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.beta.getpara.com/v1/wallets/{walletId}/yield/position",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.beta.getpara.com/v1/wallets/{walletId}/yield/position")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"chainId": 8453,
"marketId": "morpho-v2-base-steakhouse-usdc",
"protocol": "aave-v3",
"asset": "USDC",
"tokenAddress": "<string>",
"suppliedBalance": "<string>",
"walletBalance": "<string>",
"withdrawal": {
"availableAmount": "<string>",
"advisory": true,
"restrictions": [
"<string>"
]
},
"blockNumber": 123,
"blockTimestamp": "2023-11-07T05:31:56Z",
"availableLiquidity": "<string>",
"vaultAddress": "0xbeef0e0834849aCC03f0089F01f4F1Eeb06873C9",
"shares": {
"balance": "<string>",
"decimals": 18
},
"reserve": {
"active": true,
"frozen": true,
"paused": true
}
}{
"code": "INVALID_REQUEST",
"message": "type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI"
}{
"code": "UNAUTHORIZED",
"message": "secret api key not provided"
}{
"code": "FORBIDDEN",
"message": "invalid secret api key"
}{
"code": "NOT_FOUND",
"message": "wallet not found"
}{
"code": "INVALID_REQUEST",
"message": "<string>",
"transactionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"failureStage": "mpc_sign",
"failureCode": "<string>",
"signedTransaction": "<string>"
}{
"code": "RATE_LIMITED",
"message": "Rate limit exceeded, try again shortly."
}{
"code": "INTERNAL_ERROR",
"message": "Internal Server Error"
}Authorizations
Your partner secret key (server-side only)
Headers
UUID for request tracing. Para returns one if omitted.
Path Parameters
Wallet UUID. A malformed or inaccessible wallet ID returns 404.
"0a1b2c3d-4e5f-6789-abcd-ef0123456789"
Query Parameters
Optional when marketId is supplied; must match its chain. Without marketId, selects Aave V3 on this chain. Native USDC on Ethereum mainnet (1) or Base mainnet (8453), or Aave test USDC on Sepolia (11155111). Base Sepolia (84532) uses test USDC and is available only in sandbox and local test environments.
1, 8453, 11155111, 84532 Market ID from the markets endpoint. Determines the chain and asset. Required if chainId is omitted. Without marketId, chainId selects Aave V3. Unsupported IDs or a mismatched chainId return 400. The sandbox-only Morpho demo market is morpho-v2-base-sepolia-demo-usdc on Base Sepolia (84532); it holds test USDC idle and earns no lending yield.
"morpho-v2-base-steakhouse-usdc"
Response
Current position and snapshot block.
1, 8453, 11155111 8453
"morpho-v2-base-steakhouse-usdc"
aave-v3, morpho-v2 USDC Current position value in USDC decimal units, including accrued yield. Aave uses the aToken balance; Morpho uses previewRedeem for the current shares, rounding down. Not historical earnings.
Wallet USDC balance in decimal units.
Show child attributes
Show child attributes
Aave only. USDC held by the reserve aToken contract; other protocol constraints may restrict withdrawals.
Morpho only. Address of the selected Morpho V2 vault on Ethereum or Base.
"0xbeef0e0834849aCC03f0089F01f4F1Eeb06873C9"
Morpho only. Vault share balance in raw units, not a USDC amount.
Show child attributes
Show child attributes
Aave only. Current reserve configuration.
Show child attributes
Show child attributes