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

# Step-Up Hook Failed

The `step_up.hook_failed` event is triggered when Prelude calls your
[step-up delegation hook](/auth/documentation/step-up-hook) and the call
cannot be completed successfully. Use this event to monitor the health of
your delegation endpoint and alert on outages or misconfiguration.

## Failure reasons

The `reason` field identifies the precise rule that failed. It is one of
the following values:

### Transport-level

| Reason                | Description                                                                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `request_failed`      | The HTTP request to your delegation hook could not be completed (DNS failure, connection refused, TLS error, timeout exceeding 5 seconds, etc.). |
| `invalid_status_code` | The hook returned a non-2xx HTTP status code.                                                                                                    |

### Response-level

The following reasons are emitted when the hook returns 200 but the body
does not match the [expected response schema](/auth/documentation/step-up-hook#hook-response):

| Reason                   | Description                                                                                                                                            |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `response_decode_failed` | The response body could not be parsed as JSON (malformed JSON, wrong content type, body exceeding the 64 KB limit, etc.).                              |
| `invalid_status`         | The `status` field was missing or not one of `continue`, `review`, or `block`.                                                                         |
| `missing_steps`          | The response had `status: "review"` but no `steps` were provided.                                                                                      |
| `invalid_granted_for`    | `granted_for` was negative, exceeded the 24-hour maximum (86,400 seconds), or was zero for a `grant_mode` that requires a positive duration.           |
| `invalid_grant_mode`     | `grant_mode` was missing or not one of `single-use`, `session-bound`, or `profile-bound`.                                                              |
| `invalid_step`           | One of the `steps` had an invalid `key` (must match `[a-zA-Z0-9._:-]+`) or an `expiration_duration` that was negative or exceeded the 24-hour maximum. |
| `invalid_response`       | Fallback emitted when the response is invalid but does not match any of the more specific reasons above.                                               |

## Event payload
