curl --request POST \
--url https://api.range.org/v2/account-connections \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"name": "<string>",
"cubist": {
"login_id": "<string>",
"refresh_token": "<string>",
"org_id": "<string>"
}
}
'import requests
url = "https://api.range.org/v2/account-connections"
payload = {
"name": "<string>",
"cubist": {
"login_id": "<string>",
"refresh_token": "<string>",
"org_id": "<string>"
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
cubist: {login_id: '<string>', refresh_token: '<string>', org_id: '<string>'}
})
};
fetch('https://api.range.org/v2/account-connections', 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/account-connections",
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([
'name' => '<string>',
'cubist' => [
'login_id' => '<string>',
'refresh_token' => '<string>',
'org_id' => '<string>'
]
]),
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.range.org/v2/account-connections"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\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.range.org/v2/account-connections")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/account-connections")
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 \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "conn_abc123",
"name": "My Utila Account",
"type": "utila",
"provider_display_name": "Utila",
"kind": "account",
"public_data": {
"public_key": "pk_abc123"
},
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}Create account or ledger connection
Stores connection credentials. Account providers support preview/import; ledger providers (e.g. quickbooks) store OAuth tokens only. For multisig providers (safe, squads, realms), an address that fails to resolve returns a classified error body { statusCode, error, code, message } with code one of: invalid_address (bad format), multisig_not_found (well-formed address, no multisig there), wrong_network (Safe only — exists, but on a different chain than selected), upstream_unavailable (the provider/RPC failed — transient, safe to retry).
curl --request POST \
--url https://api.range.org/v2/account-connections \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"name": "<string>",
"cubist": {
"login_id": "<string>",
"refresh_token": "<string>",
"org_id": "<string>"
}
}
'import requests
url = "https://api.range.org/v2/account-connections"
payload = {
"name": "<string>",
"cubist": {
"login_id": "<string>",
"refresh_token": "<string>",
"org_id": "<string>"
}
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
cubist: {login_id: '<string>', refresh_token: '<string>', org_id: '<string>'}
})
};
fetch('https://api.range.org/v2/account-connections', 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/account-connections",
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([
'name' => '<string>',
'cubist' => [
'login_id' => '<string>',
'refresh_token' => '<string>',
'org_id' => '<string>'
]
]),
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.range.org/v2/account-connections"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\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.range.org/v2/account-connections")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/account-connections")
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 \"name\": \"<string>\",\n \"cubist\": {\n \"login_id\": \"<string>\",\n \"refresh_token\": \"<string>\",\n \"org_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "conn_abc123",
"name": "My Utila Account",
"type": "utila",
"provider_display_name": "Utila",
"kind": "account",
"public_data": {
"public_key": "pk_abc123"
},
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}Authorizations
Authorization method required to allow user to access the api endpoints.
Body
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
"conn_abc123"
"My Utila Account"
utila, kraken, binance, okx, bybit, bitget, gate, kucoin, plaid, squads, altitude, coinbase, realms, wise, safe, hyperliquid, cubist, privy, dfns, anchorage, revolut_business, turnkey, fordefi, coins_ph, fireblocks, pave_bank, copper, quickbooks "utila"
Canonical brand label for type (e.g. okx → OKX, plaid → Bank, gate → Gate.io).
"Utila"
Connection family: account (import Range Accounts) or ledger (bookkeeping).
account, ledger "account"
Non-sensitive public metadata
{ "public_key": "pk_abc123" }
"2026-01-01T00:00:00.000Z"
Last config edit: creation, rename, or a credential/session refresh. Transaction-sync lifecycle lives on accounts (AccountDto.last_synced_at / sync_status), not on connections.
"2026-01-01T00:00:00.000Z"
Was this page helpful?