# Handle webhook event generation failures

Learn how to handle webhooks that fail to generate.

In very rare cases, Stripe can fail to generate the `Event` object. In these cases, the event is irrecoverable. Stripe can’t deliver it to your event destinations, nor publish it in the Dashboard or in the [List Events API](https://docs.stripe.com/api/v2/core/events/list.md). Instead, Stripe creates a [v2.core.health.event_generation_failure.resolved](https://docs.stripe.com/api/v2/core/events/event-types.md#v2_event_types-v2.core.health.event_generation_failure.resolved) event to inform you that the `Event` generation failed. This guide explains how the alert works, and what you can do to recover from it.

## Delivery of failed events 

Stripe delivers `v2.core.health.event_generation_failure.resolved` events to both Workbench and to any webhook endpoints you configure to listen for them.

### Workbench

The `v2.core.health.event_generation_failure.resolved` events appear in two places in Workbench:

- The [Events](https://docs.stripe.com/workbench/overview.md#events) tab
- The [Health](https://docs.stripe.com/workbench/health.md) tab

### Webhook endpoints

Follow the [webhook setup guide](https://docs.stripe.com/webhooks.md) to register a webhook endpoint that listens to `v2.core.health.event_generation_failure.resolved` thin events. After you register the correct webhook endpoint, Stripe sends `v2.core.health.event_generation_failure.resolved` events to it.

## How to use the health event

When Stripe fails to generate a webhook event, you can process the generated [thin event](https://docs.stripe.com/event-destinations.md#thin-events) to retrieve the `v2.core.health.event_generation_failure.resolved` object, as shown in the following example.

```json
{
  "alert_id": "halert_61RFBMa6o6H87usts16RFBM10hSQlYfddqcFoEMR6CPY",
  "grouping_key": "_grouping_s8PgTvizbkORV9z5PhaJSvc4dUcAMmfRpEHKm4EeJ1glsQ5XMf",
  "impact": {
    "event_type": "payment_intent.requires_action",
    "related_object_id": "pi_1QA8PKDTvO5jCVb3TVDZP75a",
    "related_object": {
      "id": "pi_1QA8PKDTvO5jCVb3TVDZP75a",
      "type": "payment_intent",
      "url": "https://dashboard.stripe.com/payment_intents/pi_1QA8PKDTvO5jCVb3TVDZP75a"
    },
  },
  "resolved_at": "2025-10-30T16:05:44.000Z",
  "summary": "We have failed to create a notification for your Stripe account.",
}
```

The example event provides the following information about the failure:

- **Failed event**: Stripe failed to generate a `payment_intent.requires_action` event.
- **Relevant object**: The PaymentIntent that Stripe failed to generate the event for is `pi_1QA8PKDTvO5jCVb3TVDZP75a`.
- **Timestamp**: The event failed to generate at `2025-10-30T16:05:44.000Z`.
- **Account type**: The `impact` doesn’t include the `context` property, so the `payment_intent.requires_action` event didn’t occur on a connected account.

If your integration relies on receiving webhooks for the `payment_intent.requires_action` event, this failure makes it out of sync with the Stripe state. To realign your integration after you receive a `v2.core.health.event_generation_failure.resolved` webhook, poll the relevant API (in this case the [Payment Intents API](https://docs.stripe.com/api/payment_intents.md)) to retrieve the related object:

```curl
curl https://api.stripe.com/v1/payment_intents/pi_1QA8PKDTvO5jCVb3TVDZP75a \
  -u "<<YOUR_SECRET_KEY>>:"
```
