curl --request POST \
--url https://nexus.gerowallet.io/api/tx/max-ada \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"outputs": [
{
"address": "<string>",
"lovelace": "<string>",
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
]
}
],
"changeAddress": "<string>",
"utxos": [
{
"txHash": "<string>",
"address": "<string>",
"lovelace": "<string>",
"outputIndex": 1,
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
],
"dataHash": "<string>",
"inlineDatum": "<string>",
"referenceScriptHash": "<string>"
}
],
"senderAddress": "<string>",
"ttl": 123,
"withdrawals": [
{
"stakeAddress": "<string>",
"amount": "<string>"
}
]
}
'import requests
url = "https://nexus.gerowallet.io/api/tx/max-ada"
payload = {
"outputs": [
{
"address": "<string>",
"lovelace": "<string>",
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
]
}
],
"changeAddress": "<string>",
"utxos": [
{
"txHash": "<string>",
"address": "<string>",
"lovelace": "<string>",
"outputIndex": 1,
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
],
"dataHash": "<string>",
"inlineDatum": "<string>",
"referenceScriptHash": "<string>"
}
],
"senderAddress": "<string>",
"ttl": 123,
"withdrawals": [
{
"stakeAddress": "<string>",
"amount": "<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({
outputs: [
{
address: '<string>',
lovelace: '<string>',
assets: [{policyId: '<string>', assetName: '<string>', quantity: '<string>'}]
}
],
changeAddress: '<string>',
utxos: [
{
txHash: '<string>',
address: '<string>',
lovelace: '<string>',
outputIndex: 1,
assets: [{policyId: '<string>', assetName: '<string>', quantity: '<string>'}],
dataHash: '<string>',
inlineDatum: '<string>',
referenceScriptHash: '<string>'
}
],
senderAddress: '<string>',
ttl: 123,
withdrawals: [{stakeAddress: '<string>', amount: '<string>'}]
})
};
fetch('https://nexus.gerowallet.io/api/tx/max-ada', 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/tx/max-ada",
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([
'outputs' => [
[
'address' => '<string>',
'lovelace' => '<string>',
'assets' => [
[
'policyId' => '<string>',
'assetName' => '<string>',
'quantity' => '<string>'
]
]
]
],
'changeAddress' => '<string>',
'utxos' => [
[
'txHash' => '<string>',
'address' => '<string>',
'lovelace' => '<string>',
'outputIndex' => 1,
'assets' => [
[
'policyId' => '<string>',
'assetName' => '<string>',
'quantity' => '<string>'
]
],
'dataHash' => '<string>',
'inlineDatum' => '<string>',
'referenceScriptHash' => '<string>'
]
],
'senderAddress' => '<string>',
'ttl' => 123,
'withdrawals' => [
[
'stakeAddress' => '<string>',
'amount' => '<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://nexus.gerowallet.io/api/tx/max-ada"
payload := strings.NewReader("{\n \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\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://nexus.gerowallet.io/api/tx/max-ada")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://nexus.gerowallet.io/api/tx/max-ada")
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 \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body""{
"error": "No UTXOs available"
}{
"error": "Internal server error"
}Calculate the maximum ADA an address can send
Computes the maximum ADA that can be sent to a destination address by selecting all available UTxOs, estimating the transaction fee, and accounting for a change output min-UTxO when native tokens are present. Returns max_lovelace = total_balance - estimated_fee - change_min_utxo. Either provide UTXOs directly or a sender address to fetch UTXOs from the network.
curl --request POST \
--url https://nexus.gerowallet.io/api/tx/max-ada \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"outputs": [
{
"address": "<string>",
"lovelace": "<string>",
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
]
}
],
"changeAddress": "<string>",
"utxos": [
{
"txHash": "<string>",
"address": "<string>",
"lovelace": "<string>",
"outputIndex": 1,
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
],
"dataHash": "<string>",
"inlineDatum": "<string>",
"referenceScriptHash": "<string>"
}
],
"senderAddress": "<string>",
"ttl": 123,
"withdrawals": [
{
"stakeAddress": "<string>",
"amount": "<string>"
}
]
}
'import requests
url = "https://nexus.gerowallet.io/api/tx/max-ada"
payload = {
"outputs": [
{
"address": "<string>",
"lovelace": "<string>",
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
]
}
],
"changeAddress": "<string>",
"utxos": [
{
"txHash": "<string>",
"address": "<string>",
"lovelace": "<string>",
"outputIndex": 1,
"assets": [
{
"policyId": "<string>",
"assetName": "<string>",
"quantity": "<string>"
}
],
"dataHash": "<string>",
"inlineDatum": "<string>",
"referenceScriptHash": "<string>"
}
],
"senderAddress": "<string>",
"ttl": 123,
"withdrawals": [
{
"stakeAddress": "<string>",
"amount": "<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({
outputs: [
{
address: '<string>',
lovelace: '<string>',
assets: [{policyId: '<string>', assetName: '<string>', quantity: '<string>'}]
}
],
changeAddress: '<string>',
utxos: [
{
txHash: '<string>',
address: '<string>',
lovelace: '<string>',
outputIndex: 1,
assets: [{policyId: '<string>', assetName: '<string>', quantity: '<string>'}],
dataHash: '<string>',
inlineDatum: '<string>',
referenceScriptHash: '<string>'
}
],
senderAddress: '<string>',
ttl: 123,
withdrawals: [{stakeAddress: '<string>', amount: '<string>'}]
})
};
fetch('https://nexus.gerowallet.io/api/tx/max-ada', 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/tx/max-ada",
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([
'outputs' => [
[
'address' => '<string>',
'lovelace' => '<string>',
'assets' => [
[
'policyId' => '<string>',
'assetName' => '<string>',
'quantity' => '<string>'
]
]
]
],
'changeAddress' => '<string>',
'utxos' => [
[
'txHash' => '<string>',
'address' => '<string>',
'lovelace' => '<string>',
'outputIndex' => 1,
'assets' => [
[
'policyId' => '<string>',
'assetName' => '<string>',
'quantity' => '<string>'
]
],
'dataHash' => '<string>',
'inlineDatum' => '<string>',
'referenceScriptHash' => '<string>'
]
],
'senderAddress' => '<string>',
'ttl' => 123,
'withdrawals' => [
[
'stakeAddress' => '<string>',
'amount' => '<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://nexus.gerowallet.io/api/tx/max-ada"
payload := strings.NewReader("{\n \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\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://nexus.gerowallet.io/api/tx/max-ada")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://nexus.gerowallet.io/api/tx/max-ada")
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 \"outputs\": [\n {\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ]\n }\n ],\n \"changeAddress\": \"<string>\",\n \"utxos\": [\n {\n \"txHash\": \"<string>\",\n \"address\": \"<string>\",\n \"lovelace\": \"<string>\",\n \"outputIndex\": 1,\n \"assets\": [\n {\n \"policyId\": \"<string>\",\n \"assetName\": \"<string>\",\n \"quantity\": \"<string>\"\n }\n ],\n \"dataHash\": \"<string>\",\n \"inlineDatum\": \"<string>\",\n \"referenceScriptHash\": \"<string>\"\n }\n ],\n \"senderAddress\": \"<string>\",\n \"ttl\": 123,\n \"withdrawals\": [\n {\n \"stakeAddress\": \"<string>\",\n \"amount\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body""{
"error": "No UTXOs available"
}{
"error": "Internal server error"
}Authorizations
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.
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 Body
50Show child attributes
Show child attributes
256200Show child attributes
Show child attributes
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 10Show child attributes
Show child attributes