LandfallDocs
Integrations · Paging & on-call

Connecting PagerDuty to Landfall

PagerDuty tells Landfall who is on call, so the war room knows who to involve. Each direction below is set up on its own:

  • As a source: Landfall reads who is on call and, once you name an escalation policy, who is next and when the shift changes. Takes a read-only REST API token.
  • As a trigger: a PagerDuty incident opens a Landfall war room. Takes a Webhooks v3 subscription and its signing secret; see Opening a war room from a PagerDuty incident.
  • Writes (optional): acknowledge or resolve from the room, each approved by a person. Reuses the REST API token, which then needs Read & Write access.
PagerDuty
REST API token
→
Landfall
Integrations · Paging & on-call
→
War room
On-call card

What you'll need

  • A PagerDuty account that can create API keys.
  • An admin on your Landfall organization.
  • Nothing to open on your network: Landfall calls api.pagerduty.com from its own servers.

1. Create a read-only API key in PagerDuty

  1. Integrations → API Access Keys

    Open PagerDuty's Integrations menu. API Access Keys is in the Developer Tools column.

    yourcompany.pagerduty.com · Incidents
    PagerDuty's Incidents on All Teams page with the Integrations menu open, showing Extensions, Service Integrations and Workflow Integrations, and a Developer Tools column with App Registration, API Access Keys, API Documentation and Generic Webhooks (v3).
    The Integrations menu in PagerDuty. You need API Access Keys here; Generic Webhooks (v3) is for the trigger. The account avatar is blurred.
  2. Create New API Key → Read-only API Key

    Name it something you will recognize, for example landfall-oncall-read, and tick Read-only API Key. Landfall only reads with this key unless you turn on writes in section 3.

    yourcompany.pagerduty.com · API Access Keys
    PagerDuty's Create API Key dialog over the empty API Access Keys page, with the description landfall-oncall-read, the Read-only API Key checkbox, and Close and Create Key buttons.
    The Create API Key dialog with the description landfall-oncall-read and the Read-only API Key checkbox. No key exists yet at this point. The account avatar is blurred.
  3. Create Key, then copy the key

    PagerDuty shows the value once. If you lose it, delete the key and create another.

2. Add it to Landfall

  1. Integrations → Paging & on-call → PagerDuty

    Open Integrations in the left menu and pick the PagerDuty tile under Paging & on-call. Paste the key into REST API token. You can leave Write-back requester email empty; the address writes use is set in section 3.

    app.landfalls.ai · Integrations · PagerDuty
    Landfall's PagerDuty panel, Not configured, with the REST API token and Webhook v3 signing secret masked, PABC123 in Default escalation policy IDs, the other fields empty, the scope chips paging and oncall-read, and Test connection and Save integration buttons.
    The PagerDuty panel before saving, with both secret fields filled and PABC123 as the default escalation policy. The Webhook v3 signing secret is for the trigger and can stay empty if you only want on-call. The secrets in this picture are masked.
  2. Optional: Default escalation policy IDs

    The war room's On-call card shows who is on call now, who is next, and a heads-up before a shift changes mid-incident. It needs to know which escalation policy to read, because Landfall cannot work that out from the incident. Paste one or more policy IDs, separated by commas. A policy's ID is in its PagerDuty URL: app.pagerduty.com/escalation_policies/<id>. Leave it empty and the room shows no On-call card.

  3. Optional: Category-specific escalation policies

    If your incidents are classified (security, infra or app), you can send one category's escalation to a different escalation policy than the default above. For example, a security-classified incident can go to the security team's own on-call chain once its first page goes unanswered. Enter it as category=policyId pairs separated by commas, for example security=PABC123,infra=PXYZ789. Save checks each policy ID against PagerDuty and refuses one PagerDuty does not find.

    A category with no entry here keeps using the default escalation policy above. That includes every incident at an organization that never sets this field. It only affects escalation levels reached after the incident's first page goes unanswered; the roster Landfall pages when an incident opens does not change with category. A person has to confirm the category before it routes (an unreviewed auto-suggested classification does not). Confirming or changing it mid-incident takes effect at the next unanswered escalation.

  4. Test connection

    Landfall calls PagerDuty's GET /abilities with the token. A working token shows ✓ connected and the line connected to PagerDuty.

  5. Save integration

    Save stores the token in Landfall's secret store and the tile reads Configured. Save does not check the token itself, so test first. Each save replaces every field on the connection, so fill in every field you use each time, including the signing secret if you set up the trigger.

Test connection failed?
  • PagerDuty HTTP <status>: PagerDuty refused the token. Check you copied the whole key and that it still exists under API Access Keys.
  • apiToken required: the REST API token field was empty.
  • Any other line is the network error Landfall saw reaching PagerDuty.

3. Optional: acknowledge or resolve from the room

By default this connection is read-only: on-call reads, schedules and inbound trigger ingestion. An admin can let a room member acknowledge or resolve the linked PagerDuty incident without leaving Landfall. The Integrations page has no switch for this yet, so an admin turns it on with one API call:

Terminal
SESSION=$(curl -s -X POST https://api.landfalls.ai/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"<you>","password":"<your password>","orgSlug":"<your-org-slug>"}' \
  | jq -r .accessToken)

