curl --request POST \
--url https://api.range.org/v2/accounts/refresh \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"account_ids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
]
}
'import requests
url = "https://api.range.org/v2/accounts/refresh"
payload = { "account_ids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"] }
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({account_ids: ['a1b2c3d4-e5f6-7890-abcd-ef1234567890']})
};
fetch('https://api.range.org/v2/accounts/refresh', 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/accounts/refresh",
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([
'account_ids' => [
'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
]
]),
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/accounts/refresh"
payload := strings.NewReader("{\n \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\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/accounts/refresh")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/accounts/refresh")
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 \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"refreshed": 12,
"failed": 1,
"skipped": 2,
"failures": [
{
"account_id": "account-uuid-1",
"label": "Kraken treasury",
"reason": "Provider timed out",
"reason_code": "provider_timeout",
"ref": "a3f91c7e"
}
]
}Refresh balances for the workspace or for given accounts
Synchronously refreshes balances — connection-backed (Wise/Kraken/Safe/etc.) and standalone on-chain wallets alike — and persists them. With no body, or an empty account_ids, every account in the caller workspace is refreshed; with account_ids, exactly those accounts — all of which must belong to the caller workspace, or the request fails with 404.
curl --request POST \
--url https://api.range.org/v2/accounts/refresh \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"account_ids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
]
}
'import requests
url = "https://api.range.org/v2/accounts/refresh"
payload = { "account_ids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"] }
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({account_ids: ['a1b2c3d4-e5f6-7890-abcd-ef1234567890']})
};
fetch('https://api.range.org/v2/accounts/refresh', 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/accounts/refresh",
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([
'account_ids' => [
'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
]
]),
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/accounts/refresh"
payload := strings.NewReader("{\n \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\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/accounts/refresh")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v2/accounts/refresh")
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 \"account_ids\": [\n \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"refreshed": 12,
"failed": 1,
"skipped": 2,
"failures": [
{
"account_id": "account-uuid-1",
"label": "Kraken treasury",
"reason": "Provider timed out",
"reason_code": "provider_timeout",
"ref": "a3f91c7e"
}
]
}Authorizations
Authorization method required to allow user to access the api endpoints.
Body
Limit the action to these workspace accounts. Omit to cover every account in the workspace. Every id must belong to the caller workspace or the request fails with 404.
["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
Response
Number of accounts whose balances were refreshed.
12
Number of accounts whose balance refresh failed (e.g. provider error).
1
Number of accounts whose holdings could not be read at all — their chain has no readable balance source, or their connection's provider is no longer supported. Neither refreshed nor failed, since there is nothing to retry and nothing actionable to report. refreshed + failed + skipped is the total number of accounts this pass considered. Additive field (RNG-5758); clients reading only the existing counts keep working unmodified.
2
Per-account detail, one entry per failed account; its length always matches failed. Always present — an empty array when nothing failed. Additive field, so older clients that only read the counts keep working.
Show child attributes
Show child attributes
Was this page helpful?