# identification.completed

> Sent for every identification that finishes, with the visitor, the confidence, the score and your tag.

Last updated: 2026-09-17

```http
POST https://your-server.example.com/webhooks/fingerly
```

Authentication: Signed by Fingerly (`x-fingerly-signature`)

Sent once for every identification your SDKs complete, whatever its score. Use it to keep your own copy of results, or to act on visitors without polling.

> **Note:** Verify the signature before you parse the body, and answer `2xx` within 10 seconds. See [webhooks](https://docs.fingerly.io/docs/webhooks#verify-the-signature).

## Body

- `id` (string): The event's ID, a UUIDv7. The same on every retry: deduplicate on it. Also sent as `X-Fingerly-Event-ID`.
- `type` (string): Always `identification.completed`.
- `version` (integer): The envelope version, `1`.
- `organization_id` (string): Your organization.
- `environment` (string): `live` for production traffic, `test` for staging and development.
- `created_at` (string): When the underlying fact happened, RFC 3339 in UTC. Not when it was delivered.
- `data` (object): The identification.
  - `request_id` (string): The identification's request ID.
  - `sdk_key_id` (string): The public key that submitted it.
  - `visitor_id` (string): The visitor.
  - `visitor_is_new` (boolean): Whether the visitor is new to your organization.
  - `identifiable` (boolean): Whether the device could be identified.
  - `confidence` (integer): The visitor confidence, 0 to 100.
  - `state` (string): `enriched` or `unavailable`.
  - `reason` (string): Why the state is `unavailable`. Empty otherwise.
  - `score` (integer | null): The suspect score. `null` when not scored.
  - `level` (string | null): `low`, `medium` or `high`. `null` when not scored.
  - `tag` (string): Your tag. Empty when none was sent.

The signals behind the score are not repeated here. Read them with [Get an event](https://docs.fingerly.io/reference/get-event), or subscribe to [`visitor.suspect`](https://docs.fingerly.io/reference/webhooks/visitor-suspect), which includes them.

## Headers

```http Headers
POST /webhooks/fingerly HTTP/1.1
Content-Type: application/json
User-Agent: Fingerly-Webhooks/1.0
X-Fingerly-Event-ID: 01a0a851-0c4e-7f23-b8d1-6e2f94c0a7b5
X-Fingerly-Event-Type: identification.completed
X-Fingerly-Timestamp: 1789551672
X-Fingerly-Signature: sha256=6f1c0a3e9b…
```

## Payload

```json Body
{
  "id": "01a0a851-0c4e-7f23-b8d1-6e2f94c0a7b5",
  "type": "identification.completed",
  "version": 1,
  "organization_id": "01a0a7f2-3c18-7b40-8d2e-5f6a9b1c0d37",
  "environment": "live",
  "created_at": "2026-09-16T09:41:12Z",
  "data": {
    "request_id": "01a0a84b-e6a2-7c09-9f51-0b3d7a26c8e4",
    "sdk_key_id": "01a0a7f3-9e05-7a61-b4c7-2d8e0f3a6b19",
    "visitor_id": "X9pL2mRc7KvT4bQw8NdF",
    "visitor_is_new": false,
    "identifiable": true,
    "confidence": 100,
    "state": "enriched",
    "reason": "",
    "score": 37,
    "level": "high",
    "tag": "checkout:8412"
  }
}
```
