# App Overview

Explains what a PagerDuty app is, who can build one, and the difference between apps for private use versus public distribution.


> **Note:** This section is intended for developers building an app with PagerDuty. For information on how to add or remove an existing app on your PagerDuty account, visit our [Knowledge Base](/integrations/apps)

## What is an app?
An app allows customers to set up other web-enabled businesses to work with PagerDuty or to make PagerDuty more useful. Apps can send data to PagerDuty, receive data from PagerDuty, or both.

## Who builds apps?
Apps are built by PagerDuty, our partners, our customers, system integrators, and the open source community! Any PagerDuty customer or developer with a [PagerDuty developer account](/developer/developer-account-faq) has access to PagerDuty app development tools.

## Can my app be used by other PagerDuty accounts?
Yes, apps can be created for either _private use_ (on your account only) or _public use_ which can be installed and used by other PagerDuty customers. See [Private Apps](/developer/private-apps) and [Publish an App](/developer/publish-an-app).

## Getting Started
1. Not a PagerDuty customer? [Sign up for a developer account to get access to PagerDuty](/developer/signup).
1. [Register your app and add functionality to it](/developer/register-an-app)
1. [Publish an app (completely optional)](/developer/publish-an-app)

## App Functionality

There are two kinds of app functionality: Events Integration, or OAuth. An app can have either, or both.

### Events Integration

[Events Integration](/developer/events-integration-functionality) sends machine events **from** your tool **to** PagerDuty via the [v2 Events API](/developer/events-api-v2-overview). This is the best way for a monitoring tool to connect with PagerDuty, and it can trigger, acknowledge, and resolve incidents.

The Events API is asynchronous and designed for high volume. Events flow through PagerDuty's [Event Intelligence](https://www.pagerduty.com/platform/event-intelligence-and-automation/) features, which group, deduplicate, and triage them to reduce noise and speed up response.

It can also send [Change Events](/developer/send-change-event) — informational signals about recent changes such as code deploys and system config changes, which are displayed in PagerDuty rather than triggering an incident.

Two optional pieces come with it:

* The [Simple Install Flow](/developer/events-integration-functionality#simple-install-flow-optional-but-recommended) lets your users connect to PagerDuty from inside your tool, instead of copying and pasting integration keys. See the demo [here](https://acme.pagerduty.dev).
* An [Event Transformer](/developer/events-integration-functionality#add-an-event-transformer) converts a payload PagerDuty does not understand natively into the Events API v2 format.

### OAuth Integration

[OAuth](/developer/oauth-functionality) connects your app to the [REST API](/developer/api/reference), which manages PagerDuty resources — users, teams, services, schedules, escalation policies, and so on. This is what you want for an app that administers PagerDuty or reads data out of it, such as a chat tool integration.

The REST API can also trigger and manage incidents, through the [/incidents endpoint](/developer/api/reference/rest/incidents/create-incident). Use it when you specifically intend to create one incident — typically in response to a human action such as opening a ticket, clicking a button, or typing a chat command. It is synchronous, so you get a reference to the incident back, and it has an [operation-specific rate limit](/developer/rest-api-rate-limits#operation-specific-limits) of 300 req/min. For machine events at volume, use Events Integration instead.

There are two kinds of OAuth functionality:

* [Classic User OAuth](/developer/oauth-functionality#classic-user-oauth) acts as a PagerDuty user via an authorization code grant, with a blanket `read` or `write` scope. A user on any account can authorize it as soon as it is registered, without publishing.
* [Scoped OAuth](/developer/oauth-functionality#scoped-oauth) scopes access per resource type, and supports both the authorization code and client credentials grants, to act as a user or as the app itself, respectively. It works on the account that created the app as soon as it is registered; once [published](/developer/publish-an-app#scoped-oauth-apps-on-other-accounts) and installed on other accounts, it can act as a user there too.

For chat integrations, see also [lita-pagerduty](https://github.com/PagerDuty/lita-pagerduty) and the [hubot library](https://github.com/hubot-scripts/hubot-pager-me).

## Other ways to integrate with PagerDuty

These are not app functionality — you configure them outside of app registration — but they are often part of an integration.

|    |    |
|--- |--- |
|Webhooks|PagerDuty will send messages **to** your tool when certain activities occur. For example: when an incident is triggered, when a note is added to an incident, etc). <br/><br/>There are 2 ways to create a webhook subscription: <ul><li>Over the REST API with the [/webhook_subscriptions endpoint](/developer/api/reference/rest/webhooks/create-webhook-subscription) </li><li>[In the PagerDuty web interface](/integrations/webhooks)</li></ul>|
|Add-ons|[Add-ons](/integrations/add-ons) are iframes which can be placed on a PagerDuty incident (web or mobile) or as a full page on the web.<br/><br/>Two ways to create add-ons:<ul><li>[In the PagerDuty user interface](/integrations/add-ons)</li><li>Using the [/addons endpoint](/developer/api/reference/rest/add-ons/create-addon) on the REST API</li></ul>|
|REST API Token|If you need account-level access to a PagerDuty account, you can [request a token from PagerDuty admin users](/account-admin/api-access-keys#rest-api-keys).|
