> ## 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.

# Redirect to the hosted page

> Send the person to the verification URL and bring them back to your site afterwards.

The simplest integration needs no JavaScript: send the person to the verification's `url`, and they come back to your site when they are done.

## Send the person

Your backend creates the verification with a signed `POST /v1/verifications` and gets back its `url`, of the form `https://idv.proofage.net/v/{token}`. Redirect the person's browser to it, or put it behind a link or a button.

```php Laravel theme={null}
$verification = ProofAge::verifications()->create([
    'external_id' => (string) $user->id,
    'callback_url' => route('verification.done'),
]);

return redirect()->away($verification['url']);
```

The hosted page does everything: consent, camera, capture, retakes, the move to a phone by QR code, and 28 languages.

## Bring them back

About three seconds after the final screen, the page sends the browser to the verification's redirect URL:

1. the `callback_url` you passed when creating the verification, or
2. the workspace's **Redirect URL**, set in the console.

A new workspace's Redirect URL is a ProofAge page, so set one of the two. The URL is used as is: nothing is added to it. Put what you need to recognise the person in it yourself, for example `https://yourapp.example/verified?order=1234`.

When the person moved to their phone by QR code, the phone does not redirect: it tells them to return to the browser where they started, where the original page continues.

## The return is not the result

The final screen, and the redirect after it, are the same whether the person was approved or declined. Do not treat the return as a pass. On the page they come back to:

* read the outcome from your own records, updated by the [webhook](/integration/webhooks), or
* fetch it with `GET /v1/verifications/{id}` from your backend.

If the decision is not in yet, for example because the verification went to `review`, show a "we're checking" state and update when the webhook arrives.

## Link lifetime

A verification link that nobody starts expires after seven days; one that was started and then left idle is abandoned after seven days. Create a new verification if the person comes back later. See [Verification statuses](/integration/verification-statuses).


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