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

# PagerDuty Events API v2 inbound

> Accept Events API v2-compatible alert lifecycles as Squasher incidents.

The PagerDuty Events API v2 inbound connector accepts the familiar `trigger`,
`acknowledge`, and `resolve` event shape. Use it when a system already emits
PagerDuty-compatible events and you want Squasher to own the incident workflow.

<Warning>
  This is an inbound source. The [PagerDuty notification destination](/integrations/pagerduty) sends
  Squasher incidents out to a PagerDuty service and uses a PagerDuty-issued integration key instead.
</Warning>

## Create the connector

Create a **PagerDuty Events API v2** source under **Settings → Integrations**. Use
the returned Squasher secret as the event's `routing_key` and send requests to the
returned endpoint.

## Send an event

```bash theme={null}
curl --fail-with-body \
  -H "Content-Type: application/json" \
  -d '{
    "routing_key": "<setup.secret>",
    "event_action": "trigger",
    "dedup_key": "database-primary-unavailable",
    "payload": {
      "summary": "Primary database is unavailable",
      "source": "database-primary",
      "severity": "critical",
      "timestamp": "2026-08-05T08:00:00.000Z",
      "component": "postgres",
      "group": "production",
      "class": "availability"
    },
    "links": [
      { "href": "https://status.example.com/database", "text": "Service status" }
    ]
  }' \
  "<setup.endpoint>"
```

Acknowledge or resolve the same incident by reusing `dedup_key`:

```json theme={null}
{
  "routing_key": "<setup.secret>",
  "event_action": "resolve",
  "dedup_key": "database-primary-unavailable"
}
```

## Incident behavior

* `dedup_key` is the stable alert key. Keep it unchanged for trigger,
  acknowledge, and resolve.
* `trigger` opens or updates an incident, `acknowledge` records a lifecycle update, and
  `resolve` resolves it.
* `payload.severity` accepts PagerDuty's `critical`, `error`, `warning`, and
  `info` values and maps them to Squasher's `sev-1` through `sev-3` levels.
* Component, group, class, and source fields are normalized for connector diagnostics;
  raw payloads and credentials are never stored in delivery history.

The `routing_key` is a Squasher-generated write-only secret. Rotating the connector
keeps the previous key valid for 24 hours, so update every sender during the overlap
and send a trigger and resolve test pair.

Related: [Inbound alert connectors](/integrations/alert-connectors),
[Alert Connectors API](/api-reference/alert-connectors),
[PagerDuty destination](/integrations/pagerduty).
