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

# SpoofSense: Face Liveness & Deepfake Detection API

> SpoofSense detects presentation attacks and AI-generated deepfakes in real time. One API call returns a calibrated score and a pass/fail decision.

Welcome to SpoofSense. SpoofSense tells you whether a face in an image belongs to a **real, live person** — not a printed photo, a screen replay, a mask, or an AI-generated deepfake. You send one image, and a single API call returns a calibrated `genuine_score` and a clear pass/fail `decision` so you can act on the result immediately.

<CardGroup cols={2}>
  <Card title="Face Liveness Detection" icon="user-check" href="/quickstart">
    Passive liveness from a single frame — catches presentation attacks such as printed photos, screen replays, and masks. No blink or turn challenges required.
  </Card>

  <Card title="Deepfake Detection" icon="shield-halved" href="/quickstart">
    Detects AI-generated and face-swapped imagery that can fool a conventional liveness check.
  </Card>

  <Card title="Verification Sessions" icon="mobile-screen-button" href="/verification-sessions/overview">
    Capture selfies directly from the camera using our Web and Android SDKs, with built-in injection-attack protection and server-side score handling.
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference">
    Every endpoint, parameter, and response field — fully documented and ready to explore.
  </Card>
</CardGroup>

## How It Works

Every check returns a calibrated `genuine_score` between 0 and 1. SpoofSense applies the following decision rule:

```text theme={null}
decision = genuine_score > threshold      (default threshold: 0.5)
```

A score above the threshold yields `decision: "real"`; at or below it yields `decision: "spoof"`. The score is calibrated so the decision boundary always sits at 0.5 across model updates — a threshold you tune today keeps meaning the same thing after a retrain. You can raise or lower the threshold to trade off false-accept rate against false-reject rate for your use case.

## Three Ways to Integrate

SpoofSense meets you wherever you are in your stack. Choose the integration path that fits your workflow:

<CardGroup cols={3}>
  <Card title="Detection API" icon="bolt" href="/quickstart">
    Already have the image? `POST` it to `/v1/liveness_detection`, `/v1/deepfake_detection`, or `/v1/unified_detection` and get a decision back in one round trip.
  </Card>

  <Card title="Verification Sessions + SDKs" icon="camera" href="/verification-sessions/overview">
    Verifying a live user? Our Web and Android SDKs capture the selfie from the camera, protect against injection attacks, and keep scores away from the untrusted client.
  </Card>

  <Card title="Hosted Page" icon="browser" href="/verification-sessions/hosted">
    Zero frontend code required: redirect the user to our hosted capture page, or embed it in an iframe.
  </Card>
</CardGroup>

## Get Started in Minutes

<Steps>
  <Step title="Create an Account">
    Go to [app.spoofsense.ai](https://app.spoofsense.ai) and sign up. Every new organization starts with free trial credits — no credit card required to explore the API.
  </Step>

  <Step title="Create an API Key">
    In the dashboard, navigate to **Dashboard → API keys** and create a new key. Keys look like `sk_live_…` and are shown **once**, so copy it somewhere safe before closing the dialog.
  </Step>

  <Step title="Make Your First Call">
    With your key in hand, send a face image to the liveness endpoint:

    ```bash theme={null}
    curl -X POST https://api.spoofsense.ai/v1/liveness_detection \
      -H "Authorization: Bearer $SPOOFSENSE_API_KEY" \
      -F "file=@selfie.jpg"
    ```

    You'll receive a `decision`, a `genuine_score`, and everything else you need to act on the result — all in a single response.
  </Step>
</Steps>

<Note>
  Want a complete walkthrough including code samples in multiple languages and an explanation of every response field? Head to the [Quickstart](/quickstart).
</Note>
