Skip to content

[DEVECO-1007] Rework Build Apps & Integrations; document Public Scoped Apps (EA) - #144

Draft
gaberduty wants to merge 6 commits into
mainfrom
deveco-1007-ea-public-scoped-apps
Draft

[DEVECO-1007] Rework Build Apps & Integrations; document Public Scoped Apps (EA)#144
gaberduty wants to merge 6 commits into
mainfrom
deveco-1007-ea-public-scoped-apps

Conversation

@gaberduty

@gaberduty gaberduty commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

DEVECO-1007

Two related changes to the Build Apps & Integrations section. Reviewing commit-by-commit is probably easiest.

1. Public Scoped Apps (Early Access)

A new page for developers trying out Public Scoped Apps, which extend Scoped OAuth so a single app can be used across many accounts.

  • Cross-account access is limited to user tokens. Client credentials still only issues an app token for the account that created the app.
  • A user can only authorize after an admin on their account installs it, via https://app.pagerduty.com/oauth_apps/[app_id], with a screenshot of the installation page the admin sees.
  • Installing does not itself grant access. It permits users on that account to authorize the app; each user still completes the OAuth flow individually.
  • Going public does not relax the confidential-client requirement — the client_secret must still be secured and PKCE is still required.

Not linked in toc.json, so it renders at its slug but isn't advertised — same treatment as 20-Early-Access-Webhooks.md.

Per review, the non-EA pages describe the platform exactly as it is today and never mention Early Access. The EA page carries the whole delta, and ends with a table naming each non-EA statement that does not hold for participants.

2. Section restructure

12 sidebar entries collapse to 8, organized by what the reader is doing:

Before After
App Overview, App Functionality Overview, API Pickers App Overview
Private Apps (new)
Developer Account FAQ Developer Account (FAQ becomes a section)
Register an App Register an App (+ add/remove functionality steps)
Events Integration Functionality, Writing App Event Transformers Events Integration Functionality
OAuth Functionality, User OAuth Token, App OAuth Token OAuth Functionality + Private Apps
PagerDuty OpenID ID Token, Publish an App unchanged

Private Apps is the substantive new page. Scoped OAuth was spread across three pages despite being one story — an app that only works on the account that created it. It now covers per-resource scopes, the client-credentials app token flow, the confidential-client and mandatory-PKCE rules, that these apps are never reviewed or published, and the Event Transformer reuse pattern (write the transform once on the app, add that integration to every service receiving the payload).

The Scoped/Classic split follows the review note: Private Apps owns the Scoped story and links to OAuth Functionality for the concrete flow, so the auth-code flow that #143 unified is not re-split per functionality.

⚠️ Redirects — deferred to a follow-up

Redirects live in developer-site/dev-doc-redirect.js, not in this repo. Handled separately, after this merges — the new pages' Stoplight node ids do not exist until the docs sync. Recording the analysis here so the follow-up is mechanical.

Published URLs are /docs/<stoplight-node-id>-<slugified-H1>. The slug comes from the page H1, not the toc.json slug, and the node id is assigned by Stoplight. Verified against 72d3b724589e3-rest-api-rate-limits (H1 "REST API Rate Limits", toc title "Rate Limits") and e518101fde5f3-obtaining-an-app-o-auth-token (H1 "Obtaining an App OAuth Token", toc title "App OAuth Token").

Consequences:

  • Every surviving page keeps its exact H1 except Developer Account FAQ → Developer Account, which will get a new URL.
  • Unknown: whether a Stoplight node id survives a file rename. Every file here is renumbered, so if the id is path-derived, far more URLs move. Worth confirming on staging.

Entries whose targets this PR invalidates:

Entry Currently targets Should target
/docs/api-picker.../api-picker/ ZG9jOjExMDI5NTcx-api-pickers App Overview
/docs/app-functionality.../app-functionality/ ZG9jOjExMDI5NTcw-app-functionality-overview App Overview
/docs/oauth-2-functionality-app-token e518101fde5f3-obtaining-an-app-o-auth-token Private Apps (new node id)
/docs/developer-account.../developer-account/ ZG9jOjExMDI5NTY4-developer-account-faq Developer Account (H1 changed)

