curl --request GET \
--url https://api.range.org/v2/multisig/details \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/multisig/details"
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.range.org/v2/multisig/details', 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.range.org/v2/multisig/details",
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.range.org/v2/multisig/details"
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.range.org/v2/multisig/details")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/multisig/details")
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{
"address": "0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7",
"network": "ethereum",
"type": "multisig",
"provider": "safe",
"balances": [
{
"asset": "USDC",
"amount": "100.50",
"updated_at": "2024-01-01T00:00:00.000Z",
"usd": "100.50"
}
],
"details": {
"safe": {
"safe_address": "0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7",
"network": "ethereum",
"version": "1.4.1",
"threshold": 2,
"nonce": 42,
"owners": [
"0xabc...",
"0xdef..."
],
"pending_proposals": [
{
"safe_tx_hash": "0xabcdef1234...",
"nonce": 42,
"destination_address": "0xabc...",
"value": "0.5",
"operation": 0,
"confirmations_required": 2,
"confirmations": [
{
"owner": "0xabc...",
"submission_date": "2026-01-01T00:00:00.000Z"
}
],
"data_payload": null,
"submission_date": "2026-01-01T00:00:00.000Z"
}
]
},
"multisig": {
"multisig_address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"resolved_from_address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"threshold": 2,
"version": "v4",
"program_id": "SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf",
"create_key": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"members": [
{}
],
"pending_proposals": [
{
"address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"transaction_index": 42,
"status": "active",
"approved_count": 2,
"rejected_count": 0,
"approved": [
"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
],
"rejected": [],
"timestamp": 1712345678
}
],
"vaults": [
{}
],
"resolved_vault_index": 0,
"config_authority": null,
"time_lock": 0
},
"altitude": {
"settings_address": "DzHZF6ZYAWqor1hxeaKmCwDoS5q1ZqBKKgNQVetxE69x",
"resolved_from_address": "H8sdnTKCRKiyrDT8g9pMTzeoihUcEoTNdybakNT81xyQ",
"is_altitude": true,
"program_id": "SMRTzfY6DfH5ik3TKiyLFfXexV8uSG3d2UksSCYdunG",
"settings_seed": "88888",
"threshold": 1,
"time_lock": 0,
"transaction_index": 34,
"stale_transaction_index": 12,
"signers": [
{}
],
"policies": [
{
"address": "8VRXxPosEMFphTeQPLShJQhVeigjuV7mfRzm9UqVwWJx",
"seed": 2
}
],
"pending_proposals": [
{
"address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"transaction_index": 42,
"status": "active",
"approved_count": 2,
"rejected_count": 0,
"approved": [
"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
],
"rejected": [],
"timestamp": 1712345678
}
],
"smart_accounts": [
{
"account_index": 0,
"address": "H8sdnTKCRKiyrDT8g9pMTzeoihUcEoTNdybakNT81xyQ",
"lamports": "0",
"token_accounts": [
{}
]
}
],
"resolved_account_index": 0,
"settings_authority": null,
"policies_truncated": true
},
"realms": {
"realm_address": "DA5G7QQbFioZ6K33wQcH8fVdgFcnaDjLD7DLQkapZg5X",
"resolved_from_address": "DA5G7QQbFioZ6K33wQcH8fVdgFcnaDjLD7DLQkapZg5X",
"program_id": "AEauWRrpn9Cs6GXujzdp1YhMmv2288kBt3SdEcPYEerr",
"version": "v2",
"realm_name": "Metaplex",
"community_mint": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m",
"min_community_weight_to_create_governance": "1",
"council_members": [
{}
],
"community_members_count": 42,
"governances": [
{}
],
"treasuries": [
{
"governance": "8cEhQQm3MW5YQiiZ7sB6YkmFHcLXPAFSp7i4e48Kt4PK",
"native_treasury": "BHkk3RTd4Ue6JnqXpa9QHTXbn575ycR8hxVmYx4E254k",
"lamports": "131992814522",
"token_accounts": [
{
"pubkey": "8iD9rdetvTqb9ooxrYbMESi9nRsGReYSBpCXqaj8G3r",
"owner": "BHkk3RTd4Ue6JnqXpa9QHTXbn575ycR8hxVmYx4E254k",
"owner_kind": "native_treasury",
"mint": "So11111111111111111111111111111111111111112",
"balance": "1000000",
"decimals": 6,
"ui_amount": "1.000000"
}
]
}
],
"council_mint": null,
"authority": null,
"latest_active_proposal": {
"pubkey": "F7xP...abc",
"governance": "8cEhQQm3MW5YQiiZ7sB6YkmFHcLXPAFSp7i4e48Kt4PK",
"governing_token_mint": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m",
"track": "community",
"name": "Increase staking rewards to 8%",
"state": "Voting",
"draft_at": 1700000000
}
}
}
}Get multisig details (Safe / Squads / Altitude / Realms)
Stateless read of a multisig: config + members, balances, and pending proposals. Mirrors the data an account-connection exposes, so it can be used whether or not the wallet is a saved connection. network is required for safe (EVM chain) and rejected for squads/altitude/realms (Solana-only).
curl --request GET \
--url https://api.range.org/v2/multisig/details \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v2/multisig/details"
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.range.org/v2/multisig/details', 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.range.org/v2/multisig/details",
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.range.org/v2/multisig/details"
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.range.org/v2/multisig/details")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/multisig/details")
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{
"address": "0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7",
"network": "ethereum",
"type": "multisig",
"provider": "safe",
"balances": [
{
"asset": "USDC",
"amount": "100.50",
"updated_at": "2024-01-01T00:00:00.000Z",
"usd": "100.50"
}
],
"details": {
"safe": {
"safe_address": "0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7",
"network": "ethereum",
"version": "1.4.1",
"threshold": 2,
"nonce": 42,
"owners": [
"0xabc...",
"0xdef..."
],
"pending_proposals": [
{
"safe_tx_hash": "0xabcdef1234...",
"nonce": 42,
"destination_address": "0xabc...",
"value": "0.5",
"operation": 0,
"confirmations_required": 2,
"confirmations": [
{
"owner": "0xabc...",
"submission_date": "2026-01-01T00:00:00.000Z"
}
],
"data_payload": null,
"submission_date": "2026-01-01T00:00:00.000Z"
}
]
},
"multisig": {
"multisig_address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"resolved_from_address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"threshold": 2,
"version": "v4",
"program_id": "SQDS4ep65T869zMMBKyuUq6aD6EgTu8psMjkvj52pCf",
"create_key": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"members": [
{}
],
"pending_proposals": [
{
"address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"transaction_index": 42,
"status": "active",
"approved_count": 2,
"rejected_count": 0,
"approved": [
"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
],
"rejected": [],
"timestamp": 1712345678
}
],
"vaults": [
{}
],
"resolved_vault_index": 0,
"config_authority": null,
"time_lock": 0
},
"altitude": {
"settings_address": "DzHZF6ZYAWqor1hxeaKmCwDoS5q1ZqBKKgNQVetxE69x",
"resolved_from_address": "H8sdnTKCRKiyrDT8g9pMTzeoihUcEoTNdybakNT81xyQ",
"is_altitude": true,
"program_id": "SMRTzfY6DfH5ik3TKiyLFfXexV8uSG3d2UksSCYdunG",
"settings_seed": "88888",
"threshold": 1,
"time_lock": 0,
"transaction_index": 34,
"stale_transaction_index": 12,
"signers": [
{}
],
"policies": [
{
"address": "8VRXxPosEMFphTeQPLShJQhVeigjuV7mfRzm9UqVwWJx",
"seed": 2
}
],
"pending_proposals": [
{
"address": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"transaction_index": 42,
"status": "active",
"approved_count": 2,
"rejected_count": 0,
"approved": [
"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
],
"rejected": [],
"timestamp": 1712345678
}
],
"smart_accounts": [
{
"account_index": 0,
"address": "H8sdnTKCRKiyrDT8g9pMTzeoihUcEoTNdybakNT81xyQ",
"lamports": "0",
"token_accounts": [
{}
]
}
],
"resolved_account_index": 0,
"settings_authority": null,
"policies_truncated": true
},
"realms": {
"realm_address": "DA5G7QQbFioZ6K33wQcH8fVdgFcnaDjLD7DLQkapZg5X",
"resolved_from_address": "DA5G7QQbFioZ6K33wQcH8fVdgFcnaDjLD7DLQkapZg5X",
"program_id": "AEauWRrpn9Cs6GXujzdp1YhMmv2288kBt3SdEcPYEerr",
"version": "v2",
"realm_name": "Metaplex",
"community_mint": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m",
"min_community_weight_to_create_governance": "1",
"council_members": [
{}
],
"community_members_count": 42,
"governances": [
{}
],
"treasuries": [
{
"governance": "8cEhQQm3MW5YQiiZ7sB6YkmFHcLXPAFSp7i4e48Kt4PK",
"native_treasury": "BHkk3RTd4Ue6JnqXpa9QHTXbn575ycR8hxVmYx4E254k",
"lamports": "131992814522",
"token_accounts": [
{
"pubkey": "8iD9rdetvTqb9ooxrYbMESi9nRsGReYSBpCXqaj8G3r",
"owner": "BHkk3RTd4Ue6JnqXpa9QHTXbn575ycR8hxVmYx4E254k",
"owner_kind": "native_treasury",
"mint": "So11111111111111111111111111111111111111112",
"balance": "1000000",
"decimals": 6,
"ui_amount": "1.000000"
}
]
}
],
"council_mint": null,
"authority": null,
"latest_active_proposal": {
"pubkey": "F7xP...abc",
"governance": "8cEhQQm3MW5YQiiZ7sB6YkmFHcLXPAFSp7i4e48Kt4PK",
"governing_token_mint": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m",
"track": "community",
"name": "Increase staking rewards to 8%",
"state": "Voting",
"draft_at": 1700000000
}
}
}
}Authorizations
Authorization method required to allow user to access the api endpoints.
Query Parameters
Multisig address. For Squads, a vault address is also accepted and resolved to its multisig. For Altitude, a smart-account deposit address is also accepted and resolved to its Settings account.
"0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7"
Multisig provider.
safe, squads, altitude, realms "safe"
EVM chain — REQUIRED for safe, and rejected for squads/altitude/realms (Solana-only).
ethereum, arbitrum, base, optimism, polygon, bnb "ethereum"
Response
Canonical address: resolved multisig for Squads, checksummed for Safe.
"0xfF501B324DC6d78dC9F983f140B9211c3EdB4dc7"
"ethereum"
"multisig"
safe, squads, altitude, realms "safe"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?