XRP Address Validation
Check an XRP Ledger address, classic or X-address with its destination tag and network, against the XRPL alphabet and checksum. No on-chain lookup.
xrp-address-validate Example
{
"address": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT"
} {
"tag": null,
"input": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT",
"valid": true,
"network": null,
"normalized": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT",
"classic_form": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT",
"address_format": "classic",
"x_address_form": "XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD28Sq49uo34VyjnmK5H"
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
address | string | Yes | XRP Ledger address (e.g. rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT or X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ) |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
tag | integer or null | Sometimes (present only for some inputs) |
input | string | Always (present in every successful answer) |
valid | boolean | Always (present in every successful answer) |
network | one of mainnet, testnet, null | Sometimes (present only for some inputs) |
normalized | string or null | Usually (present for most inputs) |
classic_form | string or null | Usually (present for most inputs) |
address_format | one of classic, x-address, null | Usually (present for most inputs) |
x_address_form | string or null | Usually (present for most inputs) |
How to call it
The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.
# Free tool: works without a key, within a monthly allowance. Add your key for more.
curl -X POST https://api.strale.io/v1/do \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "xrp-address-validate",
"inputs": {
"address": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT"
},
"max_price_cents": 5
}' {
"tool": "strale_execute",
"arguments": {
"slug": "xrp-address-validate",
"inputs": {
"address": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT"
},
"max_price_cents": 5
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "xrp-address-validate",
inputs: {
"address": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT"
},
max_price_cents: 5,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="xrp-address-validate",
inputs={
"address": "rPdvC6ccq8hCdPKSPJkPmyZ4Mi1oG2FFkT",
},
max_price_cents=5,
)) Limitations
Format and checksum only — no on-chain check
Validates address structure only. Does not check whether the account exists on-chain, has been activated with a reserve, or holds any balance.
What to do instead: Use an XRPL node or rippled API for on-chain account state.
Classic addresses don't encode network
Only X-addresses encode mainnet vs. testnet. For classic r-addresses, the same address is valid on both networks; "network" will be null.
Destination tag is part of X-address only
For classic addresses, destination tags are sent separately as a transaction field. The "tag" output will be null for classic addresses even if the user's intent was to include one.