> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shieldlabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Visitor identification & abuse-prevention docs

> One JavaScript snippet returns a persistent VisitorID and DeviceID plus an explainable Risk Score your code acts on — up to 99% accuracy, API-first.

<div className="sl-home">
  <section className="sl-hero">
    <div>
      <h1 className="sl-hero-title">Identify every visitor,<br /><span className="sl-brand">masked or not</span></h1>
      <p className="sl-hero-sub">One snippet identifies every visitor at any level of anonymity with up to 99% accuracy, so you can assess traffic quality and prevent abuse and fraud. Integration takes about 5 minutes.</p>

      <div className="sl-cta">
        <a className="sl-btn sl-btn-primary" href="/quickstart">Get started</a>
        <a className="sl-btn sl-btn-ghost" href="/api/overview">Explore the API</a>
      </div>

      <p className="sl-strip">Easy integration · API and webhooks</p>
    </div>

    <div className="sl-hero-visual">
      <div className="sl-score-card">
        <div className="sl-score-section">Identification</div>
        <div className="sl-score-row"><span className="sl-score-key">RequestID</span><span className="sl-score-val">550e…0000</span></div>
        <div className="sl-score-row"><span className="sl-score-key">SessionID</span><span className="sl-score-val">7a1b…6789</span></div>
        <div className="sl-score-row"><span className="sl-score-key">CookieID</span><span className="sl-score-val">3f2e…7654</span></div>
        <div className="sl-score-row"><span className="sl-score-key">DeviceID</span><span className="sl-score-val">d290…0851</span></div>
        <div className="sl-score-row"><span className="sl-score-key">VisitorID</span><span className="sl-score-val">161d…8d57</span></div>
        <div className="sl-score-row"><span className="sl-score-key">UserHID</span><span className="sl-score-val">e3b0…b924</span></div>
        <div className="sl-score-row"><span className="sl-score-key">Country</span><span className="sl-score-val">US</span></div>
        <div className="sl-score-section">Signals</div>
        <div className="sl-score-row"><span className="sl-score-key">VPN</span><span className="sl-score-pts">+15</span></div>
        <div className="sl-score-row"><span className="sl-score-key">Anti-detect Browser</span><span className="sl-score-pts">+60</span></div>
        <div className="sl-score-row sl-score-total"><span className="sl-score-key">Risk Score</span><span className="sl-score-val sl-score-big">75<span className="sl-badge-high">HIGH</span></span></div>
      </div>
    </div>
  </section>

  <section className="sl-section">
    <h2 className="sl-h2">A complete solution</h2>
    <p className="sl-lead">One snippet for personalization, traffic quality, and preventing abuse and fraud.</p>

    <CardGroup cols={3}>
      <Card title="Identification" icon="fingerprint" href="/features/identification">
        Identify returning visitors and signed-in users across cookies, IP changes, and incognito.
        <div className="sl-pills"><span className="sl-pill">Persistent ID</span><span className="sl-pill">Returning visitors</span><span className="sl-pill">Browser</span><span className="sl-pill">Device type</span><span className="sl-pill">OS</span></div>
      </Card>

      <Card title="Anonymity Signals" icon="mask" href="/features/anonymity-signals">
        Catch the masking that IP blocklists miss: datacenter IPs, privacy relays, geolocation spoofing, and IP reputation.
        <div className="sl-pills"><span className="sl-pill">VPN</span><span className="sl-pill">Proxy</span><span className="sl-pill">Tor</span><span className="sl-pill">Anti-detect</span><span className="sl-pill">+ more</span></div>
      </Card>

      <Card title="Risk Scoring" icon="gauge" href="/features/risk-scoring">
        A ready-to-use risk model that scores every visit 0-100 with a signal breakdown.
        <div className="sl-pills"><span className="sl-pill">0-100</span><span className="sl-pill">Details</span></div>
      </Card>

      <Card title="Patterns" icon="diagram-project" href="/features/patterns">
        Relationship patterns that link accounts, devices, and IPs over time, grading coordinated abuse on the dashboard.
        <div className="sl-pills"><span className="sl-pill">Multi-accounting</span><span className="sl-pill">Account sharing</span><span className="sl-pill">+ more</span></div>
      </Card>

      <Card title="Traffic Analytics" icon="chart-line" href="/features/traffic-analytics">
        Rank every traffic source by how much anonymous traffic it sends.
        <div className="sl-pills"><span className="sl-pill">Channels</span><span className="sl-pill">Sources</span><span className="sl-pill">UTM</span><span className="sl-pill">Quality score</span></div>
      </Card>
    </CardGroup>
  </section>

  <section className="sl-section">
    <h2 className="sl-h2">Start by use case</h2>
    <p className="sl-lead">Each recipe is a worked, copy-pasteable flow built from the same identity and score.<br /><a href="/use-case">View all use cases</a></p>

    <div className="sl-uc-theme">Protect your users</div>

    <CardGroup cols={3}>
      <Card title="Account Takeover" icon="user-shield" href="/use-case/account-takeover">
        Flag a new device and country on an established account before a sensitive action.
      </Card>

      <Card title="Credential Stuffing" icon="key" href="/use-case/credential-stuffing">
        Tell a spray of scripted logins apart from your real returning users.
      </Card>

      <Card title="Login and 2FA" icon="lock" href="/use-case/step-up-authentication">
        Skip friction for known devices, step up only when a login looks anonymized.
      </Card>
    </CardGroup>

    <div className="sl-uc-theme">Grow your revenue</div>

    <CardGroup cols={3}>
      <Card title="New Account Fraud" icon="user-plus" href="/use-case/new-account-fraud">
        Catch one device or local IP opening many fresh accounts at signup.
      </Card>

      <Card title="Promo Abuse" icon="ticket" href="/use-case/promo-abuse">
        Stop multi-accounting from draining coupons and signup bonuses.
      </Card>

      <Card title="Account Sharing" icon="users" href="/use-case/account-sharing">
        Spot one account spreading across many devices and countries over time.
      </Card>

      <Card title="Paywall Enforcement" icon="newspaper" href="/use-case/paywall">
        Recognize the same visitor past cleared cookies and incognito.
      </Card>

      <Card title="Regional Pricing" icon="globe" href="/use-case/regional-pricing">
        Catch VPNs and proxies used to reach a cheaper region's price.
      </Card>

      <Card title="Returning Visitor" icon="user-check" href="/use-case/returning-visitor">
        Recognize a trusted device on return and spare it repeated checks.
      </Card>
    </CardGroup>

    <div className="sl-uc-theme">Protect your platform</div>

    <CardGroup cols={3}>
      <Card title="Ban Enforcement" icon="ban" href="/use-case/ban-evasion">
        Keep a banned device out even after a reinstall or a fresh account.
      </Card>

      <Card title="Chargeback Dispute" icon="file-invoice-dollar" href="/use-case/chargeback-fraud">
        Attach device evidence to a transaction for your dispute response.
      </Card>

      <Card title="Affiliate Fraud" icon="link" href="/use-case/affiliate-fraud">
        Rank affiliate sources by the anonymous, self-referred traffic they send.
      </Card>

      <Card title="Traffic Quality" icon="chart-line" href="/use-case/traffic-quality">
        Score each channel by the real-versus-anonymous traffic it delivers.
      </Card>

      <Card title="Checkout" icon="cart-shopping" href="/use-case/payment-fraud">
        Add friction at payment only when a visit looks anonymized or risky.
      </Card>
    </CardGroup>
  </section>

  <section className="sl-api">
    <input type="radio" name="sl-api-tab" id="sl-t1" className="sl-api-tab-in" defaultChecked />

    <input type="radio" name="sl-api-tab" id="sl-t2" className="sl-api-tab-in" />

    <input type="radio" name="sl-api-tab" id="sl-t3" className="sl-api-tab-in" />

    <div className="sl-api-left">
      <h2 className="sl-api-title">Built for easy integration</h2>
      <p className="sl-api-text">The JavaScript snippet, the Server API, and webhooks. ShieldLabs returns the data; your own code makes every decision.</p>

      <div className="sl-tablist">
        <label htmlFor="sl-t1" className="sl-tab">JavaScript snippet</label>
        <label htmlFor="sl-t2" className="sl-tab">Server API</label>
        <label htmlFor="sl-t3" className="sl-tab">Webhooks</label>
      </div>

      <div className="sl-cta">
        <a className="sl-btn sl-btn-primary" href="/api/overview">See the full API</a>
      </div>
    </div>

    <div className="sl-api-right">
      <div className="sl-panel sl-p1">
        <pre className="sl-code">
          {`const mod = await import(
                    'https://cdn.shieldlabs.ai/snippet.js?publicKey=YOUR_PUBLIC_KEY'
                    );
                    mod.checkAnonymous();`}
        </pre>

        <ul className="sl-check">
          <li>Identify visitors in the browser, up to 99% accuracy</li>
          <li>Works with React, Vue, Svelte, Angular, and plain JS</li>
          <li>One ES module from the CDN, no npm package</li>
        </ul>

        <a className="sl-tab-link" href="/setup/snippet">Read the snippet docs ›</a>
      </div>

      <div className="sl-panel sl-p2">
        <pre className="sl-code">
          {`curl "https://account.shieldlabs.ai/api/v1/history/request_id/550e8400-..." \\
                    -H "Authorization: Bearer sec_your_private_api_key"`}
        </pre>

        <ul className="sl-check">
          <li>Read scored snapshots server-side by request\_id</li>
          <li>Authenticate with your Private API Key from the dashboard</li>
          <li>Guaranteed fallback when a webhook is missed</li>
        </ul>

        <a className="sl-tab-link" href="/api/server-api">Read the Server API docs ›</a>
      </div>

      <div className="sl-panel sl-p3">
        <pre className="sl-code">
          {`POST /your/webhook
                    X-Shield-Signature: sha256=<hmac>
                    {
                    "request_id": "550e8400-...",
                    "risk_score": 70,
                      "signals": [...],
                    "observed_at": "2026-06-16T18:00:45Z"
                    }`}
        </pre>

        <ul className="sl-check">
          <li>Pushed to your backend in about a second</li>
          <li>Verify X-Shield-Signature on the raw body</li>
          <li>At-most-once, so make your handler idempotent</li>
        </ul>

        <a className="sl-tab-link" href="/setup/webhooks">Read the webhook docs ›</a>
      </div>
    </div>
  </section>

  <section className="sl-section">
    <h2 className="sl-h2">Keep going</h2>

    <CardGroup cols={3}>
      <Card title="Quickstart" icon="rocket" href="/quickstart">
        Install the snippet and read your first Risk Score in about 5 minutes.
      </Card>

      <Card title="Troubleshooting" icon="wrench" href="/troubleshooting">
        No webhook, no signals, or a score you did not expect? Start here.
      </Card>

      <Card title="Changelog" icon="clock-rotate-left" href="/changelog">
        What shipped recently across the snippet, the score, and the dashboard.
      </Card>
    </CardGroup>
  </section>
</div>
