# GitHub Apps documentation

Go deeper with GitHub by integrating with our APIs and webhooks, customizing your GitHub workflow, and building and sharing apps with the community.

## Recommended

* [GitHub Apps overview](/en/enterprise-server@3.21/apps/overview)

  You can use GitHub Apps to extend the functionality of GitHub.

* [Quickstart for building GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/quickstart)

  Quickly build a GitHub App that comments on pull requests.

* [About creating GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)

  GitHub Apps let you build integrations to automate processes and extend GitHub's functionality.

* [Registering a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/registering-a-github-app)

  You can register a GitHub App under your personal account or under any organization you own.

* [About authentication with a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app)

  Your GitHub App can authenticate as itself, as an app installation, or on behalf of a user.

* [Authorizing GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/authorizing-github-apps)

  You can authorize a GitHub App to retrieve information about your GitHub account and to make changes on your behalf.

* [Differences between GitHub Apps and OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps)

  In general, GitHub Apps are preferred to OAuth apps because they use fine-grained permissions, give more control over which repositories the app can access, and use short-lived tokens.

* [Building a GitHub App that responds to webhook events](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/building-a-github-app-that-responds-to-webhook-events)

  Learn how to build a GitHub App that makes an API request in response to a webhook event.

* [Best practices for creating a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)

  Follow these best practices to improve the security and performance of your GitHub App.

## Links

### Getting started

* [GitHub Apps overview](/en/enterprise-server@3.21/apps/overview)

  You can use GitHub Apps to extend the functionality of GitHub.

* [Quickstart for building GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/quickstart)

  Quickly build a GitHub App that comments on pull requests.

## Articles

* [GitHub Apps overview](/en/enterprise-server@3.21/apps/overview)

  You can use GitHub Apps to extend the functionality of GitHub.

* [About using GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/about-using-github-apps)

  Learn about what a GitHub App is and why you would use a GitHub App.

* [Installing a GitHub App from a third party](/en/enterprise-server@3.21/apps/using-github-apps/installing-a-github-app-from-a-third-party)

  You can install GitHub Apps directly from the app owner to use on your account.

* [Installing your own GitHub App](/en/enterprise-server@3.21/apps/using-github-apps/installing-your-own-github-app)

  You can install a GitHub App that you created on the account that owns the app. If your app is public, the GitHub App can also be installed on other accounts.

* [Authorizing GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/authorizing-github-apps)

  You can authorize a GitHub App to retrieve information about your GitHub account and to make changes on your behalf.

* [Approving updated permissions for a GitHub App](/en/enterprise-server@3.21/apps/using-github-apps/approving-updated-permissions-for-a-github-app)

  When a GitHub App requests additional permissions, you can review what behavior the permissions will enable and decide whether to approve the permissions.

* [Reviewing and revoking authorization of GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/reviewing-and-revoking-authorization-of-github-apps)

  You can review the GitHub Apps that you have authorized, and you can revoke your authorization.

* [Reviewing and modifying installed GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/reviewing-and-modifying-installed-github-apps)

  You can review the permissions and change the repository access for GitHub Apps that you have installed. You can also temporarily or permanently prevent a GitHub App from accessing resources owned by your account or organization.

* [Privileged GitHub Apps](/en/enterprise-server@3.21/apps/using-github-apps/privileged-github-apps)

  Some GitHub Apps are privileged apps, owned by GitHub, that are granted special capabilities.

* [About creating GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)

  GitHub Apps let you build integrations to automate processes and extend GitHub's functionality.

* [Deciding when to build a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/deciding-when-to-build-a-github-app)

  When building an integration, you should consider using a GitHub App in the following scenarios, instead of an OAuth app, personal access token, or GitHub Actions.

* [Best practices for creating a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app)

  Follow these best practices to improve the security and performance of your GitHub App.

* [Migrating OAuth apps to GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps)

  Learn about the advantages of migrating your OAuth app to a GitHub App, and learn how to migrate your OAuth app.

* [Registering a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/registering-a-github-app)

  You can register a GitHub App under your personal account, any organization you own, or your enterprise .

* [About the user authorization callback URL](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/about-the-user-authorization-callback-url)

  You can specify a URL that users will be redirected to after they authorize a GitHub App.

* [About the setup URL](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/about-the-setup-url)

  You can specify a URL that users will be redirected to after they install a GitHub App.

