curl --request GET \
--url https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page \
--header 'X-Api-Key: <api-key>'import requests
url = "https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page"
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page', 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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page",
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page"
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page")
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_bodynullGet unspent outputs for address, paged
Unspent outputs in a envelope.
GUARANTEE (mempool): unconfirmed outputs are always included with status.confirmed=false, including when from/to are present. Height bounds apply to confirmed outputs only. Filter client-side on status.confirmed.
data is ordered confirmed-ascending by (blockHeight, txid, vout), then unconfirmed. tip is the electrs tip fetched BEFORE the data query: store tip.blockHeight as your next watermark; a block arriving mid-request re-scans, never skips. cursor is opaque; limit defaults to 100, max 1000. Entries may repeat across pages when a mempool UTXO confirms mid-scan; treat (txid, vout) as the identity key.
includeOrdinals=true additionally inlines per-UTXO scriptPubkey plus, for outputs ord has indexed (ordinalsIndexed=true), inscriptions (inscription IDs) and runes (runeId in block:tx form, best-effort). ordinalsIndexed=false means ord has not examined the output yet and both fields are omitted rather than reported empty. Fails with 503 if ord is unavailable, 502 if its bulk response does not cover every requested outpoint.
curl --request GET \
--url https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page \
--header 'X-Api-Key: <api-key>'import requests
url = "https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page"
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page', 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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page",
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page"
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://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://nexus.gerowallet.io/api/btc/addresses/{address}/utxos/page")
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_bodynullAuthorizations
API key (programmatic access — recommended)
Send your API key in the X-Api-Key header. Keys start with nxs_ and are
created in the dashboard (or via POST /api/keys with a session JWT).
Each key is scoped to one chain and one network (for example
CARDANO_MAINNET), fixed at creation time. It cannot query a different network
on the same chain, and it cannot query a different chain at all. A mismatched
network parameter returns 400 Network Mismatch. Create one key per chain
and network under the same account.
This is the credential most integrations should use.
Path Parameters
14 - 128^[a-zA-HJ-NP-Z0-9]{14,128}$Query Parameters
Accepts either the value listed here (CARDANO_MAINNET) or its kebab-case alias (cardano-mainnet); matching is case-insensitive. Omit it and the network is taken from the API key. A value that disagrees with the key's own network returns 400 Network Mismatch.
CARDANO_MAINNET, CARDANO_PREPROD, CARDANO_PREVIEW, APEX_PRIME_MAINNET, APEX_VECTOR_MAINNET, APEX_VECTOR_TESTNET, MIDNIGHT_MAINNET, MIDNIGHT_PREPROD, MIDNIGHT_STAGENET, BITCOIN_MAINNET, BITCOIN_TESTNET4 x >= 0x >= 02561 <= x <= 1000Response
OK
Paged UTXO listing, returned by /utxos/page. The unpaged /utxos endpoint returns the bare array instead.
UTXOs: confirmed ascending by (blockHeight, txid, vout), then unconfirmed (status.confirmed=false) by (txid, vout)
Show child attributes
Show child attributes
Indexer tip the response was computed against; safe watermark
Show child attributes
Show child attributes
Opaque cursor for the next page; absent when exhausted