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

# Age Estimation Webhooks

> Receive age estimation results via HTTP POST webhook callbacks from iDenfy, with signed payloads and idempotent delivery.

When a session reaches a terminal state, a result notification is sent to your endpoint.

## Where It's Sent

iDenfy resolves the destination in this order:

1. The token's `webhook_url`, if set (per-session override).
2. Otherwise, the webhook URL configured on your account's **Age Estimation** notification (notification event type `AGE_ESTIMATION`) -- this is the default used when a token has no `webhook_url`.
3. If neither is configured, no notification is sent -- the result is still available via the API.

If your Age Estimation notification is configured with a signing key, the webhook body is signed so you can verify authenticity. See [Callback Signing](/security/callback-signing).

## Payload

<Note>
  The [**API Reference**](/api-reference/age-estimation/age-estimation-result) page for this webhook isn't published yet. Once Age Estimation is released, it will appear there automatically with the full schema -- no further changes needed on this page.
</Note>

| Field          | Type            | Description                                                                                                                                   |
| -------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `scanRef`      | string          | The step-up scan reference, or the token id when there is no scan ref.                                                                        |
| `status`       | enum            | `COMPLETED` or `FAILED`.                                                                                                                      |
| `outcome`      | enum \| null    | See [Enumerations](/age-estimation/overview#enumerations).                                                                                    |
| `verdict`      | string \| null  | Model verdict (e.g. `ADULT`).                                                                                                                 |
| `estimatedAge` | integer \| null | The established age. When a document step-up produced an age, that exact document age is reported; otherwise it is the AI face-estimated age. |
| `confidence`   | float \| null   | Model confidence.                                                                                                                             |
| `clientId`     | string \| null  | The `client_id` supplied at creation.                                                                                                         |
| `occurredAt`   | datetime        | When the terminal event occurred.                                                                                                             |

<Note>
  The notification does not distinguish a document that was accepted cleanly from one that was accepted but flagged for possible fraud -- both report the same outcome.
</Note>

## Idempotency

Delivery may be retried, so handle notifications idempotently (e.g. keyed on `scanRef` / `clientId`).


## Related topics

- [Create session](/api-reference/age-estimation/create-session.md)
- [Age Estimation](/guides/dashboard/age-estimation/age-estimation.md)
- [Age estimation result](/api-reference/webhooks/age-estimation-result.md)
- [Age Verification](/guides/dashboard/kyc/age-verification.md)