Already broken on main before this PR#143 deleted the PKCE and Code Grant pages without updating these. All four should point at OAuth Functionality (f59fdbd94ceab-o-auth-functionality), which still exists:

  • /docs/oauth-2-functionality-pkce
  • /docs/oauth-2-functionality-client-secret
  • /docs/app-integration-development/oauth-2-pkce/
  • /docs/app-integration-development/oauth-2-auth-code-grant/

writing-app-event-transformers and user-oauth-token have no legacy entries in the map, so nothing to retarget.

Verification

  • Scripted check of all 167 internal .md links and anchors across docs/, plus all 30 image refs: no breakage introduced. Six broken links in REST-API/ and events-API-v1/ and four orphaned images in assets/ — all confirmed pre-existing on main, left alone as out of scope.
  • Confirmed every toc.json uri resolves.
  • The #add-an-event-transformer anchor is preserved — two other doc sections link to it.
  • Not yet eyeballed on staging. Worth unblocking the Buildkite deploy, both to check the sidebar and to resolve the node-id question above.

Open questions

  • Ticket. All three commits are labelled DEVECO-1007, which was filed for the EA page. If the restructure should have its own ticket, say the word and I'll re-label.
  • EU install URL. The EA install link is hardcoded to app.pagerduty.com. If EU accounts need eu.pagerduty.com/oauth_apps/[app_id], that needs a line.
  • Scoped token lifetimes moved to Private Apps, leaving Classic on OAuth Functionality with pointers between them. Happy to keep both together instead if you'd rather have the comparison in one place.

🤖 Generated with Claude Code

gaberduty and others added 2 commits August 5, 2026 15:48
Add an Early Access page for developers trying out Public Scoped Apps,
which extend Scoped OAuth so a single app can be used across many
PagerDuty accounts.

The page covers the two constraints that distinguish it from a normal
Scoped app:

  - Cross-account access is limited to user tokens. The client
    credentials flow still only issues an app token for the account that
    created the app, so any app-token-dependent behavior stays
    single-account.
  - A user can only authorize the app after an admin on their account
    has installed it, via https://app.pagerduty.com/oauth_apps/[app_id].

Also notes that going public does not relax the confidential-client
requirement — a Scoped app must still secure its client_secret and use
PKCE — since "many accounts can use this" invites the wrong inference.

Left out of toc.json so the page is reachable but not advertised, as
with Early Access Webhooks. A screenshot of the admin installation page
is still to come, marked with a TODO.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Collapse 12 sidebar entries to 8, organized around what the reader is
doing rather than around individual platform features. Several pages
were thin enough that they only added a navigation step: API Picker was
a single table, App Functionality was a table of links plus the add and
remove UI steps, and Writing App Event Transformers documented the
transformer API on a separate page from the one telling you to write a
transformer. Registering an app and making it useful took four pages.

Structure:

  - App Overview absorbs App Functionality and API Picker, so the
    "what can I build" tables sit on the page that asks the question.
  - Private Apps (new) becomes the home for Scoped OAuth, which was
    previously spread across three pages despite being one story: an
    app that only works on the account that created it. It covers the
    per-resource scopes, the client credentials app token flow, the
    confidential-client and mandatory-PKCE requirements, and the fact
    that these apps are never reviewed or published. It also documents
    writing one Event Transformer on an app and reusing it across every
    service that receives the payload, which is a common reason to
    register a private app in the first place.
  - Developer Account gains a lead section describing the account and
    its limits, with the existing Q&As kept verbatim under an FAQ
    heading.
  - Register an App absorbs the add/remove functionality steps from App
    Functionality and Events Integration, so registering and configuring
    an app is one page.
  - Events Integration Functionality absorbs Writing App Event
    Transformers.
  - OAuth Functionality absorbs User OAuth Token and hands the Scoped
    material to Private Apps, keeping the shared user-token flow that
    #143 unified rather than re-splitting it per functionality.