* [Choosing permissions for a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app)

  The permissions of a GitHub App determine what the app can do with GitHub's APIs and what webhooks the app can receive.

* [Using webhooks with GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps)

  Your GitHub App can subscribe to webhook events to receive notifications whenever certain activity occurs.

* [Making a GitHub App public or private](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private)

  When registering a GitHub App, you can make it public so that other GitHub accounts can install the app, or private so that you can only install it on the account that owns the app.

* [Rate limits for GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/rate-limits-for-github-apps)

  Rate limits restrict the rate of traffic to GitHub.com, to help ensure consistent access for all users.

* [Creating a custom badge for your GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/registering-a-github-app/creating-a-custom-badge-for-your-github-app)

  You can replace the default badge on your GitHub App by uploading your own logo image and customizing the background.

* [About authentication with a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app)

  Your GitHub App can authenticate as itself, as an app installation, or on behalf of a user.

* [Authenticating as a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app)

  You can authenticate as a GitHub App in order to generate an installation access token or manage your app.

* [Authenticating as a GitHub App installation](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation)

  You can make your GitHub App authenticate as an installation in order to make API requests that affect resources owned by the account where the app is installed.

* [Authenticating with a GitHub App on behalf of a user](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user)

  Your GitHub App can perform actions on behalf of a user, like creating an issue, posting a comment, or creating a deployment.

* [Managing private keys for GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps)

  You can manage private keys to authenticate with your GitHub App.

* [Generating a JSON Web Token (JWT) for a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app)

  Learn how to create a JSON Web Token (JWT) to authenticate to certain REST API endpoints with your GitHub App.

* [Generating an installation access token for a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app)

  Learn how to generate an installation access token for your GitHub App.

* [Generating a user access token for a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app)

  You can generate a user access token for your GitHub App in order to attribute app activity to a user.

* [Refreshing user access tokens](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens)

  To enforce regular token rotation and reduce the impact of a compromised token, you can configure your GitHub App to use user access tokens that expire.

* [Making authenticated API requests with a GitHub App in a GitHub Actions workflow](/en/enterprise-server@3.21/apps/creating-github-apps/authenticating-with-a-github-app/making-authenticated-api-requests-with-a-github-app-in-a-github-actions-workflow)

  You can use an installation access token from a GitHub App to make authenticated API requests in a GitHub Actions workflow. You can also pass the token to a custom action to enable the action to make authenticated API requests.

* [About writing code for a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/about-writing-code-for-a-github-app)

  You need to write code to add functionality to your GitHub App.

* [Quickstart for building GitHub Apps](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/quickstart)

  Quickly build a GitHub App that comments on pull requests.

* [Building a GitHub App that responds to webhook events](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/building-a-github-app-that-responds-to-webhook-events)

  Learn how to build a GitHub App that makes an API request in response to a webhook event.

* [Building a "Login with GitHub" button with a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/building-a-login-with-github-button-with-a-github-app)

  Follow this tutorial to write Ruby code to generate a user access token via the web application flow for your GitHub App.

* [Building a CLI with a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/building-a-cli-with-a-github-app)

  Follow this tutorial to write a CLI in Ruby that generates a user access token for a GitHub App via the device flow.

* [Building CI checks with a GitHub App](/en/enterprise-server@3.21/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app)

  Build a continuous integration server to run tests using a GitHub App and checks.

* [Sharing your GitHub App](/en/enterprise-server@3.21/apps/sharing-github-apps/sharing-your-github-app)

  You can share your GitHub App with other users.

* [Making your GitHub App available for GitHub Enterprise Server](/en/enterprise-server@3.21/apps/sharing-github-apps/making-your-github-app-available-for-github-enterprise-server)

  In order for GitHub Enterprise Server instances to use your GitHub App, you must take some additional steps.

* [Registering a GitHub App from a manifest](/en/enterprise-server@3.21/apps/sharing-github-apps/registering-a-github-app-from-a-manifest)

  A GitHub App manifest is a way to share a preconfigured GitHub App registration with other users. The manifest flow allows someone to quickly register a GitHub App.

* [Registering a GitHub App using URL parameters](/en/enterprise-server@3.21/apps/sharing-github-apps/registering-a-github-app-using-url-parameters)

  You can use URL query parameters to help other people quickly set up a new GitHub App with a specific configuration you have preselected.