curl -X POST https://api.landfalls.ai/o/<your-org-slug>/integrations/pagerduty/write-enable \
  -H "Authorization: Bearer $SESSION" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true, "writeAsEmail": "oncall@example.com"}'
  1. writeAsEmail is the PagerDuty account Landfall writes as, sent as the requester on every write. This must be a real user in your PagerDuty account. Landfall resolves it to a user id at this step and refuses to enable writes if there is no match.
  2. You do not re-enter a credential. The REST API token above is reused, and it must have Read & Write access for a write to succeed. Landfall does not check the token's scope up front; if it is read-only, the first write fails and is recorded as failed.
  3. Writes need exactly one PagerDuty connection on the organization. To turn them off, send the same call with {"enabled": false}.
Every write is a person's decision, in the room

Turning this on automates nothing. In a room a PagerDuty incident opened, a responder clicks Acknowledge in PagerDuty or Resolve in PagerDuty. Landfall drafts the write, and a person approves and sends it from the incident's Comms tab before it reaches PagerDuty, the same draft, approve and send gate every outbound message goes through. Landfall also drafts a note for the PagerDuty incident linking back to the room, and drafts no more once one has been sent. It recognizes its own writes on PagerDuty's webhook so nothing loops back as a duplicate. Creating a new PagerDuty incident from the room is not offered.

What it looks like

With a default escalation policy set, the war room shows an On-call card with who is on call now and who is next. When a shift changes within the next 30 minutes, the card adds a line such as <outgoing> hands off to <incoming> in 12 min. With writes on, a room a PagerDuty incident opened also shows the Acknowledge and Resolve buttons.

Reading on-call is not paging anyone

The token lets Landfall find the current roster and draft a page. Real outbound paging is off by default and records what it would have sent. An admin turns it on per organization with PUT /o/<your-org-slug>/oncall/egress and the body {"enabled": true}; there is no screen for it yet. It takes effect only while a chat integration (Slack, Microsoft Teams, Telegram or Buzz) is connected. A page goes to the responder's Slack handle. When Slack cannot reach them (no Slack workspace is connected, or they are not in it) but a known email address is on file, from PagerDuty or the fallback-responder list, Landfall pages them by real email instead. So turning real paging on also turns on paging email; there is no separate opt-in. Each page is drafted and needs a person's approval, and later escalation levels send under a standing approval a person gave.

What Beacon can read

Nothing through the signal catalog. PagerDuty has no operations in get_signal_catalog or query_signals, so Beacon and every joined agent cannot query it. The on-call roster reaches people through the room's On-call card and the manager brief (see Manager connector). The Agent-readable column in Integrations architecture lists the sources agents can query.

Opening incidents from PagerDuty

A PagerDuty Webhooks v3 subscription opens a Landfall war room when a PagerDuty incident triggers, and records its escalations and resolution on that room. Its signing secret is saved on this same PagerDuty connection. Setup: Opening a war room from a PagerDuty incident.

Troubleshooting

Connected, but the room shows no On-call card?

The card needs Default escalation policy IDs, and PagerDuty must return someone on call or next for that policy. Check the policy ID and that the policy has someone on call. When PagerDuty returns nobody, the card does not appear.

Connected, but Beacon finds nothing?

Expected. PagerDuty is not in the signal catalog, so Beacon has nothing to query there.

Writes on, but no Acknowledge button?

The buttons appear only in a room a PagerDuty incident opened through the trigger, and only while writes are on.

Reference

FieldValue
REST API tokenRequired. A PagerDuty API key, read-only unless you enable writes.
Webhook v3 signing secretOptional. The secret PagerDuty shows when you create the webhook subscription; used only by the trigger.
Default escalation policy IDs (comma-separated)Optional. The policies the On-call card and the manager brief read.
Category-specific escalation policiesOptional. category=policyId pairs, checked against PagerDuty on save.
Write-back requester emailOptional, and not read by writes. Writes use the address given to the write-enable call in section 3, sent as the requester on every acknowledge, resolve or note.
Scopespaging · oncall-read
Read operationsGET /abilities (Test connection) · GET /oncalls · GET /schedules/{id} · GET /escalation_policies/{id} · GET /users (only when enabling writes)
AccessReads by default, writes only after an admin enables them: PUT /incidents/{id} (acknowledge or resolve) and POST /incidents/{id}/notes, each after a person approves it.
Where the secrets are storedLandfall's secret store (AWS Secrets Manager on the hosted service), per organization. Secret values are never displayed back.
RevokeDelete the API key under API Access Keys in PagerDuty, and the webhook subscription if you set up the trigger. To remove the connection from Landfall, an admin calls DELETE /o/<your-org-slug>/integrations/pagerduty/connections/default; there is no button for it yet.
Trigger endpointhttps://api.landfalls.ai/triggers/pagerduty/<your-org-slug>
Events handledincident.triggered · incident.escalated · incident.resolved
Real pagingOff by default. PUT /o/<your-org-slug>/oncall/egress, admin only, no screen yet. Needs a connected chat integration to take effect.

See Integrations architecture for how every integration shares this connector shape.