Backend and smart-contract engineers · ships in 10 minutes

How to check if a wallet is a sybil (API)

You need a yes/no signal on whether an address belongs to a real, unique human before you let it in.

The problem

Wallet age, balance and transaction count are all trivially farmable. A sybil operator spins up 10,000 addresses, warms them with cheap on-chain noise, and your heuristics wave them through. What is not farmable is a graph of mutual, signed attestations between people who actually know each other.

Step by step

  1. 1. Get a free API key

    Connect a wallet on the developer page and a Starter key is issued instantly — 60 requests per minute, no card.

    export TRUSTLAYER_KEY="tl_live_your_key"
  2. 2. Call the verify endpoint

    One request returns the score, the vouch count and how many distinct humans have interacted with that address.

    curl -s https://api.trstlyr.com/v1/verify \
      -H "x-api-key: $TRUSTLAYER_KEY" \
      -H "content-type: application/json" \
      -d '{"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}'
  3. 3. Read the signal

    trust_score is 0-100. proof_count is how many signed vouches exist. unique_interactions is the size of the distinct human set behind them. Sybil farms score low on the last two no matter how much on-chain noise they buy.

    {
      "found": true,
      "trust_score": 78,
      "proof_count": 34,
      "unique_interactions": 21,
      "tier": "verified"
    }
  4. 4. Gate your flow

    Pick a threshold per risk level: 20 for read access, 40 for posting, 60+ for money movement.

    const r = await fetch("https://api.trstlyr.com/v1/verify", {
      method: "POST",
      headers: { "x-api-key": process.env.TRUSTLAYER_KEY!, "content-type": "application/json" },
      body: JSON.stringify({ address }),
    });
    const { trust_score, unique_interactions } = await r.json();
    const isLikelySybil = trust_score < 40 || unique_interactions < 5;

Share the proof

Once you are live, show it. This badge stays up to date on its own and links visitors back to the verifiable profile behind the score.

<a href="https://trstlyr.com/u/your-handle">
  <img src="https://trstlyr.com/badge/your-handle.svg" alt="Verified on TrustLayer" height="28" />
</a>

Frequently asked questions

Next recipes

All 6 recipes are on the API recipes index.