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

# Bulk Mark Up to 100 Webhook Events as Manually Delivered

> POST /v1/webhooks/events/bulk-mark-delivered — Marks up to 100 events as delivered to suppress further retry attempts after manual event processing.

After manually processing missed webhook events — for example, events found via [Search Events](https://diameterpay.mintlify.site/api-reference/webhooks/search-events.md) with `deliveryStatus=NOT_DELIVERED` — call this endpoint to mark those events as delivered. Doing so stops Diameter's automatic retry engine from re-delivering them, preventing duplicate processing in your systems. You can mark up to 100 events in a single request. This endpoint is designed for operational recovery workflows where you have confirmed that events have been handled outside of the normal delivery path.

## Endpoint

```
POST /v1/webhooks/events/bulk-mark-delivered
```

**Required scope:** `webhooks.write`

## Request Headers

| Header | Required | Description |
| - | - | - |
| `Authorization` | Yes | `Bearer {access_token}` |
| `x-idempotency-key` | Yes | A UUID v4 that makes this request safe to retry |
| `Content-Type` | Yes | `application/json` |

## Request Body

**eventIds** `array` *required*

An array of event ID strings to mark as delivered. Minimum **1**, maximum **100** IDs per request.

## Response — 200 OK

**markedCount** `integer`

The number of events successfully marked as delivered.

**failedEventIds** `array`

An array of event IDs that could not be marked as delivered. Events may fail if they do not exist, are already marked as delivered, or belong to a different tenant.

**totalRequested** `integer`

The total number of event IDs submitted in the request.

## Examples

### Mark three events as delivered

```bash theme={null}
curl --request POST \
  --url https://api.diameterpay.com/v1/webhooks/events/bulk-mark-delivered \
  --header 'Authorization: Bearer {access_token}' \
  --header 'Content-Type: application/json' \
  --header 'x-idempotency-key: 2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e' \
  --data '{
    "eventIds": [
      "evt_a1b2c3d4e5f6789012345678",
      "evt_b2c3d4e5f6a7890123456789",
      "evt_c3d4e5f6a7b8901234567890"
    ]
  }'
```

### Response

```json theme={null}
{
  "markedCount": 2,
  "failedEventIds": [
    "evt_c3d4e5f6a7b8901234567890"
  ],
  "totalRequested": 3
}
```

## Recommended Recovery Workflow

This endpoint is the final step in a standard manual recovery process:

**1. Find missed events**

Query [Search Events](https://diameterpay.mintlify.site/api-reference/webhooks/search-events.md) with `deliveryStatus=NOT_DELIVERED` to retrieve all events that were not delivered during your outage window.

```bash theme={null}
curl --request GET \
  --url 'https://api.diameterpay.com/v1/webhooks/events/search?deliveryStatus=NOT_DELIVERED' \
  --header 'Authorization: Bearer {access_token}'
```

**2. Process the events**

Inspect each event's `payload` via [Get Event](https://diameterpay.mintlify.site/api-reference/webhooks/get-event.md) and apply the appropriate business logic in your system.

**3. Mark events as delivered**

Once processing is confirmed, submit the event IDs to this endpoint in batches of up to 100 to prevent retry re-delivery.

```bash theme={null}
curl --request POST \
  --url https://api.diameterpay.com/v1/webhooks/events/bulk-mark-delivered \
  --header 'Authorization: Bearer {access_token}' \
  --header 'Content-Type: application/json' \
  --header 'x-idempotency-key: {uuid4}' \
  --data '{
    "eventIds": ["evt_a1b2c3d4e5f6789012345678", "evt_b2c3d4e5f6a7890123456789"]
  }'
```

> [!NOTE]
>
> If you prefer Diameter to automatically retry delivery to your endpoint rather than manually processing events, use the [Redeliver Events](https://diameterpay.mintlify.site/api-reference/webhooks/redeliver-events.md) endpoint instead. Use `bulk-mark-delivered` only when you have already processed the events yourself and want to suppress further delivery attempts.

## Error Responses

| Status | Description |
| - | - |
| `400 Bad Request` | `eventIds` array is empty or contains more than 100 IDs. |
| `403 Forbidden` | Your token does not have the `webhooks.write` scope. |


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