* [Modifying a GitHub App registration](/en/enterprise-server@3.21/apps/maintaining-github-apps/modifying-a-github-app-registration)

  After registering a GitHub App, you can make changes to it.

* [Activating optional features for GitHub Apps](/en/enterprise-server@3.21/apps/maintaining-github-apps/activating-optional-features-for-github-apps)

  You can test new optional features for your GitHub Apps.

* [About GitHub App managers](/en/enterprise-server@3.21/apps/maintaining-github-apps/about-github-app-managers)

  App managers can manage some or all of the GitHub App registrations owned by an account.

* [Suspending a GitHub App installation](/en/enterprise-server@3.21/apps/maintaining-github-apps/suspending-a-github-app-installation)

  You can temporarily block your GitHub App from accessing resources owned by the accounts that installed the GitHub App.

* [Transferring ownership of a GitHub App](/en/enterprise-server@3.21/apps/maintaining-github-apps/transferring-ownership-of-a-github-app)

  You can transfer ownership of a GitHub App registration to another user or organization.

* [Deleting a GitHub App](/en/enterprise-server@3.21/apps/maintaining-github-apps/deleting-a-github-app)

  You can delete GitHub Apps that you own if you no longer want to use or maintain the app.

* [Authorizing OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps)

  You can connect your GitHub identity to third-party applications using OAuth. When authorizing an OAuth app, you should ensure you trust the application, review who it's developed by, and review the kinds of information the application wants to access.

* [Reviewing your authorized OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-oauth-apps)

  You should review your authorized applications to verify that no new applications with expansive permissions are authorized, such as those that have access to your private repositories.

* [Connecting with third-party applications](/en/enterprise-server@3.21/apps/oauth-apps/using-oauth-apps/connecting-with-third-party-applications)

  You can connect your GitHub identity to third-party applications using OAuth. When authorizing one of these applications, you should ensure you trust the application, review who it's developed by, and review the kinds of information the application wants to access.

* [Privileged OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/using-oauth-apps/privileged-oauth-apps)

  Some OAuth apps are privileged apps, owned by GitHub, that are granted special capabilities.

* [Differences between GitHub Apps and OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps)

  In general, GitHub Apps are preferred to OAuth apps because they use fine-grained permissions, give more control over which repositories the app can access, and use short-lived tokens.

* [Rate limits for OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/rate-limits-for-oauth-apps)

  Rate limits restrict the rate of traffic to GitHub.com, to help ensure consistent access for all users.

* [Creating an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app)

  You can create and register an OAuth app under your personal account or under any organization you have administrative access to. While creating your OAuth app, remember to protect your privacy by only using information you consider public.

* [Authenticating to the REST API with an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app)

  Learn about the different ways to authenticate with some examples.

* [Authorizing OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps)

  You can enable other users to authorize your OAuth app.

* [Scopes for OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)

  Scopes let you specify exactly what type of access you need. Scopes *limit* access for OAuth tokens. They do not grant any additional permission beyond that which the user already has.

* [Creating a custom badge for your OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/creating-a-custom-badge-for-your-oauth-app)

  You can replace the default badge on your OAuth app by uploading your own logo image and customizing the background.

* [Best practices for creating an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/building-oauth-apps/best-practices-for-creating-an-oauth-app)

  Follow these best practices to improve the security and performance of your OAuth app.

* [Modifying an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/modifying-an-oauth-app)

  After creating and registering an OAuth app, you can make changes to it.

* [Activating optional features for OAuth apps](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/activating-optional-features-for-oauth-apps)

  You can test new optional features for your OAuth apps.

* [Transferring ownership of an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/transferring-ownership-of-an-oauth-app)

  You can transfer ownership of an OAuth app to another user or organization.

* [Troubleshooting authorization request errors](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors)

  When obtaining an OAuth token for a user, some errors may occur during the initial authorization request phase.

* [Troubleshooting OAuth app access token request errors](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-oauth-app-access-token-request-errors)

  When exchanging a code for an access token, there are an additional set of errors that can occur. The format of these responses is determined by the accept header you pass.

* [Deleting an OAuth app](/en/enterprise-server@3.21/apps/oauth-apps/maintaining-oauth-apps/deleting-an-oauth-app)

  You can delete OAuth apps when you no longer use them.

* [GitHub authentication discovery endpoints](/en/enterprise-server@3.21/apps/github-authentication-discovery-endpoints)

  GitHub publishes OAuth 2.0 and OpenID Connect metadata documents.