Slugs are preserved for every page that survives, including
developer-account-faq, whose title changes to "Developer Account" but
whose slug does not. Five slugs die with their pages and need Stoplight
redirects: app-functionality, api-picker, writing-app-event-transformers,
user-oauth-token, app-oauth-token.

Also:

  - Repoint the five inbound links from other doc sections. The REST API
    rate limit page linked both its app-token and user-token mentions at
    OAuth Functionality; they now point at the two separate flows.
  - Replace a hardcoded developer.pagerduty.com URL in the FAQ with a
    relative link.
  - Normalize heading levels on Register an App and Events Integration,
    where intro sections sat at h3 above h2 siblings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gaberduty gaberduty changed the title [DEVECO-1007] Document Public Scoped Apps (Early Access) [DEVECO-1007] Rework Build Apps & Integrations; document Public Scoped Apps (EA) Aug 9, 2026
gaberduty and others added 4 commits August 9, 2026 13:08
Replaces the TODO placeholder with the installation page as an account
admin sees it.

The screenshot also settles two things the surrounding prose was vague
about, so it has been tightened to match:

  - The Details panel lists "Token types: User tokens", so an admin can
    see the user-token limitation before installing.
  - The page tells the admin that users still complete the OAuth flow
    individually. Installing does not by itself grant the app any
    access, it only permits users on that account to authorize it —
    worth stating plainly, since a button labelled "Install on your
    account" reads like it grants access at that moment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TODO: revert before merge. The page is meant to stay out of toc.json so
it is reachable but unadvertised, but an unlisted page has no derivable
URL to visit on staging — Stoplight assigns the node id at sync time —
so there is no way to review it without a sidebar entry.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There are only two kinds of app functionality, Events Integration and
OAuth, but the page listed four things side by side: Events Integration,
Simple Install Flow, Classic User OAuth, and Scoped OAuth. That presents
Simple Install Flow as a peer of the functionality it is part of, and
splits OAuth into two entries before the reader knows what OAuth is for.

Now two subsections:

  - Events Integration covers machine events over the async Events API,
    high volume and Event Intelligence, with change events as the
    informational variant. Simple Install Flow and Event Transformers
    are described as optional pieces of it rather than as peers.
  - OAuth covers the REST API for managing PagerDuty resources, and the
    human-initiated incident case with its synchronous, 1-per-second
    caveat and a pointer back to Events Integration for volume. Classic
    and Scoped are kinds of OAuth rather than top-level functionality.

Add-ons, webhooks, and REST API tokens are not app functionality at all
and are configured outside app registration, so they now sit under
"Other ways to integrate with PagerDuty" which says so.

This absorbs the API Picker table. Its rows restated the same material
as "what do you want to do" and every one of them lands in one of the
sections above.

Also answer "Can my app be used by other PagerDuty accounts?" directly,
in terms of private versus public use.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Review feedback on the App Overview page:
* Drop "without you hosting anything" from the Event Transformer bullet
* Correct the /incidents rate limit: it is an operation-specific limit of
  300 req/min, not 1 incident per second
* Clarify the two kinds of OAuth functionality: Classic User OAuth acts as
  a user via an authorization code grant; Scoped OAuth scopes access per
  resource type and supports both the authorization code and client
  credentials grants
* Point the webhooks block at /webhook_subscriptions instead of the
  deprecated /extensions endpoint

The old api-reference.pagerduty.com/#!/ URLs no longer resolve, so replace
all 10 of them repo-wide with their developer.pagerduty.com equivalents.
Two were pointing at the wrong endpoint and are corrected in the process:
the Events API v2 overview linked to list-incidents where it meant
create-an-incident, and the Incident Creation API page linked to
create-an-incident where it meant update-an-incident.

Also update the moved add-ons support links to support.pagerduty.com/main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant