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

# Duplicate detection

> Finds the same face behind a different account in your workspace.

One person opening several accounts, to claim a bonus twice or to come back after a ban, shows up as the same face under different `external_id`s. Duplicate detection compares each new selfie with the faces already verified in the workspace and tells you when it finds a match.

## When it runs

Duplicate detection runs when the workspace's **Allow duplicate accounts** setting is **off**:

| Workspace type | Duplicate detection |
| - | - |
| Identity (KYC) | Yes, when duplicate accounts are not allowed |
| Age verification by ID document | Yes, when duplicate accounts are not allowed |
| Facial age estimation | Yes, when duplicate accounts are not allowed |

Allow duplicate accounts is **on** by default, which turns the check off. Turn it off in the workspace settings if one person should have one account.

It compares faces within the workspace and against verifications of other people: a face returning under the **same** `external_id` is the same account verifying again, not a duplicate. Test workspaces do not run it.

## It reports, you decide

Finding a duplicate does not decline the verification: the verification is decided on its own checks, and the duplicate is reported next to the decision. What to do with it depends on your business, so the decision is yours: refuse the new account, link it to the old one, or send it to your own review.

## In the API and the webhook

The verification's `duplicate_check`:

```json theme={null}
{
  "checked": true,
  "duplicate_count": 1,
  "duplicates": [
    {
      "verification_id": "771a9200-c3df-4e88-b201-112233445566",
      "external_id": "user_987",
      "similarity_score": 0.91,
      "verified_at": "2026-08-14T09:12:44+00:00"
    }
  ]
}
```

`checked` is `false` when the check did not run. The webhook carries a shorter form, present only when a duplicate was found:

```json theme={null}
{
  "duplicate_detected": true,
  "duplicate_count": 1,
  "duplicate_of": { "verification_id": "771a9200-c3df-4e88-b201-112233445566", "external_id": "user_987" }
}
```

## Reasons

None: a duplicate never sets `reason`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.