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

# Handle a resubmission

> What to show a person asked to try again, and how to follow the second attempt.

A verification moves to `resubmission_requested` when the images were not good enough to decide: a blurry document, glare, a face not fully in the frame. Nothing is wrong with the person; they need to retake something. On a facial age estimation it also means the selfie couldn't confirm 18+ and the person is asked to add an ID; that webhook has `reason: null`.

## What happens

1. The webhook arrives with `status: resubmission_requested` and a `reason` such as `document.front.glare.high`, or `reason: null` when a facial age estimation asks for an ID.
2. The widget, still open or reopened from the same `url`, tells the person what to retake. A new attempt starts in the same verification.
3. The next submission is decided as usual, and another webhook follows: `approved`, `declined`, or another `resubmission_requested`.
4. Attempts are limited. When they run out the verification is `declined`, and its `reason` is the last attempt's reason, which can be one from the table below. Treat `declined` as final whatever the code: don't show a retry prompt.

## What to do

* **Nothing blocking.** Do not treat `resubmission_requested` as a failure, and do not create a new verification: send the person back to the same `url`.
* **If the person left**, remind them with a link to the same verification. After seven days without progress it becomes `abandoned`; then create a new one.
* **If you show your own message**, map the [reason](/core-technology/decision-reasons) to plain words, and handle `null` as "add an identity document":

| Reason starts with | Tell the person |
| - | - |
| `document.front.glare`, `document.back.glare` | Avoid reflections on the document. |
| `document.front.blur`, `document.back.blur` | Hold the document still, in focus. |
| `document.front.framing`, `document.back.framing` | Fit the whole document in the frame. |
| `document.expired` | Use a document that has not expired. |
| `selfie.face`, `selfie.framing` | Show your whole face in the frame. |
| `selfie.quality` | Retake the selfie in even light, facing the camera. |

If you capture in [your own UI](/integration/web/custom-ui), your app runs the retake itself: upload the new images and submit again, in the same verification.


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