curl --request GET \
--url https://api.citadel.example/api/v1/addresses/validate \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.citadel.example/api/v1/addresses/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.citadel.example/api/v1/addresses/validate"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.citadel.example/api/v1/addresses/validate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"chain": "tron",
"network": "mainnet",
"address": "TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF",
"valid": true
}Validate an address
Whether an address can be the destination (to) of a transaction on a chain: the same
check POST /transactions runs, so your UI can refuse a mistyped withdrawal address
before a payout is sent. A TRON address is checked down to its checksum, a TON
user-friendly one to its CRC, an EVM one to 0x and 40 hex digits, a Solana one to a
32-byte key.
An invalid address answers 200 with valid: false and the reason. It says nothing
about who holds the address, or whether your policy engine will allow paying it.
network is required. Needs the read scope.
curl --request GET \
--url https://api.citadel.example/api/v1/addresses/validate \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.citadel.example/api/v1/addresses/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.citadel.example/api/v1/addresses/validate"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.citadel.example/api/v1/addresses/validate"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"chain": "tron",
"network": "mainnet",
"address": "TC6A9sQD2tCSaR1wcBXZtrvGkFyoLgRHHF",
"valid": true
}Authorizations
An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key
carries scopes (read, wallets.write, transactions.write, events.write,
webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in
lifetime — see Authentication.
Query Parameters
The network the data lives on. Required — there is no default network: without it,
422 network_required. A wallet named by its id on another network: 422 network_mismatch.
The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
mainnet, testnet tron, evm, solana, ton Response
The verdict.
tron, evm, solana, ton The network the data lives on. Required wherever it appears in a request — there is no
default network. One your installation does not serve: 422 network_not_served.
mainnet, testnet As sent.
Whether POST /transactions accepts it as to on this chain.
Why not; present only when valid is false. Human-readable, not stable.