List withdrawable positions
curl --request GET \
--url https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}', 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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}",
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: <x-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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"positions": [
{
"venue": "aave",
"kind": "lending",
"market": {
"address": "<string>",
"name": "<string>"
},
"chain": "eip155:8453",
"asset": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123
},
"amount": "<string>",
"usdValue": 123,
"apy": 123,
"isCollateral": true,
"maxWithdrawable": "<string>",
"withdrawableUsd": 40.02,
"isFullExit": true,
"constraints": [
"health_factor"
]
}
],
"totalUsd": 123,
"minDepositUsd": 0.04,
"failures": [
{
"venue": "<string>",
"reason": "<string>"
}
]
}{
"error": "<string>",
"details": [
{
"message": "<string>",
"path": [
"<string>"
],
"code": "<string>"
}
]
}{
"error": "<string>",
"details": [
{
"message": "<string>",
"path": [
"<string>"
],
"code": "<string>"
}
]
}Utilities
List withdrawable positions
Returns DeFi positions and the amounts currently available to withdraw.
GET
/
positions
/
{address}
List withdrawable positions
curl --request GET \
--url https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address} \
--header 'x-api-key: <x-api-key>'import requests
url = "https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}"
headers = {"x-api-key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
fetch('https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}', 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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}",
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: <x-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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<x-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://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}")
.header("x-api-key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://v1.orchestrator.rhinestone.dev/deposit-processor/positions/{address}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"positions": [
{
"venue": "aave",
"kind": "lending",
"market": {
"address": "<string>",
"name": "<string>"
},
"chain": "eip155:8453",
"asset": {
"address": "<string>",
"symbol": "<string>",
"decimals": 123
},
"amount": "<string>",
"usdValue": 123,
"apy": 123,
"isCollateral": true,
"maxWithdrawable": "<string>",
"withdrawableUsd": 40.02,
"isFullExit": true,
"constraints": [
"health_factor"
]
}
],
"totalUsd": 123,
"minDepositUsd": 0.04,
"failures": [
{
"venue": "<string>",
"reason": "<string>"
}
]
}{
"error": "<string>",
"details": [
{
"message": "<string>",
"path": [
"<string>"
],
"code": "<string>"
}
]
}{
"error": "<string>",
"details": [
{
"message": "<string>",
"path": [
"<string>"
],
"code": "<string>"
}
]
}Headers
API key for authentication
Example:
"your-api-key"
API version identifier (e.g. "2026-04.amazon"). Optional today, will become required in a future release.
Pattern:
^\d{4}-\d{2}\.[a-z0-9]+$Example:
"2026-04.amazon"
Path Parameters
EVM address holding the DeFi positions
Pattern:
^0x[a-fA-F0-9]{40}$Example:
"0x742d35Cc6634C0532925a3b844Bc9e7595f5bE91"
Response
Normalised DeFi positions
Show child attributes
Show child attributes
The USD floor the withdrawn proceeds must clear for this project, resolved from the platform minimum and the project's own minDepositUsd. Proceeds below it are rejected on ingest after the withdrawal has already happened.
Example:
0.04
Present only when a venue could not be reached, so an empty positions list can be told apart from a failed lookup.
Show child attributes
Show child attributes
Was this page helpful?