For wallet checkers, wallets and exchanges

Show VerifiedWallet results in your lookups

Run a wallet checker, a wallet app or a payments screen? When your own records have nothing on an address, ask ours. It's free, needs no key, and turns a "no association found" dead end into a useful answer for your users.

See the code Talk to us

Free, no key

One HTTPS call, open to any site (CORS), with no sign-up and no charge. Please keep volume reasonable, and cache answers for a few minutes.

Checkable, not just claimed

Every positive answer links to a certificate whose signatures anyone can check: the wallet's own signature, and ours against our published key. You don't have to take our word for it.

Catches lookalikes

We also warn when an address copies the first and last characters of a verified one. That's how address poisoning tricks people into pasting the wrong address.

How it works

When a user looks up an address and your own records come up empty (or alongside them, if you prefer), call:

GET https://verifiedwallet.io/api/check/<address>

We work out the network from the address: Bitcoin, Ethereum and every EVM network, Solana, Tron, XRP, TON, Litecoin, Dogecoin, Bitcoin Cash, Cardano, Cosmos, Sui and Aptos. You get back:

{
  "address": "bc1q4sd5r6w5cq7eu438azptvvhq7kgmptys0ra3m0",
  "chain": "bitcoin",
  "verdict": "verified",
  "summary": "The owner of this wallet proved they control it.",
  "certificates": [{ "id": "VW-…", "tier": 1, "issuedAt": "…", "identity": null, "aml": null, "business": null, "revoked": false, "url": "https://verifiedwallet.io/cert?id=VW-…" }],
  "directory": null,
  "lookalikes": [],
  "checkedAt": "…"
}

What the verdicts mean

verdictMeaningSuggested display
businessA company's verified wallet, listed in our business directory under its registered name (directory.company, country, registrationNumber).Positive, with the company name
verifiedThe holder proved control by signing with the wallet; identity, aml and business on the certificate say what else was checked.Positive
warningNot verified, but it looks like a verified wallet (lookalikes). A strong sign of address poisoning.Warning: ask the user to check every character
riskVerified, but the wallet's latest AML screening was flagged.Caution
revokedIt had a certificate, since revoked.Neutral, or say "certificate revoked"
unknownWe know nothing about it. That isn't a bad sign, only that the owner hasn't verified with us.Show your own "not found" as usual

summary is a plain sentence written for end users. You're welcome to show it as it is.

Example: add it to your results

// Browser or server. Falls back quietly if we're unreachable.
async function verifiedWalletLookup(address) {
  try {
    const res = await fetch(`https://verifiedwallet.io/api/check/${encodeURIComponent(address)}`);
    if (!res.ok) return null;
    const r = await res.json();
    if (r.verdict === "unknown") return null;
    return {
      label: r.verdict === "business" ? `Verified company: ${r.directory.company}` : r.summary,
      tone: { business: "good", verified: "good", warning: "bad", risk: "bad", revoked: "neutral" }[r.verdict],
      link: r.certificates[0]?.url || `https://verifiedwallet.io/check?address=${encodeURIComponent(r.address)}`,
      lookalikes: r.lookalikes,
    };
  } catch {
    return null;
  }
}
# Python (server side)
import json, urllib.parse, urllib.request

def verifiedwallet_lookup(address):
    url = "https://verifiedwallet.io/api/check/" + urllib.parse.quote(address, safe="")
    try:
        with urllib.request.urlopen(url, timeout=5) as res:
            r = json.load(res)
    except Exception:
        return None
    return None if r["verdict"] == "unknown" else r

Showing it to your users

  • Credit us and link through. Use "Verified by VerifiedWallet" (or the badge below) and link to the certificate's url, so your user can check the signatures themselves.
  • Say what it is, not more. A certificate shows who controls a wallet and what was checked. It isn't a statement that a payment is safe, or that the holder is regulated or solvent, so please don't present it as one.
  • Show warnings clearly. If the verdict is warning, tell the user the address looks like a verified one but isn't it, and show the lookalike so they can compare.
  • Keep it fresh. Cache for a few minutes at most: certificates can be revoked, and screening results change.

Verified by VerifiedWallet

<a href="CERTIFICATE_URL" target="_blank" rel="noopener">
  <img src="https://verifiedwallet.io/img/verified-by-vw.svg" alt="Verified by VerifiedWallet" width="232" height="32">
</a>

Other ways to read our register

  • Business directory: GET /api/directory lists every listed company wallet, if you'd rather keep a local copy and refresh it daily.
  • EAS on Base: every certificate is also an Ethereum Attestation Service attestation. If you already read EAS, look for attestations from our signer (published at /api/attester).
  • One certificate: GET /api/cert/<id> returns the signed record, to check offline.
  • Your users verifying through you: if you'd like to send people to verify their wallet with us from your site, see the Verify API.

Working together

Fair use is free for everyone. If you'd like higher volumes, a data feed, or to send verification requests our way and receive yours in return, get in touch. Questions about the integration: developer support.