Bitcoin Address Validation
Check a Bitcoin address: its type (P2PKH, P2SH, P2WPKH, P2WSH, P2TR), network, and the Base58Check or bech32 checksum that catches typos. No on-chain lookup.
bitcoin-address-validate Example
{
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
} {
"input": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"valid": true,
"network": "mainnet",
"normalized": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
"address_type": "p2wpkh",
"format_valid": true,
"checksum_valid": true
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
address | string | Yes | Bitcoin address (e.g. 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa, bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq, or bc1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sspknck9) |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
input | string | Always (present in every successful answer) |
valid | boolean | Always (present in every successful answer) |
network | one of mainnet, testnet, regtest, null | Usually (present for most inputs) |
normalized | string or null | Usually (present for most inputs) |
address_type | one of p2pkh, p2sh, p2wpkh, p2wsh, p2tr, p2w-unknown, null | Usually (present for most inputs) |
format_valid | boolean | Always (present in every successful answer) |
checksum_valid | boolean | Always (present in every successful answer) |
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": "bitcoin-address-validate",
"inputs": {
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
},
"max_price_cents": 5
}' {
"tool": "strale_execute",
"arguments": {
"slug": "bitcoin-address-validate",
"inputs": {
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
},
"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: "bitcoin-address-validate",
inputs: {
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq"
},
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="bitcoin-address-validate",
inputs={
"address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
},
max_price_cents=5,
)) Limitations
Format and checksum only — no on-chain check
Validates Bitcoin address format and checksum (Base58Check for legacy P2PKH/P2SH; BIP173 bech32 for SegWit v0 P2WPKH/P2WSH; BIP350 bech32m for Taproot v1 P2TR). Does not check whether the address has a balance, has been used on-chain, or whether it controls any funds.
What to do instead: Query a Bitcoin node or block explorer for balances and transaction history.
Witness versions above 1 are accepted but not classified
SegWit witness versions 2-16 are reserved for future upgrades. Addresses with these versions and valid bech32m checksum are returned with address_type="p2w-unknown" rather than rejected, since the address is structurally valid even if its purpose is unknown today.
Mainnet/testnet inferred from prefix only
Network is inferred from the legacy version byte or bech32 prefix, with Bitcoin mainnet, testnet and regtest supported. Forks sharing address formats are not distinguished: they can fail the checksum or be classified as Bitcoin when the prefix matches.
What to do instead: If chain disambiguation matters, validate against the specific chain's expected prefix set before calling.