Skip to content
Reputation API

Query any wallet's proof of reputation.

One GET returns the evidence behind a wallet: score, tier, proofs, counterparties, attestations, risk. Read-only, no key, CORS-open — built for browsers.

View endpoint
GET/api/reputation/{address}
200 · 38 ms
{  "address": "0xa6d9e296e6833d211278faf255c76ed193c9ac19",  "walletAgeDays": 16,  "uniqueCounterparties": 9,  "repeatCounterparties": 3,  "attestations": 0,  "activeDisputes": 0,  "riskSignals": [    {      "type": "concentrated_counterparty_graph",      "severity": "low",      "evidence": {        "topCounterparty": "0x953f4734e8173871e67450844acb3f3c8b684d8a",        "topInteractions": 14,        "counterpartyInteractions": 25,        "share": 0.56,        "threshold": 0.5      },      "evidence_reference": "https://explorer.testnet.chain.robinhood.com/address/0xa6d9e296e6833d211278faf255c76ed193c9ac19",      "detected_at": "2026-09-27T13:38:34.041Z"    }  ],  "riskLevel": "low",  "proofs": [    {      "type": "wallet_age",      "source": "blockscout",      "subject": "0xa6d9e296e6833d211278faf255c76ed193c9ac19",      "value": {        "ageDays": 15,        "firstTxAt": "2026-09-11T05:53:10.000Z"      },      "timestamp": "2026-09-26T15:07:00.225Z",      "confidence": 0.7,      "verification_method": "derived",      "evidence_reference": "https://explorer.testnet.chain.robinhood.com/tx/0x39e3492c77913c1a48fb3542273a460fb2f23c7033e7fd98cfab52d8b2bea3e5",      "evidence_references": [        "https://explorer.testnet.chain.robinhood.com/tx/0x39e3492c77913c1a48fb3542273a460fb2f23c7033e7fd98cfab52d8b2bea3e5"      ]    },    {      "type": "transaction_history",      "source": "blockscout",      "subject": "0xa6d9e296e6833d211278faf255c76ed193c9ac19",      "value": {        "txCount": 33      },      "timestamp": "2026-09-26T15:07:00.225Z",      "confidence": 1,      "verification_method": "indexed",      "evidence_reference": "https://explorer.testnet.chain.robinhood.com/tx/0xdeef8c8ef4c2d83d36497328def1188e097ebe47a95ac9280613bcb8e7d5e9c6",      "evidence_references": [        "https://explorer.testnet.chain.robinhood.com/tx/0xdeef8c8ef4c2d83d36497328def1188e097ebe47a95ac9280613bcb8e7d5e9c6",        "https://explorer.testnet.chain.robinhood.com/tx/0xbdb94c0ff99674b7f8e6231c6d1b60b5459f9a77f6385bbb038f7cc86ad2b740",        "https://explorer.testnet.chain.robinhood.com/tx/0x59ccc585a3e1e7357f66a444d55549c40530425d491b73a168c4fbc115141c24",        "https://explorer.testnet.chain.robinhood.com/tx/0x5f8aed0eefc23e6c7bb584b15754af8b665b37c3335813459cd707c7be6a16cf",        "https://explorer.testnet.chain.robinhood.com/tx/0x45e781c5ba358ca824aa2653335f19e2cbe2ee6570a32311242ee7add57bacd2"      ]    }  ],  "claim": null,  "vouches": [],  "vouchesCount": 0,  "dimensions": [    {      "id": "economic_history",      "label": "Economic History",      "proofTypes": [        "wallet_age",        "transaction_history",        "economic_history"      ],      "reason": null,      "status": "supported"    },    {      "id": "counterparty_history",      "label": "Counterparty History",      "proofTypes": [        "unique_counterparty",        "repeat_counterparty"      ],      "reason": "No counterparty relationship evidence exists for this wallet yet.",      "status": "supported"    },    {      "id": "contract_history",      "label": "Contract History",      "proofTypes": [        "contract_history"      ],      "reason": "No contract counterparty evidence exists for this wallet yet.",      "status": "supported"    },    {      "id": "community_trust",      "label": "Community Trust",      "proofTypes": [        "role_attestation"      ],      "reason": "No structured attestation evidence exists for this wallet yet.",      "status": "unsupported"    },    {      "id": "risk_signals",      "label": "Risk Signals",      "proofTypes": [],      "reason": "No risk signal could be evaluated for this wallet yet.",      "status": "supported"    }  ],  "score": 130,  "tier": {    "id": "new",    "label": "New",    "minScore": 0,    "maxScore": 249  },  "formulaVersion": "1.1.0-provisional",  "completeness": "complete"}
  • Access

    Read-only

  • Auth

    No API key

  • Browsers

    CORS-open

  • Edge cache

    60 seconds

  • Coverage

    Robinhood Testnet

01 · Playground

Send a request, see the evidence.

Real calls against Robinhood Testnet. Try the sample, an invalid address, or an unknown wallet — each shows what the API actually returns.

GET/api/reputation/{address}
curl -s "https://fathom-xi-bice.vercel.app/api/reputation/0x71c4e2a9b30d18f6a5e7c4b2d91f04a83b6c4a3f" \  -H "accept: application/json"
Ready · edge cache 60s

No response yet

Send a request — the card fills with the wallet's real evidence.

02 · Endpoint

One route, one wallet.

No endpoints per resource, no pagination, no keys. The wallet address is the only parameter — replace the path segment and go.

GETrequest.http
GET /api/reputation/{address}

Addresses are matched case-insensitively and normalized to lowercase. Unknown wallets still return 200 — fields that cannot be evaluated are null, never fabricated.

03 · Response fields

Click any field to decode it.

Seventeen fields, two honest null rules: null means unknown, and a confirmed zero is a real zero.

response.json — 17 fields

Field 1 of 17

address

stringnever null

Lowercase wallet address — the identity this whole object describes.

null means unknown. Never treat it as zero.

04 · Errors

Errors that tell you why.

Three failure modes, one shape. Click a card to see its exact body.

error.json
{  "error": {    "code": "invalid_address",    "message": "Address must be a valid EVM address."  }}

Always this shape. Never a stack trace.

05 · Limits & notes

Read before you ship.

Four things that keep integrations honest.

  • No key, no enforced limits

    No API key required. No rate limits yet — be reasonable, responses cache at the edge for 60 seconds.

  • Testnet only

    Coverage is Robinhood Chain Testnet (chain 46630). Scores reset between testnet and mainnet.

  • A score is not a verdict

    The number is provisional compression over evidence. Surface proofs and risk signals in your own UI before users act on it.

  • Null is not zero

    Fields that cannot be evaluated return null. Treat unknown as unknown — never as a confirmed zero.

06 · Build with it

What you can build.

Three lines each — badge, gate, check. All read-only, all from the same response.

Wallet badge

Show the tier label anywhere a wallet appears.

app.js
const badge = profile.tier?.label ?? "Unrated";

Access gate

Let wallets with enough peer attestations into gated spaces.

app.js
const allowed = profile.attestations >= 3;

Pre-trade check

Surface open disputes before a trade, never after.

app.js
const blocked = profile.activeDisputes > 0;

07 · Changelog

The formula tells you what changed.

Every response carries formulaVersion, so your integration can react to calibration changes.

  1. 1.1.0-provisional

    Added riskLevel and vouchesCount; conservative calibration floors.

  2. 1.0.0

    Initial public shape: score, tier, proofs, dimensions, completeness.

Check a wallet before you trust it.

Paste any address — the playground above runs it for real.