CINXE.COM

<!DOCTYPE html><html data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><link rel="icon" type="image/png" href="/assets/cb-345/images/site/favicon.png" data-next-head=""/><link href="/manifest.json" rel="manifest" data-next-head=""/><meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY" data-next-head=""/><title data-next-head="">Migrating OAuth apps to GitHub Apps - GitHub Docs</title><meta name="description" content="Learn about the advantages of migrating your OAuth app to a GitHub App, and learn how to migrate your OAuth app." data-next-head=""/><link rel="alternate" hrefLang="zh-Hans" href="https://docs.github.com/zh/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="es" href="https://docs.github.com/es/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="pt" href="https://docs.github.com/pt/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="ru" href="https://docs.github.com/ru/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="ja" href="https://docs.github.com/ja/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="fr" href="https://docs.github.com/fr/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="de" href="https://docs.github.com/de/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><link rel="alternate" hrefLang="ko" href="https://docs.github.com/ko/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><meta name="keywords" content="GitHub Apps" data-next-head=""/><meta name="path-language" content="en" data-next-head=""/><meta name="path-version" content="free-pro-team@latest" data-next-head=""/><meta name="path-product" content="apps" data-next-head=""/><meta name="path-article" content="apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><meta name="page-document-type" content="article" data-next-head=""/><meta name="status" content="200" data-next-head=""/><meta property="og:site_name" content="GitHub Docs" data-next-head=""/><meta property="og:title" content="Migrating OAuth apps to GitHub Apps - GitHub Docs" data-next-head=""/><meta property="og:type" content="article" data-next-head=""/><meta property="og:url" content="https://docs-internal.github.com/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps" data-next-head=""/><meta property="og:image" content="https://github.githubassets.com/images/modules/open_graph/github-logo.png" data-next-head=""/><link rel="preload" href="/_next/static/css/befc662d3a7d0204.css" as="style"/><link rel="stylesheet" href="/_next/static/css/befc662d3a7d0204.css" data-n-g=""/><link rel="preload" href="/_next/static/css/0c5bcfa832f65399.css" as="style"/><link rel="stylesheet" href="/_next/static/css/0c5bcfa832f65399.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-778bec636e5c677c.js" defer=""></script><script src="/_next/static/chunks/framework-19baaf6675f9027b.js" defer=""></script><script src="/_next/static/chunks/main-a2c1e924d9046c3c.js" defer=""></script><script src="/_next/static/chunks/pages/_app-8cbf066043b24810.js" defer=""></script><script src="/_next/static/chunks/727f57db-4bd4b01815458cf5.js" defer=""></script><script src="/_next/static/chunks/4197-10db3e81f24542eb.js" defer=""></script><script src="/_next/static/chunks/4491-9050f5e7650fcbee.js" defer=""></script><script src="/_next/static/chunks/690-9f438af70d12addb.js" defer=""></script><script src="/_next/static/chunks/3237-830af417931d8194.js" defer=""></script><script src="/_next/static/chunks/824-553936f681922a96.js" defer=""></script><script src="/_next/static/chunks/7685-1b6d4f53969c4b61.js" defer=""></script><script src="/_next/static/chunks/pages/%5BversionId%5D/%5BproductId%5D/%5B...restPage%5D-3463b5b2f3018925.js" defer=""></script><script src="/_next/static/Tm-n5Utsr8ZtHzoVY7OIy/_buildManifest.js" defer=""></script><script src="/_next/static/Tm-n5Utsr8ZtHzoVY7OIy/_ssgManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.5">.cEhRXB{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .dmdEgz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;pointer-events:none;}/*!sc*/ .hROlum{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:0;}/*!sc*/ .bmseMA{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-weight:400;word-break:break-word;}/*!sc*/ .Ywlla{list-style:none;}/*!sc*/ .cUxMoC{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ .lmYNOb{height:20px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));margin-left:8px;font-weight:initial;}/*!sc*/ [data-variant="danger"]:hover .Box-sc-g0xbh4-0,[data-variant="danger"]:active .lmYNOb{color:var(--fgColor-default,var(--color-fg-default,#1F2328));}/*!sc*/ .gMkIpo{padding:0;margin:0;display:none;}/*!sc*/ .gMkIpo *{font-size:14px;}/*!sc*/ .enEvIH{padding:0;margin:0;display:block;}/*!sc*/ .enEvIH *{font-size:14px;}/*!sc*/ .ivpQTm{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-weight:600;word-break:break-word;}/*!sc*/ .eQiQea{grid-area:topper;}/*!sc*/ .ijSsTo{grid-area:intro;}/*!sc*/ .giVcWX{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;grid-area:sidebar;}/*!sc*/ .kohLxz{grid-area:content;}/*!sc*/ data-styled.g3[id="Box-sc-g0xbh4-0"]{content:"cEhRXB,dmdEgz,hROlum,bmseMA,Ywlla,cUxMoC,lmYNOb,gMkIpo,enEvIH,ivpQTm,eQiQea,ijSsTo,giVcWX,kohLxz,"}/*!sc*/ .hXCKEr{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:transparent;box-shadow:none;}/*!sc*/ .hXCKEr:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hXCKEr:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hXCKEr:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hXCKEr[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .hXCKEr[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .hXCKEr:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .hXCKEr:active{-webkit-transition:none;transition:none;}/*!sc*/ .hXCKEr[data-inactive]{cursor:auto;}/*!sc*/ .hXCKEr:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .hXCKEr:disabled [data-component=ButtonCounter],.hXCKEr:disabled [data-component="leadingVisual"],.hXCKEr:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.hXCKEr:focus{outline:solid 1px transparent;}}/*!sc*/ .hXCKEr [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hXCKEr[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .hXCKEr[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .hXCKEr[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .hXCKEr[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hXCKEr[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .hXCKEr[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .hXCKEr[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .hXCKEr[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hXCKEr[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .hXCKEr[data-block="block"]{width:100%;}/*!sc*/ .hXCKEr[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .hXCKEr[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .hXCKEr[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .hXCKEr[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .hXCKEr [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .hXCKEr [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .hXCKEr [data-component="trailingAction"]{margin-right:-4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .hXCKEr [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hXCKEr [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .hXCKEr [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .hXCKEr:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .hXCKEr:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .hXCKEr[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .hXCKEr[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr[data-no-visuals]{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));}/*!sc*/ .hXCKEr:has([data-component="ButtonCounter"]){color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));}/*!sc*/ .hXCKEr:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .hXCKEr:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .hXCKEr{height:auto;text-align:left;}/*!sc*/ .hXCKEr span:first-child{display:inline;}/*!sc*/ .jOdgLl{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .jOdgLl:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jOdgLl:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .jOdgLl:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jOdgLl[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .jOdgLl[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jOdgLl:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .jOdgLl:active{-webkit-transition:none;transition:none;}/*!sc*/ .jOdgLl[data-inactive]{cursor:auto;}/*!sc*/ .jOdgLl:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .jOdgLl:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.jOdgLl:focus{outline:solid 1px transparent;}}/*!sc*/ .jOdgLl [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .jOdgLl[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .jOdgLl[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .jOdgLl[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .jOdgLl[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jOdgLl[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .jOdgLl[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .jOdgLl[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .jOdgLl[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jOdgLl[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .jOdgLl[data-block="block"]{width:100%;}/*!sc*/ .jOdgLl[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .jOdgLl[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .jOdgLl[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .jOdgLl[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .jOdgLl [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .jOdgLl [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .jOdgLl [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .jOdgLl [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .jOdgLl [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .jOdgLl [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jOdgLl [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .jOdgLl [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .jOdgLl:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl [data-component="leadingVisual"],.jOdgLl [data-component="trailingVisual"],.jOdgLl [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .jOdgLl[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jOdgLl[data-no-visuals]{border-top-left-radius:unset;border-bottom-left-radius:unset;}/*!sc*/ .hmWbvh{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .hmWbvh:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hmWbvh:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hmWbvh:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hmWbvh[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .hmWbvh[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .hmWbvh:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .hmWbvh:active{-webkit-transition:none;transition:none;}/*!sc*/ .hmWbvh[data-inactive]{cursor:auto;}/*!sc*/ .hmWbvh:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .hmWbvh:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.hmWbvh:focus{outline:solid 1px transparent;}}/*!sc*/ .hmWbvh [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .hmWbvh[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .hmWbvh[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .hmWbvh[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .hmWbvh[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hmWbvh[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .hmWbvh[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .hmWbvh[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .hmWbvh[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hmWbvh[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .hmWbvh[data-block="block"]{width:100%;}/*!sc*/ .hmWbvh[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .hmWbvh[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .hmWbvh[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .hmWbvh[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .hmWbvh [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .hmWbvh [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .hmWbvh [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .hmWbvh [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .hmWbvh [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .hmWbvh [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hmWbvh [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .hmWbvh [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .hmWbvh:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh [data-component="leadingVisual"],.hmWbvh [data-component="trailingVisual"],.hmWbvh [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .hmWbvh[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .lkeyoI{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .lkeyoI:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .lkeyoI:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .lkeyoI:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .lkeyoI[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .lkeyoI[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .lkeyoI:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .lkeyoI:active{-webkit-transition:none;transition:none;}/*!sc*/ .lkeyoI[data-inactive]{cursor:auto;}/*!sc*/ .lkeyoI:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .lkeyoI:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.lkeyoI:focus{outline:solid 1px transparent;}}/*!sc*/ .lkeyoI [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .lkeyoI[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .lkeyoI[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .lkeyoI[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .lkeyoI[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .lkeyoI[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .lkeyoI[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .lkeyoI[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .lkeyoI[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .lkeyoI[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .lkeyoI[data-block="block"]{width:100%;}/*!sc*/ .lkeyoI[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .lkeyoI[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .lkeyoI[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .lkeyoI[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .lkeyoI [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .lkeyoI [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .lkeyoI [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .lkeyoI [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .lkeyoI [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .lkeyoI [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .lkeyoI [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .lkeyoI [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .lkeyoI:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI [data-component="leadingVisual"],.lkeyoI [data-component="trailingVisual"],.lkeyoI [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .lkeyoI[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .lkeyoI[data-no-visuals]{display:none;}/*!sc*/ .htZXvk{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .htZXvk:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .htZXvk:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .htZXvk:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .htZXvk[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .htZXvk[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .htZXvk:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .htZXvk:active{-webkit-transition:none;transition:none;}/*!sc*/ .htZXvk[data-inactive]{cursor:auto;}/*!sc*/ .htZXvk:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .htZXvk:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.htZXvk:focus{outline:solid 1px transparent;}}/*!sc*/ .htZXvk [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .htZXvk[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .htZXvk[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .htZXvk[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .htZXvk[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .htZXvk[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .htZXvk[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .htZXvk[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .htZXvk[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .htZXvk[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .htZXvk[data-block="block"]{width:100%;}/*!sc*/ .htZXvk[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .htZXvk[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .htZXvk[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .htZXvk[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .htZXvk[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .htZXvk [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .htZXvk [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .htZXvk [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .htZXvk [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .htZXvk [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .htZXvk [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .htZXvk [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .htZXvk [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .htZXvk:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk [data-component="leadingVisual"],.htZXvk [data-component="trailingVisual"],.htZXvk [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .htZXvk[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .htZXvk[data-no-visuals]{margin-left:16px;}/*!sc*/ @media (min-width:768px){.htZXvk[data-no-visuals]{margin-left:0;}}/*!sc*/ @media (min-width:1012px){.htZXvk[data-no-visuals]{display:none;}}/*!sc*/ .jCopKa{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:transparent;box-shadow:none;}/*!sc*/ .jCopKa:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jCopKa:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .jCopKa:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jCopKa[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .jCopKa[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jCopKa:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .jCopKa:active{-webkit-transition:none;transition:none;}/*!sc*/ .jCopKa[data-inactive]{cursor:auto;}/*!sc*/ .jCopKa:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .jCopKa:disabled [data-component=ButtonCounter],.jCopKa:disabled [data-component="leadingVisual"],.jCopKa:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.jCopKa:focus{outline:solid 1px transparent;}}/*!sc*/ .jCopKa [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jCopKa[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .jCopKa[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .jCopKa[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .jCopKa[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jCopKa[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .jCopKa[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .jCopKa[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .jCopKa[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jCopKa[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .jCopKa[data-block="block"]{width:100%;}/*!sc*/ .jCopKa[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .jCopKa[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .jCopKa[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .jCopKa[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .jCopKa[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .jCopKa [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .jCopKa [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .jCopKa [data-component="trailingAction"]{margin-right:-4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .jCopKa [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jCopKa [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .jCopKa [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .jCopKa:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .jCopKa:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .jCopKa[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .jCopKa[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa[data-no-visuals]{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));}/*!sc*/ .jCopKa:has([data-component="ButtonCounter"]){color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));}/*!sc*/ .jCopKa:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .jCopKa:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ data-styled.g4[id="types__StyledButton-sc-ws60qy-0"]{content:"hXCKEr,jOdgLl,hmWbvh,lkeyoI,htZXvk,jCopKa,"}/*!sc*/ .eiGLpS{display:none;}/*!sc*/ .eiGLpS[popover]{position:absolute;padding:0.5em 0.75em;width:-webkit-max-content;width:-moz-max-content;width:max-content;margin:auto;-webkit-clip:auto;clip:auto;white-space:normal;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff));text-align:center;word-wrap:break-word;background:var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f));border-radius:6px;border:0;opacity:0;max-width:250px;inset:auto;overflow:visible;}/*!sc*/ .eiGLpS[popover]:popover-open{display:block;}/*!sc*/ .eiGLpS[popover].\:popover-open{display:block;}/*!sc*/ @media (forced-colors:active){.eiGLpS{outline:1px solid transparent;}}/*!sc*/ .eiGLpS::after{position:absolute;display:block;right:0;left:0;height:var(--overlay-offset,0.25rem);content:'';}/*!sc*/ .eiGLpS[data-direction='n']::after,.eiGLpS[data-direction='ne']::after,.eiGLpS[data-direction='nw']::after{top:100%;}/*!sc*/ .eiGLpS[data-direction='s']::after,.eiGLpS[data-direction='se']::after,.eiGLpS[data-direction='sw']::after{bottom:100%;}/*!sc*/ .eiGLpS[data-direction='w']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;left:100%;}/*!sc*/ .eiGLpS[data-direction='e']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;right:100%;margin-left:-8px;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .eiGLpS:popover-open,.eiGLpS:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .eiGLpS.\:popover-open,.eiGLpS.\:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ data-styled.g8[id="Tooltip__StyledTooltip-sc-e45c7z-0"]{content:"eiGLpS,"}/*!sc*/ .daAEFx{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}/*!sc*/ .gzcJGA{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);}/*!sc*/ data-styled.g11[id="Octicon-sc-9kayk9-0"]{content:"daAEFx,gzcJGA,"}/*!sc*/ .bebFBv{font-weight:600;font-size:32px;margin:0;font-size:14px;}/*!sc*/ @media (min-width:1012px) and (max-width:1400px){.bebFBv{margin-top:2rem;}}/*!sc*/ data-styled.g28[id="Heading__StyledHeading-sc-1c1dgg0-0"]{content:"bebFBv,"}/*!sc*/ .hgjakc{margin:0;padding-inline-start:0;padding-top:8px;padding-bottom:8px;}/*!sc*/ data-styled.g29[id="List__ListBox-sc-1x7olzq-0"]{content:"hgjakc,"}/*!sc*/ .lnYQME{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;font-size:14px;padding-top:0;padding-bottom:0;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .lnYQME[data-loading]{cursor:default;}/*!sc*/ .lnYQME[aria-disabled],.lnYQME[data-inactive]{cursor:not-allowed;}/*!sc*/ .lnYQME[aria-disabled] [data-component="ActionList.Checkbox"],.lnYQME[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.lnYQME:focus,.lnYQME:focus-visible,.lnYQME > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .lnYQME [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .lnYQME [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .lnYQME:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .lnYQME:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.lnYQME[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .lnYQME:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.lnYQME[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.lnYQME:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.lnYQME:focus-visible,.lnYQME > a.focus-visible,.lnYQME:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.lnYQME:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .itjSOb{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;padding-right:8px;padding-top:6px;padding-bottom:6px;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .itjSOb[data-loading]{cursor:default;}/*!sc*/ .itjSOb[aria-disabled],.itjSOb[data-inactive]{cursor:not-allowed;}/*!sc*/ .itjSOb[aria-disabled] [data-component="ActionList.Checkbox"],.itjSOb[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.itjSOb:focus,.itjSOb:focus-visible,.itjSOb > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .itjSOb [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .itjSOb [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .itjSOb:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .itjSOb:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.itjSOb[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .itjSOb:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.itjSOb[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.itjSOb:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.itjSOb:focus-visible,.itjSOb > a.focus-visible,.itjSOb:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.itjSOb:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .kXKjOF{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:16px;padding-right:8px;font-size:12px;padding-top:6px;padding-bottom:6px;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .kXKjOF[data-loading]{cursor:default;}/*!sc*/ .kXKjOF[aria-disabled],.kXKjOF[data-inactive]{cursor:not-allowed;}/*!sc*/ .kXKjOF[aria-disabled] [data-component="ActionList.Checkbox"],.kXKjOF[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.kXKjOF:focus,.kXKjOF:focus-visible,.kXKjOF > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .kXKjOF [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .kXKjOF [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .kXKjOF:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .kXKjOF:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.kXKjOF[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .kXKjOF:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.kXKjOF[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.kXKjOF:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.kXKjOF:focus-visible,.kXKjOF > a.focus-visible,.kXKjOF:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.kXKjOF:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .hTSEii{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;font-size:14px;padding-top:0;padding-bottom:0;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;font-weight:600;background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .hTSEii[data-loading]{cursor:default;}/*!sc*/ .hTSEii[aria-disabled],.hTSEii[data-inactive]{cursor:not-allowed;}/*!sc*/ .hTSEii[aria-disabled] [data-component="ActionList.Checkbox"],.hTSEii[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.hTSEii:focus,.hTSEii:focus-visible,.hTSEii > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .hTSEii [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .hTSEii [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .hTSEii:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .hTSEii:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.hTSEii[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .hTSEii:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.hTSEii[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ .hTSEii::after{position:absolute;top:calc(50% - 12px);left:-8px;width:4px;height:24px;content:"";background-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));border-radius:6px;}/*!sc*/ @media (hover:hover) and (pointer:fine){.hTSEii:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.hTSEii:focus-visible,.hTSEii > a.focus-visible,.hTSEii:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.hTSEii:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ data-styled.g31[id="Item__LiBox-sc-yeql7o-0"]{content:"lnYQME,itjSOb,kXKjOF,hTSEii,"}/*!sc*/ .cJbOew{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:8px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .cJbOew:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .cJbOew:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .cJbOew:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .fuIgwR{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;font-size:12px;font-weight:400;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .fuIgwR:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .fuIgwR:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .fuIgwR:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dibTck{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:24px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;font-size:12px;font-weight:400;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .dibTck:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .dibTck:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .dibTck:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ data-styled.g32[id="Link__StyledLink-sc-14289xe-0"]{content:"cJbOew,fuIgwR,dibTck,"}/*!sc*/ .cnCOhW{font-size:14px;line-height:20px;color:var(--fgColor-default,var(--color-fg-default,#1F2328));vertical-align:middle;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));border:1px solid var(--control-borderColor-rest,var(--borderColor-default,var(--color-border-default,#d0d7de)));border-radius:6px;outline:none;box-shadow:var(--shadow-inset,var(--color-primer-shadow-inset,inset 0 1px 0 rgba(208,215,222,0.2)));display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:32px;overflow:hidden;width:100%;height:2rem;-webkit-transition:width 0.3s ease-in-out;transition:width 0.3s ease-in-out;border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none;min-width:15rem;}/*!sc*/ .cnCOhW input,.cnCOhW textarea{cursor:text;}/*!sc*/ .cnCOhW select{cursor:pointer;}/*!sc*/ .cnCOhW input::-webkit-input-placeholder,.cnCOhW textarea::-webkit-input-placeholder,.cnCOhW select::-webkit-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input::-moz-placeholder,.cnCOhW textarea::-moz-placeholder,.cnCOhW select::-moz-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input:-ms-input-placeholder,.cnCOhW textarea:-ms-input-placeholder,.cnCOhW select:-ms-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input::placeholder,.cnCOhW textarea::placeholder,.cnCOhW select::placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW:focus-within{border-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .cnCOhW > textarea{padding:12px;}/*!sc*/ @media (min-width:768px){.cnCOhW{font-size:14px;}}/*!sc*/ data-styled.g34[id="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0"]{content:"cnCOhW,"}/*!sc*/ .hmJNAM{background-repeat:no-repeat;background-position:right 8px center;padding-left:0;padding-right:0;width:100%;height:2rem;-webkit-transition:width 0.3s ease-in-out;transition:width 0.3s ease-in-out;border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none;min-width:15rem;}/*!sc*/ .hmJNAM > :not(:last-child){margin-right:8px;}/*!sc*/ .hmJNAM .TextInput-icon,.hmJNAM .TextInput-action{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/ .hmJNAM > input,.hmJNAM > select{padding-left:12px;padding-right:12px;}/*!sc*/ data-styled.g35[id="TextInputWrapper-sc-1mqhpbi-1"]{content:"hmJNAM,"}/*!sc*/ .jvumlb{border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;}/*!sc*/ .jvumlb:focus{outline:0;}/*!sc*/ data-styled.g36[id="UnstyledTextInput-sc-14ypya-0"]{content:"jvumlb,"}/*!sc*/ </style></head><body><div id="__next"><a href="#main-content" class="visually-hidden skip-button color-bg-accent-emphasis color-fg-on-emphasis">Skip to main content</a><div data-container="header" class="border-bottom d-unset color-border-muted no-print z-3 color-bg-default Header_header__frpqb"><div data-container="notifications"></div><header class="color-bg-default p-2 position-sticky top-0 z-1 border-bottom" role="banner" aria-label="Main"><div class="d-flex flex-justify-between p-2 flex-items-center flex-wrap" style="row-gap:1rem" data-testid="desktop-header"><div tabindex="-1" class="Header_logoWithClosedSearch__zhF6Q" id="github-logo"><a rel="" class="d-flex flex-items-center color-fg-default no-underline mr-3" href="/en"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path></svg><span class="h4 text-semibold ml-2 mr-3">GitHub Docs</span></a><div class="hide-sm border-left pl-3"><div data-testid="version-picker" class=""><button type="button" aria-label="Select GitHub product version: current version is free-pro-team@latest" class="types__StyledButton-sc-ws60qy-0 hXCKEr color-fg-default width-full p-1 pl-2 pr-2" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" aria-describedby=":Ripn6:-loading-announcement" id=":Ripn6:"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 cEhRXB"><span data-component="text"><span style="white-space:pre-wrap">Version: </span><span class="f5 color-fg-muted text-normal" data-testid="field">Free, Pro, &amp; Team</span></span></span><span data-component="trailingAction" class="Box-sc-g0xbh4-0 dmdEgz"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></div></div><div class="d-flex flex-items-center"><div class="OldHeaderSearchAndWidgets_searchContainerWithClosedSearch__Lkq6t mr-3"><div data-testid="search"><div class="position-relative z-2"><form role="search" class="width-full d-flex"><meta name="viewport" content="width=device-width initial-scale=1"/><label class="text-normal width-full"><span class="visually-hidden" aria-describedby="Enter a search term to find it in the GitHub Docs.">Search GitHub Docs</span><span class="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0 TextInputWrapper-sc-1mqhpbi-1 cnCOhW hmJNAM TextInput-wrapper" aria-busy="false"><input type="search" aria-required="true" data-testid="site-search-input" placeholder="Search GitHub Docs" autoComplete="off" autoCorrect="off" autoCapitalize="off" spellcheck="false" maxLength="512" aria-label="Search GitHub Docs" aria-describedby="Enter a search term to find it in the GitHub Docs." data-component="input" class="UnstyledTextInput-sc-14ypya-0 jvumlb" value=""/></span></label><button data-component="IconButton" type="submit" data-loading="false" data-no-visuals="true" aria-describedby=":Rucpn6:-loading-announcement" aria-labelledby=":R6cpn6:" class="types__StyledButton-sc-ws60qy-0 jOdgLl"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R6cpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Search</span></form></div></div></div><div class="d-none d-lg-flex flex-items-center"><div data-testid="language-picker" class="d-flex"><button data-component="IconButton" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" data-no-visuals="true" aria-describedby=":Rkpn6:-loading-announcement" aria-labelledby=":Rukpn6:" id=":Rkpn6:" class="types__StyledButton-sc-ws60qy-0 hmWbvh"><svg aria-hidden="true" focusable="false" class="octicon octicon-globe" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rukpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Select language: current language is English</span></div></div><button data-component="IconButton" type="button" class="types__StyledButton-sc-ws60qy-0 hmWbvh hide-lg hide-xl d-flex flex-items-center" data-testid="mobile-search-button" aria-expanded="false" data-loading="false" data-no-visuals="true" aria-describedby=":R74pn6:-loading-announcement" aria-labelledby=":R14pn6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R14pn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Search Bar</span><button data-component="IconButton" type="button" class="types__StyledButton-sc-ws60qy-0 lkeyoI px-3" data-testid="mobile-search-button" aria-expanded="false" data-loading="false" data-no-visuals="true" aria-describedby=":R7cpn6:-loading-announcement" aria-labelledby=":R1cpn6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-x" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R1cpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Close Search Bar</span><div><button data-component="IconButton" type="button" data-testid="mobile-menu" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" data-no-visuals="true" aria-describedby=":R1kpn6:-loading-announcement" aria-labelledby=":Rvkpn6:" id=":R1kpn6:" class="types__StyledButton-sc-ws60qy-0 htZXvk"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rvkpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Menu</span></div></div></div><div class="d-flex flex-items-center d-xxl-none mt-2" data-testid="header-subnav"><div class="mr-2" data-testid="header-subnav-hamburger"><button data-component="IconButton" type="button" data-testid="sidebar-hamburger" class="types__StyledButton-sc-ws60qy-0 jCopKa color-fg-muted" data-loading="false" data-no-visuals="true" aria-describedby=":R3b9n6:-loading-announcement" aria-labelledby=":Rb9n6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-three-bars" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rb9n6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Sidebar</span></div><div class="mr-auto width-full" data-search="breadcrumbs"><nav data-testid="breadcrumbs-header" class="f5 breadcrumbs Breadcrumbs_breadcrumbs__xAC4i" aria-label="Breadcrumb" data-container="breadcrumbs"><ul><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps">Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Creating GitHub Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps/creating-github-apps">Creating GitHub Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="About creating GitHub Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps/creating-github-apps/about-creating-github-apps">About creating GitHub Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Migrate from OAuth apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps">Migrate from OAuth apps</a></li></ul></nav></div></div></header></div><div class="d-lg-flex"><div data-container="nav" class="position-sticky d-none border-right d-xxl-block" style="width:326px;height:calc(100vh - 65px);top:65px"><nav aria-labelledby="allproducts-menu"><div class="d-none px-4 pb-3 border-bottom d-xxl-block"><div class="mt-3"><a rel="" class="f6 pl-2 pr-5 ml-n1 pb-1 Link--primary color-fg-default" href="/en"><svg aria-hidden="true" focusable="false" class="octicon octicon-arrow-left mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg>Home</a></div><div class="mt-3" id="allproducts-menu"><a rel="" data-testid="sidebar-product-xl" class="d-block pl-1 mb-2 h3 color-fg-default no-underline _product-title" href="/en/apps">Apps</a></div></div><div class="border-right d-none d-xxl-block bg-primary overflow-y-auto flex-shrink-0" style="width:326px;height:calc(100vh - 175px);padding-bottom:185px"><div data-testid="sidebar" style="overflow-y:auto" class="pt-3"><div class="ml-3" data-testid="product-sidebar"><nav aria-label="Product sidebar" class="NavList__NavBox-sc-1c8ygf7-0"><ul class="List__ListBox-sc-1x7olzq-0 hgjakc"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3b6n6:--label " id=":R3b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 cJbOew" href="/en/apps/overview"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Overview</span></div></a></li><li aria-labelledby=":R5b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R5b6n6:--label " id=":R5b6n6:" aria-expanded="false" aria-controls=":R5b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using GitHub Apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R5b6n6H1:" aria-labelledby=":R5b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqlb6n6:--label " id=":Rqlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/about-using-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About using apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1alb6n6:--label " id=":R1alb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1alb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install from Marketplace for user</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1qlb6n6:--label " id=":R1qlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1qlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install from Marketplace for org</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2alb6n6:--label " id=":R2alb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/installing-a-github-app-from-a-third-party"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2alb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install from third party</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2qlb6n6:--label " id=":R2qlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/installing-your-own-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2qlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install your own app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3alb6n6:--label " id=":R3alb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3alb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Request for org</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3qlb6n6:--label " id=":R3qlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/authorizing-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3qlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authorize</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4alb6n6:--label " id=":R4alb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/approving-updated-permissions-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4alb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Approve new permissions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4qlb6n6:--label " id=":R4qlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/reviewing-and-revoking-authorization-of-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4qlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Review your authorizations</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5alb6n6:--label " id=":R5alb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5alb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Review installations</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5qlb6n6:--label " id=":R5qlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/using-github-apps/internal-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5qlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Internal apps</span></div></a></li></ul></div></li><li aria-labelledby=":R7b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R7b6n6:--label " id=":R7b6n6:" aria-expanded="true" aria-controls=":R7b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Creating GitHub Apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 gzcJGA" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R7b6n6H1:" aria-labelledby=":R7b6n6:" class="Box-sc-g0xbh4-0 enEvIH"><li aria-labelledby=":Rqnb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rqnb6n6:--label " id=":Rqnb6n6:" aria-expanded="true" aria-controls=":Rqnb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About creating GitHub Apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 gzcJGA" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rqnb6n6H1:" aria-labelledby=":Rqnb6n6:" class="Box-sc-g0xbh4-0 enEvIH"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6kqnb6n6:--label " id=":R6kqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6kqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About creating apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rakqnb6n6:--label " id=":Rakqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/about-creating-github-apps/deciding-when-to-build-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rakqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub App versus other options</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rekqnb6n6:--label " id=":Rekqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rekqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Best practices</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 hTSEii"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rikqnb6n6:--label " id=":Rikqnb6n6:" aria-current="page" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rikqnb6n6:--label" class="Box-sc-g0xbh4-0 ivpQTm">Migrate from OAuth apps</span></div></a></li></ul></div></li><li aria-labelledby=":R1anb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1anb6n6:--label " id=":R1anb6n6:" aria-expanded="false" aria-controls=":R1anb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1anb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Registering a GitHub App</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1anb6n6H1:" aria-labelledby=":R1anb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6lanb6n6:--label " id=":R6lanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6lanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Register a GitHub App</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ralanb6n6:--label " id=":Ralanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/about-the-user-authorization-callback-url"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ralanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Callback URL</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Relanb6n6:--label " id=":Relanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/about-the-setup-url"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Relanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Setup URL</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rilanb6n6:--label " id=":Rilanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rilanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Permissions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmlanb6n6:--label " id=":Rmlanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmlanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Webhooks</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqlanb6n6:--label " id=":Rqlanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqlanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Visibility</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rulanb6n6:--label " id=":Rulanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/rate-limits-for-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rulanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Rate limits</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R12lanb6n6:--label " id=":R12lanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/registering-a-github-app/creating-a-custom-badge-for-your-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R12lanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Custom badge</span></div></a></li></ul></div></li><li aria-labelledby=":R1qnb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1qnb6n6:--label " id=":R1qnb6n6:" aria-expanded="false" aria-controls=":R1qnb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1qnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate with a GitHub App</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1qnb6n6H1:" aria-labelledby=":R1qnb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6lqnb6n6:--label " id=":R6lqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6lqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About authentication</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ralqnb6n6:--label " id=":Ralqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ralqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate as an app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Relqnb6n6:--label " id=":Relqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Relqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate as an installation</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rilqnb6n6:--label " id=":Rilqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rilqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate on behalf of users</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmlqnb6n6:--label " id=":Rmlqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmlqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage private keys</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqlqnb6n6:--label " id=":Rqlqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqlqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Generate a JWT</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rulqnb6n6:--label " id=":Rulqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rulqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Generate an installation access token</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R12lqnb6n6:--label " id=":R12lqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R12lqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Generate a user access token</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R16lqnb6n6:--label " id=":R16lqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R16lqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Refresh user access tokens</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1alqnb6n6:--label " id=":R1alqnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/authenticating-with-a-github-app/making-authenticated-api-requests-with-a-github-app-in-a-github-actions-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1alqnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate in Actions workflow</span></div></a></li></ul></div></li><li aria-labelledby=":R2anb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R2anb6n6:--label " id=":R2anb6n6:" aria-expanded="false" aria-controls=":R2anb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R2anb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Writing code for a GitHub App</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R2anb6n6H1:" aria-labelledby=":R2anb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6manb6n6:--label " id=":R6manb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/about-writing-code-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6manb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About writing GitHub App code</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ramanb6n6:--label " id=":Ramanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/quickstart"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ramanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Quickstart</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Remanb6n6:--label " id=":Remanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-github-app-that-responds-to-webhook-events"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Remanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Respond to webhooks</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rimanb6n6:--label " id=":Rimanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-login-with-github-button-with-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rimanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build a &quot;Login&quot; button</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmmanb6n6:--label " id=":Rmmanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-cli-with-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmmanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build a CLI</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqmanb6n6:--label " id=":Rqmanb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqmanb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build CI checks</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":R9b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R9b6n6:--label " id=":R9b6n6:" aria-expanded="false" aria-controls=":R9b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Sharing GitHub Apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R9b6n6H1:" aria-labelledby=":R9b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqpb6n6:--label " id=":Rqpb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/sharing-github-apps/sharing-your-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqpb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share your app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1apb6n6:--label " id=":R1apb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/sharing-github-apps/making-your-github-app-available-for-github-enterprise-server"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1apb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share with GHES</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1qpb6n6:--label " id=":R1qpb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/sharing-github-apps/registering-a-github-app-from-a-manifest"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1qpb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">App manifest</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2apb6n6:--label " id=":R2apb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/sharing-github-apps/registering-a-github-app-using-url-parameters"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2apb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">App query parameters</span></div></a></li></ul></div></li><li aria-labelledby=":Rbb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rbb6n6:--label " id=":Rbb6n6:" aria-expanded="false" aria-controls=":Rbb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Maintaining GitHub Apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rbb6n6H1:" aria-labelledby=":Rbb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqrb6n6:--label " id=":Rqrb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/modifying-a-github-app-registration"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqrb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Modify app settings</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1arb6n6:--label " id=":R1arb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/activating-optional-features-for-github-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1arb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Activate optional features</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1qrb6n6:--label " id=":R1qrb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/about-github-app-managers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1qrb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub App managers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2arb6n6:--label " id=":R2arb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/managing-allowed-ip-addresses-for-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2arb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage allowed IP addresses</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2qrb6n6:--label " id=":R2qrb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/suspending-a-github-app-installation"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2qrb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Suspend an installation</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3arb6n6:--label " id=":R3arb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/transferring-ownership-of-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3arb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Transfer ownership</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3qrb6n6:--label " id=":R3qrb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/apps/maintaining-github-apps/deleting-a-github-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3qrb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Delete your app</span></div></a></li></ul></div></li><li aria-labelledby=":Rdb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdb6n6:--label " id=":Rdb6n6:" aria-expanded="false" aria-controls=":Rdb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub Marketplace</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdb6n6H1:" aria-labelledby=":Rdb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rqtb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rqtb6n6:--label " id=":Rqtb6n6:" aria-expanded="false" aria-controls=":Rqtb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Overview</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rqtb6n6H1:" aria-labelledby=":Rqtb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6kqtb6n6:--label " id=":R6kqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6kqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About GitHub Marketplace for apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rakqtb6n6:--label " id=":Rakqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/github-marketplace-overview/about-marketplace-badges"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rakqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About marketplace badges</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rekqtb6n6:--label " id=":Rekqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/github-marketplace-overview/applying-for-publisher-verification-for-your-organization"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rekqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publisher verification</span></div></a></li></ul></div></li><li aria-labelledby=":R1atb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1atb6n6:--label " id=":R1atb6n6:" aria-expanded="false" aria-controls=":R1atb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1atb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create Marketplace apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1atb6n6H1:" aria-labelledby=":R1atb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6latb6n6:--label " id=":R6latb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6latb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Listing requirements</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ralatb6n6:--label " id=":Ralatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/creating-apps-for-github-marketplace/security-best-practices-for-apps-on-github-marketplace"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ralatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security best practice</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Relatb6n6:--label " id=":Relatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/creating-apps-for-github-marketplace/customer-experience-best-practices-for-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Relatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Customer experience best practice</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rilatb6n6:--label " id=":Rilatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/creating-apps-for-github-marketplace/viewing-metrics-for-your-listing"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rilatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">View listing metrics</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmlatb6n6:--label " id=":Rmlatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/creating-apps-for-github-marketplace/viewing-transactions-for-your-listing"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmlatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">View listing transactions</span></div></a></li></ul></div></li><li aria-labelledby=":R1qtb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1qtb6n6:--label " id=":R1qtb6n6:" aria-expanded="false" aria-controls=":R1qtb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1qtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Marketplace API usage</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1qtb6n6H1:" aria-labelledby=":R1qtb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6lqtb6n6:--label " id=":R6lqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/rest-endpoints-for-the-github-marketplace-api"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6lqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">REST API</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ralqtb6n6:--label " id=":Ralqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/webhook-events-for-the-github-marketplace-api"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ralqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Webhook events</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Relqtb6n6:--label " id=":Relqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/testing-your-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Relqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Testing your app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rilqtb6n6:--label " id=":Rilqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-new-purchases-and-free-trials"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rilqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">New purchases &amp; free trials</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmlqtb6n6:--label " id=":Rmlqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-plan-changes"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmlqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Handling plan changes</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqlqtb6n6:--label " id=":Rqlqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-plan-cancellations"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqlqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Plan cancellations</span></div></a></li></ul></div></li><li aria-labelledby=":R2atb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R2atb6n6:--label " id=":R2atb6n6:" aria-expanded="false" aria-controls=":R2atb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R2atb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">List an app on the Marketplace</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R2atb6n6H1:" aria-labelledby=":R2atb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6matb6n6:--label " id=":R6matb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/drafting-a-listing-for-your-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6matb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Draft an app listing</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ramatb6n6:--label " id=":Ramatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/writing-a-listing-description-for-your-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ramatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Write listing descriptions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rematb6n6:--label " id=":Rematb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/setting-pricing-plans-for-your-listing"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rematb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Set listing pricing plans</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rimatb6n6:--label " id=":Rimatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/configuring-a-webhook-to-notify-you-of-plan-changes"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rimatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Webhooks for plan changes</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rmmatb6n6:--label " id=":Rmmatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/submitting-your-listing-for-publication"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rmmatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Submit your listing</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqmatb6n6:--label " id=":Rqmatb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/listing-an-app-on-github-marketplace/deleting-your-app-listing-from-github-marketplace"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqmatb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Delete your listing</span></div></a></li></ul></div></li><li aria-labelledby=":R2qtb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R2qtb6n6:--label " id=":R2qtb6n6:" aria-expanded="false" aria-controls=":R2qtb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R2qtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Sell apps on the Marketplace</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R2qtb6n6H1:" aria-labelledby=":R2qtb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6mqtb6n6:--label " id=":R6mqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/selling-your-app-on-github-marketplace/pricing-plans-for-github-marketplace-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6mqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Pricing plans for apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Ramqtb6n6:--label " id=":Ramqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/selling-your-app-on-github-marketplace/billing-customers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Ramqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Billing customers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Remqtb6n6:--label " id=":Remqtb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/github-marketplace/selling-your-app-on-github-marketplace/receiving-payment-for-app-purchases"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Remqtb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Receive payment</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rfb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rfb6n6:--label " id=":Rfb6n6:" aria-expanded="false" aria-controls=":Rfb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OAuth apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rfb6n6H1:" aria-labelledby=":Rfb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rqvb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rqvb6n6:--label " id=":Rqvb6n6:" aria-expanded="false" aria-controls=":Rqvb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using OAuth apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rqvb6n6H1:" aria-labelledby=":Rqvb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3aqvb6n6:--label " id=":R3aqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/installing-an-oauth-app-in-your-personal-account"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3aqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install app personal account</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5aqvb6n6:--label " id=":R5aqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/installing-an-oauth-app-in-your-organization"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5aqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Install app organization</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R7aqvb6n6:--label " id=":R7aqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R7aqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authorizing OAuth apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R9aqvb6n6:--label " id=":R9aqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R9aqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Review OAuth apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rbaqvb6n6:--label " id=":Rbaqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/connecting-with-third-party-applications"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rbaqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Third-party applications</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdaqvb6n6:--label " id=":Rdaqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/using-oauth-apps/internal-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdaqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Internal apps</span></div></a></li></ul></div></li><li aria-labelledby=":R1avb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1avb6n6:--label " id=":R1avb6n6:" aria-expanded="false" aria-controls=":R1avb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1avb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Building OAuth apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1avb6n6H1:" aria-labelledby=":R1avb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3bavb6n6:--label " id=":R3bavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3bavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub Apps &amp; OAuth apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5bavb6n6:--label " id=":R5bavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/rate-limits-for-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5bavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Rate limits</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R7bavb6n6:--label " id=":R7bavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R7bavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Creating an OAuth app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R9bavb6n6:--label " id=":R9bavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R9bavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticate with an OAuth app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rbbavb6n6:--label " id=":Rbbavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rbbavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authorizing OAuth apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdbavb6n6:--label " id=":Rdbavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdbavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Scopes for OAuth apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rfbavb6n6:--label " id=":Rfbavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/creating-a-custom-badge-for-your-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rfbavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create custom badges</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rhbavb6n6:--label " id=":Rhbavb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/building-oauth-apps/best-practices-for-creating-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rhbavb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Best practices</span></div></a></li></ul></div></li><li aria-labelledby=":R1qvb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1qvb6n6:--label " id=":R1qvb6n6:" aria-expanded="false" aria-controls=":R1qvb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1qvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Maintaining OAuth apps</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg sx="[object Object]" aria-hidden="true" focusable="false" class="octicon octicon-chevron-down Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1qvb6n6H1:" aria-labelledby=":R1qvb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3bqvb6n6:--label " id=":R3bqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/modifying-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3bqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Modifying an OAuth app</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5bqvb6n6:--label " id=":R5bqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/activating-optional-features-for-oauth-apps"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5bqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Activate optional features</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R7bqvb6n6:--label " id=":R7bqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/transferring-ownership-of-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R7bqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Transfer ownership</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R9bqvb6n6:--label " id=":R9bqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R9bqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Troubleshoot authorization</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rbbqvb6n6:--label " id=":Rbbqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-oauth-app-access-token-request-errors"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rbbqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Troubleshoot token request</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdbqvb6n6:--label " id=":Rdbqvb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/apps/oauth-apps/maintaining-oauth-apps/deleting-an-oauth-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdbqvb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deleting an OAuth app</span></div></a></li></ul></div></li></ul></div></li></ul></nav></div></div></div></nav></div><div class="flex-column flex-1 min-width-0"><main id="main-content" style="scroll-margin-top:5rem"><div class="container-xl px-3 px-md-6 my-4"><div class="d-none d-xxl-block mt-3 mr-auto width-full"><nav data-testid="breadcrumbs-in-article" class="f5 breadcrumbs Breadcrumbs_breadcrumbs__xAC4i" aria-label="Breadcrumb" data-container="breadcrumbs"><ul><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps">Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Creating GitHub Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps/creating-github-apps">Creating GitHub Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="About creating GitHub Apps" class="Link--primary mr-2 color-fg-muted" href="/en/apps/creating-github-apps/about-creating-github-apps">About creating GitHub Apps</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Migrate from OAuth apps" class="Link--primary mr-2 color-fg-muted d-none" href="/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps">Migrate from OAuth apps</a></li></ul></nav></div><div class="ArticleGridLayout_containerBox__lLLio"><div class="Box-sc-g0xbh4-0 eQiQea"><div class="d-flex flex-items-baseline flex-justify-between" data-container="title"><h1 id="title-h1" class="border-bottom-0">Migrating OAuth apps to GitHub Apps</h1></div></div><div id="article-intro" class="Box-sc-g0xbh4-0 ijSsTo f4 pb-4"><div class="f2 color-fg-muted mb-3 Lead_container__m3L5f _page-intro" data-container="lead" data-testid="lead" data-search="lead"><p>Learn about the advantages of migrating your OAuth app to a GitHub App, and learn how to migrate your OAuth app.</p></div></div><div data-container="toc" class="Box-sc-g0xbh4-0 giVcWX ArticleGridLayout_sidebarBox__Cj_03 border-bottom border-lg-0 pb-4 mb-5 pb-xl-0 mb-xl-0"><h2 id="in-this-article" class="Heading__StyledHeading-sc-1c1dgg0-0 bebFBv mb-1 ml-3" aria-label="In this article">In this article</h2><nav data-testid="minitoc" class="NavList__NavBox-sc-1c8ygf7-0 Minitocs_miniToc__NaGol my-2" aria-labelledby="in-this-article"><ul class="List__ListBox-sc-1x7olzq-0 hgjakc"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R1dkteqn6:--label " id=":R1dkteqn6:" aria-current="false" href="#benefits-of-migrating-from-oauth-apps-to-github-apps" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Benefits of migrating from OAuth apps to GitHub Apps</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R1lkteqn6:--label " id=":R1lkteqn6:" aria-current="false" href="#converting-an-oauth-app-to-a-github-app" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1lkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Converting an OAuth app to a GitHub App</span></div></a></li></ul></nav></div><div data-container="article" data-search="article-body" class="Box-sc-g0xbh4-0 kohLxz"><div id="article-contents"><div class="MarkdownContent_markdownBody__v5MYy markdown-body"><h2 id="benefits-of-migrating-from-oauth-apps-to-github-apps" tabindex="-1"><a class="heading-link" href="#benefits-of-migrating-from-oauth-apps-to-github-apps">Benefits of migrating from OAuth apps to GitHub Apps<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>GitHub Apps are the recommended way to integrate with GitHub. GitHub Apps offer many advantages over OAuth apps, including:</p> <ul> <li>Enhanced security features, like fine-grained permissions, choice over repository access, and short lived tokens</li> <li>The ability to act independently of or on behalf of a user</li> <li>Scalable rate limits</li> <li>Built-in webhooks</li> </ul> <p>For more information, see <a href="/en/apps/creating-github-apps/setting-up-a-github-app/about-creating-github-apps#using-a-github-app-instead-of-an-oauth-app">About creating GitHub Apps</a>.</p> <h2 id="converting-an-oauth-app-to-a-github-app" tabindex="-1"><a class="heading-link" href="#converting-an-oauth-app-to-a-github-app">Converting an OAuth app to a GitHub App<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>The following steps provide an overview of how to migrate from an OAuth app to a GitHub App. The specific steps depend on your app.</p> <h3 id="1-review-your-oauth-app" tabindex="-1"><a class="heading-link" href="#1-review-your-oauth-app">1. Review your OAuth app<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Re-familiarize yourself with the code for your OAuth app. The API requests that your OAuth app makes will help you decide what permissions to select for your GitHub App.</p> <p>Additionally, there are a few REST API endpoints that are not available for OAuth apps. Verify that any REST endpoints that you use are available for GitHub Apps by reviewing <a href="/en/rest/overview/endpoints-available-for-github-apps">Endpoints available for GitHub App installation access tokens</a>.</p> <h3 id="2-register-a-github-app" tabindex="-1"><a class="heading-link" href="#2-register-a-github-app">2. Register a GitHub App<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Register a new GitHub App. For more information, see <a href="/en/apps/creating-github-apps/creating-github-apps/creating-a-github-app">Registering a GitHub App</a>.</p> <p>Compared to an OAuth app, you have more control over GitHub App settings. Some key additions are:</p> <ul> <li> <p>Unlike an OAuth app, which always acts on behalf of a user, you can make your GitHub App take actions as itself or on behalf of a user. If you do not want your new GitHub App to take actions on behalf of a user, you can skip the "Identifying and authorizing users" settings. For more information, see <a href="/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app">About authentication with a GitHub App</a>.</p> </li> <li> <p>You can use webhooks to notify your GitHub App when specific events occur. Unlike webhooks for OAuth apps, which you must configure via the API for each repository or organization, webhooks are built into GitHub Apps. When you register your GitHub App, you can select the webhook events that you want to receive. Additionally, if your OAuth app currently uses polling to determine if an event had occurred, consider subscribing to webhooks instead to help your GitHub App stay within the rate limit. For more information, see <a href="/en/apps/creating-github-apps/creating-github-apps/using-webhooks-with-github-apps">Using webhooks with GitHub Apps</a>.</p> </li> <li> <p>With an OAuth app, you request scopes when a user authorizes your app. With a GitHub App, you specify permissions in the app settings. These permissions are more granular than scopes and enable you to only select the permissions that your app needs. Additionally, these permissions are mapped to REST API endpoints and webhook events, so you can easily determine what permissions your GitHub App needs in order to access a specific REST API endpoint or subscribe to a specific webhook. Permissions are not currently documented for GraphQL requests. For more information, see <a href="/en/apps/creating-github-apps/creating-github-apps/choosing-permissions-for-a-github-app">Choosing permissions for a GitHub App</a>.</p> </li> </ul> <h3 id="3-modify-the-code-for-your-app" tabindex="-1"><a class="heading-link" href="#3-modify-the-code-for-your-app">3. Modify the code for your app<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Once you have registered a GitHub App, adapt the code from your old OAuth app to work with your new GitHub App.</p> <h4 id="update-authentication" tabindex="-1"><a class="heading-link" href="#update-authentication">Update authentication<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>You will need to update your app's code to handle API authentication for your GitHub App. A GitHub App can authenticate in three ways:</p> <ul> <li>As the app itself, in order to get or modify details about the GitHub App registration or to create an installation access token. For more information, see <a href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app">Authenticating as a GitHub App</a>.</li> <li>As an app installation, in order to take actions on behalf of itself. For more information, see <a href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation">Authenticating as a GitHub App installation</a>.</li> <li>On behalf of a user, in order to attribute actions to a user. For more information, see <a href="/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user">Authenticating with a GitHub App on behalf of a user</a>.</li> </ul> <p>If you are using GitHub's official Octokit.js library, you can use the built-in <code>App</code> object to authenticate. For examples, see <a href="/en/rest/guides/scripting-with-the-rest-api-and-javascript">Scripting with the REST API and JavaScript</a> and <a href="/en/apps/creating-github-apps/guides/building-a-github-app-that-responds-to-webhook-events">Building a GitHub App that responds to webhook events</a>.</p> <h4 id="review-rate-limits" tabindex="-1"><a class="heading-link" href="#review-rate-limits">Review rate limits<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>Review the differences in rate limits between OAuth apps and GitHub Apps. GitHub Apps use sliding rules for rate limits, which can increase based on the number of repositories and number of users in the organization. For more information, see <a href="/en/apps/creating-github-apps/creating-github-apps/rate-limits-for-github-apps">Rate limits for GitHub Apps</a>.</p> <p>If possible, consider using conditional requests and subscribing to webhooks instead of polling to help you stay within rate limits. For more information about conditional requests, see <a href="/en/rest/guides/best-practices-for-using-the-rest-api">Best practices for using the REST API</a>. For more information about using webhooks with your GitHub App, see <a href="/en/apps/creating-github-apps/creating-github-apps/using-webhooks-with-github-apps">Using webhooks with GitHub Apps</a> and <a href="/en/apps/creating-github-apps/guides/building-a-github-app-that-responds-to-webhook-events">Building a GitHub App that responds to webhook events</a>.</p> <h4 id="test-your-code" tabindex="-1"><a class="heading-link" href="#test-your-code">Test your code<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>Test your new GitHub App to make sure that your code works as expected.</p> <h3 id="4-publicize-your-new-github-app" tabindex="-1"><a class="heading-link" href="#4-publicize-your-new-github-app">4. Publicize your new GitHub App<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>If you want other accounts to be able to use your new GitHub App, make sure that your app is public. If you want to make your GitHub App more discoverable, list your app in GitHub Marketplace. For more information, see <a href="/en/apps/publishing-apps-to-github-marketplace/github-marketplace-overview/about-github-marketplace">About GitHub Marketplace for apps</a> and <a href="/en/apps/creating-github-apps/creating-github-apps/making-a-github-app-public-or-private">Making a GitHub App public or private</a>.</p> <h3 id="5-instruct-your-users-to-migrate" tabindex="-1"><a class="heading-link" href="#5-instruct-your-users-to-migrate">5. Instruct your users to migrate<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Once your new GitHub App is ready, instruct users of your old OAuth app to migrate to your new GitHub App. There is not a way to automatically migrate your users. Each user must install and/or authorize your GitHub App on their own.</p> <p>As the app owner, you should include calls to action to encourage your users to install/authorize the new GitHub App and revoke authorization for the old OAuth app. You should also update any documentation or user interface elements.</p> <h4 id="prompt-users-to-install-your-github-app" tabindex="-1"><a class="heading-link" href="#prompt-users-to-install-your-github-app">Prompt users to install your GitHub App<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>If you want your GitHub App to make API requests on behalf of itself or access organization or repository resources, the user must install your GitHub App. When a user installs a GitHub App on their account or organization, they choose which repositories the app can access, and they grant the app the organization and repository permissions that it requested.</p> <p>To help your users install your GitHub App, you can add a link to your app's webpage that users can click to install the GitHub App. The format of the install URL is <code>https://github.com/apps/YOUR_APP_NAME/installations/new</code>. Replace <code>YOUR_APP_NAME</code> with the sluggified name of your GitHub App, which you can find in the "Public link" field on the settings page for your GitHub App.</p> <p>To pre-select any repositories your OAuth app had access to, you can append <code>/permissions</code> and query parameters to the install URL. This helps users grant your GitHub App access to repositories that your OAuth app already has access to. The query parameters are:</p> <ul> <li><code>suggested_target_id</code>: The ID of the user or organization that is installing your GitHub App. This parameter is required.</li> <li><code>repository_ids[]</code>: The repository IDs to select for the installation. If omitted, all repositories are selected. The maximum number of repositories that can be pre-selected is 100. To get a list of repositories that your OAuth app has access to, use the <a href="/en/rest/repos/repos#list-repositories-for-the-authenticated-user">List repositories for the authenticated user</a> and <a href="/en/rest/repos/repos#list-organization-repositories">List organization repositories</a> endpoints.</li> </ul> <p>For example: <code>https://github.com/apps/YOUR_APP_NAME/installations/new/permissions?suggested_target_id=ID_OF_USER_OR_ORG&#x26;repository_ids[]=REPO_A_ID&#x26;repository_ids[]=REPO_B_ID</code>.</p> <p>For more information about installing GitHub Apps, see <a href="/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account">Installing a GitHub App from GitHub Marketplace for your personal account</a>, <a href="/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations">Installing a GitHub App from GitHub Marketplace for your organizations</a>, <a href="/en/apps/using-github-apps/installing-a-github-app-from-a-third-party">Installing a GitHub App from a third party</a> and <a href="/en/apps/using-github-apps/installing-your-own-github-app">Installing your own GitHub App</a>.</p> <h4 id="prompt-users-to-authorize-your-app" tabindex="-1"><a class="heading-link" href="#prompt-users-to-authorize-your-app">Prompt users to authorize your app<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>If you want your GitHub App to make API requests on behalf of a user, the user must authorize the app. When a user authorizes an app, they grant the app permission to act on their behalf, and they grant the account permissions that the app requested. If the app is installed on an organization account, each user within that organization must authorize the app in order for the app to act on their behalf.</p> <p>To prompt users to authorize your app, you will lead them through the web application flow or device flow. For more information, see <a href="/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app">Generating a user access token for a GitHub App</a>.</p> <p>For more information about authorizing GitHub Apps, see <a href="/en/apps/using-github-apps/authorizing-github-apps">Authorizing GitHub Apps</a>.</p> <h4 id="encourage-your-users-to-revoke-oauth-app-access" tabindex="-1"><a class="heading-link" href="#encourage-your-users-to-revoke-oauth-app-access">Encourage your users to revoke OAuth app access<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>You should also encourage your users to revoke access for your old OAuth app. This will help you fully transition away from your OAuth app and will help keep your users' data secure. For more information, see <a href="/en/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-applications-oauth">Reviewing your authorized OAuth apps</a>.</p> <h4 id="update-any-interfaces-or-documentation" tabindex="-1"><a class="heading-link" href="#update-any-interfaces-or-documentation">Update any interfaces or documentation<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <p>You should update any user interface or documentation related to your app to reflect the change from an OAuth app to GitHub App.</p> <h3 id="6-remove-webhooks-for-your-old-oauth-app" tabindex="-1"><a class="heading-link" href="#6-remove-webhooks-for-your-old-oauth-app">6. Remove webhooks for your old OAuth app<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>When a user installs your GitHub App and grants access to a repository, you should remove any webhooks for your old OAuth app. If your new GitHub App and your old OAuth app respond to webhooks for the same event, the user may observe duplicate behavior.</p> <p>To remove repository webhooks, you can listen for the <code>installation_repositories</code> webhook with the <code>added</code> action. When your GitHub App receives that event, you can use the REST API to delete the webhook on those repositories for your OAuth app. For more information, see <a href="/en/webhooks-and-events/webhooks/webhook-events-and-payloads?actionType=added#installation_repositories">Webhook events and payloads</a> and <a href="/en/rest/webhooks#delete-a-repository-webhook">REST API endpoints for repository webhooks</a>.</p> <p>Similarly, to remove organization webhooks, you can listen for the <code>installation</code> webhook with the <code>created</code> action. When your GitHub App receives that event for an organization, you can use the REST API to delete the webhook on that organization and corresponding repositories for your OAuth app. For more information, see <a href="/en/webhooks-and-events/webhooks/webhook-events-and-payloads?actionType=created#installation">Webhook events and payloads</a>, <a href="/en/rest/orgs/webhooks#delete-an-organization-webhook">REST API endpoints for organization webhooks</a>, and <a href="/en/rest/webhooks#delete-a-repository-webhook">REST API endpoints for repository webhooks</a>.</p> <h3 id="7-delete-your-old-oauth-app" tabindex="-1"><a class="heading-link" href="#7-delete-your-old-oauth-app">7. Delete your old OAuth app<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Once your users have migrated to your new GitHub App, you should delete your old OAuth app. This will help avoid abuse of the OAuth app's credentials. This action will also revoke all of the OAuth app's remaining authorizations. For more information, see <a href="/en/apps/oauth-apps/maintaining-oauth-apps/deleting-an-oauth-app">Deleting an OAuth app</a>. If your OAuth app is listed on GitHub Marketplace, you may need to contact GitHub Support to remove your app from the marketplace first.</p></div></div></div></div></div></main><footer data-container="footer"><section class="container-xl mt-lg-8 mt-6 px-3 px-md-6 no-print mx-auto"><h2 class="f3">Help and support</h2><div class="container-xl mx-auto py-6 py-lg-6 clearfix border-top border-color-secondary"><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-3"><form class="f5" data-testid="survey-form" aria-live="polite"><h3 id="survey-title" class="f4 mb-3">Did you find what you needed?</h3><input type="text" class="d-none" name="survey-token" value=""/><div class="mb-2" role="radiogroup" aria-labelledby="survey-title"><input class="Survey_visuallyHidden__Xh_nl Survey_customRadio__aNqUl" id="survey-yes" type="radio" name="survey-vote" aria-label="Yes" value="Y"/><label class="btn mr-1" for="survey-yes"><svg aria-hidden="true" focusable="false" class="octicon octicon-thumbsup color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8.347.631A.75.75 0 0 1 9.123.26l.238.04a3.25 3.25 0 0 1 2.591 4.098L11.494 6h.665a3.25 3.25 0 0 1 3.118 4.167l-1.135 3.859A2.751 2.751 0 0 1 11.503 16H6.586a3.75 3.75 0 0 1-2.184-.702A1.75 1.75 0 0 1 3 16H1.75A1.75 1.75 0 0 1 0 14.25v-6.5C0 6.784.784 6 1.75 6h3.417a.25.25 0 0 0 .217-.127ZM4.75 13.649l.396.33c.404.337.914.521 1.44.521h4.917a1.25 1.25 0 0 0 1.2-.897l1.135-3.859A1.75 1.75 0 0 0 12.159 7.5H10.5a.75.75 0 0 1-.721-.956l.731-2.558a1.75 1.75 0 0 0-1.127-2.14L6.69 6.611a1.75 1.75 0 0 1-1.523.889H4.75ZM3.25 7.5h-1.5a.25.25 0 0 0-.25.25v6.5c0 .138.112.25.25.25H3a.25.25 0 0 0 .25-.25Z"></path></svg> <!-- -->Yes</label><input class="Survey_visuallyHidden__Xh_nl Survey_customRadio__aNqUl" id="survey-no" type="radio" name="survey-vote" aria-label="No" value="N"/><label class="btn" for="survey-no"><svg aria-hidden="true" focusable="false" class="octicon octicon-thumbsdown color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.653 15.369a.75.75 0 0 1-.776.371l-.238-.04a3.25 3.25 0 0 1-2.591-4.099L4.506 10h-.665A3.25 3.25 0 0 1 .723 5.833l1.135-3.859A2.75 2.75 0 0 1 4.482 0H9.43c.78.003 1.538.25 2.168.702A1.752 1.752 0 0 1 12.989 0h1.272A1.75 1.75 0 0 1 16 1.75v6.5A1.75 1.75 0 0 1 14.25 10h-3.417a.25.25 0 0 0-.217.127ZM11.25 2.351l-.396-.33a2.248 2.248 0 0 0-1.44-.521H4.496a1.25 1.25 0 0 0-1.199.897L2.162 6.256A1.75 1.75 0 0 0 3.841 8.5H5.5a.75.75 0 0 1 .721.956l-.731 2.558a1.75 1.75 0 0 0 1.127 2.14L9.31 9.389a1.75 1.75 0 0 1 1.523-.889h.417Zm1.5 6.149h1.5a.25.25 0 0 0 .25-.25v-6.5a.25.25 0 0 0-.25-.25H13a.25.25 0 0 0-.25.25Z"></path></svg> <!-- -->No</label></div><a rel="" class="f6 text-underline" target="_blank" href="/en/site-policy/privacy-policies/github-privacy-statement">Privacy policy</a></form></div><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-4 offset-xl-1"><div class="f5 contribution"><h3 class="f4 mb-3">Help us make these docs great!</h3><p class="max-w-xs color-fg-muted mb-3">All GitHub docs are open source. See something that&#x27;s wrong or unclear? Submit a pull request.</p><a class="btn" href="https://github.com/github/docs/blob/main/content/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps.md"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg>Make a contribution</a><p class="color-fg-muted f6 mt-2"><a class="text-underline" href="/contributing" target="_blank" rel="noopener">Learn how to contribute</a></p></div></div><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-3 offset-xl-1"><div><h3 class="mb-3 f4">Still need help?</h3><div class="mb-2"><a id="ask-community" href="https://github.com/orgs/community/discussions" class="text-underline"><svg aria-hidden="true" focusable="false" class="octicon octicon-people octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path></svg>Ask the GitHub community</a></div><div><a id="support" href="https://support.github.com" class="text-underline"><svg aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Contact support</a></div></div></div></div></section><section class="container-xl px-3 mt-6 pb-8 px-md-6 color-fg-muted"><h2 class="f4 mb-2 col-12">Legal</h2><ul class="d-flex flex-wrap list-style-none"><li class="mr-3">© <!-- -->2025<!-- --> GitHub, Inc.</li><li class="mr-3"><a class="text-underline" href="/en/site-policy/github-terms/github-terms-of-service">Terms</a></li><li class="mr-3"><a class="text-underline" href="/en/site-policy/privacy-policies/github-privacy-statement">Privacy</a></li><li class="mr-3"><a class="text-underline" href="https://www.githubstatus.com/">Status</a></li><li class="mr-3"><a class="text-underline" href="https://github.com/pricing">Pricing</a></li><li class="mr-3"><a class="text-underline" href="https://services.github.com">Expert services</a></li><li class="mr-3"><a class="text-underline" href="https://github.blog">Blog</a></li></ul></section><div role="tooltip" class="position-fixed bottom-0 mb-4 right-0 mr-4 z-1 ScrollButton_transition200__rLxBo ScrollButton_opacity0__vjKQD"><button class="ghd-scroll-to-top tooltipped tooltipped-n tooltipped-no-delay btn circle border-1 d-flex flex-items-center flex-justify-center ScrollButton_customFocus__L3FsX" style="width:40px;height:40px" aria-label="Scroll to top"><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.22 10.53a.749.749 0 0 1 0-1.06l4.25-4.25a.749.749 0 0 1 1.06 0l4.25 4.25a.749.749 0 1 1-1.06 1.06L8 6.811 4.28 10.53a.749.749 0 0 1-1.06 0Z"></path></svg></button></div></footer></div></div><script type="application/json" id="__PRIMER_DATA_:R16:__">{"resolvedServerColorMode":"day"}</script></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"mainContext":{"breadcrumbs":[{"href":"/en/apps","title":"Apps"},{"href":"/en/apps/creating-github-apps","title":"Creating GitHub Apps"},{"href":"/en/apps/creating-github-apps/about-creating-github-apps","title":"About creating GitHub Apps"},{"href":"/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps","title":"Migrate from OAuth apps"}],"communityRedirect":{},"currentProduct":{"id":"apps","name":"Apps","href":"/apps","dir":"content/apps","toc":"content/apps/index.md","wip":false,"hidden":false,"versions":["free-pro-team@latest","enterprise-cloud@latest","enterprise-server@3.16","enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12"]},"currentProductName":"Apps","isHomepageVersion":false,"error":"","data":{"ui":{"alerts":{"NOTE":"Note","IMPORTANT":"Important","WARNING":"Warning","TIP":"Tip","CAUTION":"Caution"},"header":{"github_docs":"GitHub Docs","contact":"Contact","notices":{"release_candidate":" is currently available as a \u003ca href=\"/admin/overview/about-upgrades-to-new-releases\"\u003erelease candidate\u003c/a\u003e.","early_access":"📣 Please \u003cb\u003edo not share\u003c/b\u003e this URL publicly. This page contains content about a private preview feature.","release_notes_use_latest":"Please use the latest release for the latest security, performance, and bug fixes.","ghes_release_notes_upgrade_patch_only":"📣 This is not the \u003ca href=\"#{{ latestPatch }}\"\u003elatest patch release\u003c/a\u003e of Enterprise Server.","ghes_release_notes_upgrade_release_only":"📣 This is not the \u003ca href=\"/enterprise-server@{{ latestRelease }}/admin/release-notes\"\u003elatest release\u003c/a\u003e of Enterprise Server.","ghes_release_notes_upgrade_patch_and_release":"📣 This is not the \u003ca href=\"#{{ latestPatch }}\"\u003elatest patch release\u003c/a\u003e of this release series, and this is not the \u003ca href=\"/enterprise-server@{{ latestRelease }}/admin/release-notes\"\u003elatest release\u003c/a\u003e of Enterprise Server."},"sign_up_cta":"Sign up","menu":"Menu","open_menu_label":"Open menu","go_home":"Home"},"search":{"input":{"aria_label":"Open search overlay","placeholder":"Search or ask Copilot"},"overlay":{"input_aria_label":"Search or ask Copilot","suggestions_list_aria_label":"Search suggestions","ai_suggestions_list_aria_label":"Copilot search suggestions","general_suggestions_list_aria_label":"Docs search suggestions","general_suggestions_list_heading":"Search docs","ai_autocomplete_list_heading":"Ask Copilot","give_feedback":"Give feedback","beta_tag":"Beta","return_to_search":"Return to search","clear_search_query":"Clear","view_all_search_results":"View all {{length}} results","no_results_found":"No results found"},"ai":{"disclaimer":"Copilot uses AI. Check for mistakes by reviewing the links in the response.","references":"References from these articles","loading_status_message":"Loading Copilot response...","done_loading_status_message":"Done loading Copilot response","unable_to_answer":"Sorry, I'm unable to answer that question. Please try a different query or search our docs.","copy_answer":"Copy answer","copied_announcement":"Copied!","thumbs_up":"This answer was helpful","thumbs_down":"This answer was not helpful","thumbs_announcement":"Thank you for your feedback!"},"failure":{"general_title":"There was an error loading search results.","ai_title":"There was an error loading Copilot.","description":"You can still use this field to search our docs."}},"old_search":{"description":"Enter a search term to find it in the GitHub Docs.","placeholder":"Search GitHub Docs","label":"Search GitHub Docs"},"survey":{"able_to_find":"Did you find what you needed?","yes":"Yes","no":"No","cancel":"Cancel","additional_feedback":"Can you tell us more about your rating? (Optional)","optional":"Optional","required":"Required","email_label":"Leave your email if we can contact you. (Optional)","email_validation":"Please enter a valid email address","send":"Send","feedback":"Thank you! We received your feedback.","not_support":"If you need a reply, please contact \u003ca href=\"https://support.github.com/\"\u003esupport\u003c/a\u003e.","privacy_policy":"Privacy policy","server_error":"Unable to process comment at the moment. Please try again."},"toc":{"getting_started":"Getting started","popular":"Popular","startHere":"Start here","whats_new":"What's new","videos":"Videos","all_changelogs":"All changelog posts"},"meta":{"default_description":"Get started, troubleshoot, and make the most of GitHub. Documentation for new users, developers, administrators, and all of GitHub's products."},"scroll_button":{"scroll_to_top":"Scroll to top"},"pages":{"article_version":"Article version","miniToc":"In this article","all_enterprise_releases":"All Enterprise Server releases","about_versions":"About versions","permissions_callout_title":"Who can use this feature?","video_from_transcript":"See video for this transcript"},"picker":{"language_picker_label":"Language","product_picker_default_text":"All products","version_picker_default_text":"Choose a version"},"footer":{"support_heading":"Help and support","legal_heading":"Legal","imprint":"Imprint","terms":"Terms","privacy":"Privacy","status":"Status","pricing":"Pricing","expert_services":"Expert services","blog":"Blog"},"contribution_cta":{"title":"Help us make these docs great!","body":"All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.","button":"Make a contribution","to_guidelines":"Learn how to contribute"},"support":{"still_need_help":"Still need help?","contact_support":"Contact support","ask_community":"Ask the GitHub community"},"rest":{"banner":{"api_versioned":"The REST API is now versioned.","api_version_info":"For more information, see \"\u003ca href=\"{{ versionWithApiVersion }}/rest/overview/api-versions\"\u003eAbout API versioning\u003c/a\u003e.\"","ghes_api_versioned":"After a site administrator upgrades your Enterprise Server instance to {{ firstGhesReleaseWithApiVersions.versionTitle }} or later, the REST API will be versioned. To learn how to find your instance's version, see \"\u003ca href=\"/{{ currentVersion }}/get-started/learning-about-github/about-versions-of-github-docs#github-enterprise-server\"\u003eAbout versions of GitHub Docs\u003c/a\u003e\".","redirect_notice":"We've recently moved some of the REST API documentation.","redirect_repo":"If you can't find what you're looking for, you might try the new {{ newRestPagesLinks }} REST API pages.","redirect_enterprise":"If you can't find what you're looking for, you might try the {{ actionsPageLink }} REST API page.","actions_api_title":"Actions"},"versioning":{"about_versions":"About REST API versions"},"overview":{"permissions":{"access":"Access","endpoints":"Endpoint","tokens":"Token types","additionalPermissions":"Additional permissions","uat":"UAT","iat":"IAT"}},"screen_reader_text_checkmark_icon":"Multiple permissions are required, or a different permission may be used. For more information about the permissions, see the documentation for this endpoint."},"domain_edit":{"name":"Domain name","edit":"Edit","edit_your":"Edit your domain name","experimental":"Experimental","your_name":"Your domain name","cancel":"Cancel","save":"Save","snippet_about":"Updating will include the new domain name in all code snippets across GitHub Docs.","learn_more":"Learn more","submission_failed":"Submission failed. Please try again in a minute."},"cookbook_landing":{"spotlight":"Spotlight","explore_articles":"Explore {{ number }} prompt articles","reset_filters":"Reset filters","search_articles":"Search articles","category":"Category","complexity":"Complexity"},"popovers":{"role_description":"hovercard link"}},"reusables":{},"variables":{"release_candidate":{"version":"enterprise-server@3.16"}}},"currentCategory":"creating-github-apps","currentPathWithoutLanguage":"/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps","page":{"documentType":"article","type":null,"title":"Migrating OAuth apps to GitHub Apps","fullTitle":"Migrating OAuth apps to GitHub Apps - GitHub Docs","topics":["GitHub Apps"],"introPlainText":"Learn about the advantages of migrating your OAuth app to a GitHub App, and learn how to migrate your OAuth app.","applicableVersions":["free-pro-team@latest","enterprise-cloud@latest","enterprise-server@3.16","enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12"],"hidden":false,"noEarlyAccessBanner":false},"enterpriseServerReleases":{"isOldestReleaseDeprecated":false,"oldestSupported":"3.12","nextDeprecationDate":"2025-03-05","supported":["3.16","3.15","3.14","3.13","3.12"]},"enterpriseServerVersions":["enterprise-server@3.16","enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12"],"allVersions":{"free-pro-team@latest":{"version":"free-pro-team@latest","versionTitle":"Free, Pro, \u0026 Team","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28"},"enterprise-cloud@latest":{"version":"enterprise-cloud@latest","versionTitle":"Enterprise Cloud","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28"},"enterprise-server@3.16":{"version":"enterprise-server@3.16","versionTitle":"Enterprise Server 3.16","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.15":{"version":"enterprise-server@3.15","versionTitle":"Enterprise Server 3.15","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.14":{"version":"enterprise-server@3.14","versionTitle":"Enterprise Server 3.14","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.13":{"version":"enterprise-server@3.13","versionTitle":"Enterprise Server 3.13","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.12":{"version":"enterprise-server@3.12","versionTitle":"Enterprise Server 3.12","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true}},"currentVersion":"free-pro-team@latest","currentProductTree":null,"sidebarTree":{"href":"/en/apps","title":"Apps","childPages":[{"href":"/en/apps/overview","title":"Overview","childPages":[]},{"href":"/en/apps/using-github-apps","title":"Using GitHub Apps","childPages":[{"href":"/en/apps/using-github-apps/about-using-github-apps","title":"About using apps","childPages":[]},{"href":"/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account","title":"Install from Marketplace for user","childPages":[]},{"href":"/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations","title":"Install from Marketplace for org","childPages":[]},{"href":"/en/apps/using-github-apps/installing-a-github-app-from-a-third-party","title":"Install from third party","childPages":[]},{"href":"/en/apps/using-github-apps/installing-your-own-github-app","title":"Install your own app","childPages":[]},{"href":"/en/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","title":"Request for org","childPages":[]},{"href":"/en/apps/using-github-apps/authorizing-github-apps","title":"Authorize","childPages":[]},{"href":"/en/apps/using-github-apps/approving-updated-permissions-for-a-github-app","title":"Approve new permissions","childPages":[]},{"href":"/en/apps/using-github-apps/reviewing-and-revoking-authorization-of-github-apps","title":"Review your authorizations","childPages":[]},{"href":"/en/apps/using-github-apps/reviewing-and-modifying-installed-github-apps","title":"Review installations","childPages":[]},{"href":"/en/apps/using-github-apps/internal-github-apps","title":"Internal apps","childPages":[]}]},{"href":"/en/apps/creating-github-apps","title":"Creating GitHub Apps","childPages":[{"href":"/en/apps/creating-github-apps/about-creating-github-apps","title":"About creating GitHub Apps","childPages":[{"href":"/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps","title":"About creating apps","childPages":[]},{"href":"/en/apps/creating-github-apps/about-creating-github-apps/deciding-when-to-build-a-github-app","title":"GitHub App versus other options","childPages":[]},{"href":"/en/apps/creating-github-apps/about-creating-github-apps/best-practices-for-creating-a-github-app","title":"Best practices","childPages":[]},{"href":"/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps","title":"Migrate from OAuth apps","childPages":[]}]},{"href":"/en/apps/creating-github-apps/registering-a-github-app","title":"Registering a GitHub App","childPages":[{"href":"/en/apps/creating-github-apps/registering-a-github-app/registering-a-github-app","title":"Register a GitHub App","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/about-the-user-authorization-callback-url","title":"Callback URL","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/about-the-setup-url","title":"Setup URL","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/choosing-permissions-for-a-github-app","title":"Permissions","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/using-webhooks-with-github-apps","title":"Webhooks","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/making-a-github-app-public-or-private","title":"Visibility","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/rate-limits-for-github-apps","title":"Rate limits","childPages":[]},{"href":"/en/apps/creating-github-apps/registering-a-github-app/creating-a-custom-badge-for-your-github-app","title":"Custom badge","childPages":[]}]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app","title":"Authenticate with a GitHub App","childPages":[{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app","title":"About authentication","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app","title":"Authenticate as an app","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation","title":"Authenticate as an installation","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user","title":"Authenticate on behalf of users","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/managing-private-keys-for-github-apps","title":"Manage private keys","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-json-web-token-jwt-for-a-github-app","title":"Generate a JWT","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-an-installation-access-token-for-a-github-app","title":"Generate an installation access token","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app","title":"Generate a user access token","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens","title":"Refresh user access tokens","childPages":[]},{"href":"/en/apps/creating-github-apps/authenticating-with-a-github-app/making-authenticated-api-requests-with-a-github-app-in-a-github-actions-workflow","title":"Authenticate in Actions workflow","childPages":[]}]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app","title":"Writing code for a GitHub App","childPages":[{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/about-writing-code-for-a-github-app","title":"About writing GitHub App code","childPages":[]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/quickstart","title":"Quickstart","childPages":[]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-github-app-that-responds-to-webhook-events","title":"Respond to webhooks","childPages":[]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-login-with-github-button-with-a-github-app","title":"Build a \"Login\" button","childPages":[]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-cli-with-a-github-app","title":"Build a CLI","childPages":[]},{"href":"/en/apps/creating-github-apps/writing-code-for-a-github-app/building-ci-checks-with-a-github-app","title":"Build CI checks","childPages":[]}]}]},{"href":"/en/apps/sharing-github-apps","title":"Sharing GitHub Apps","childPages":[{"href":"/en/apps/sharing-github-apps/sharing-your-github-app","title":"Share your app","childPages":[]},{"href":"/en/apps/sharing-github-apps/making-your-github-app-available-for-github-enterprise-server","title":"Share with GHES","childPages":[]},{"href":"/en/apps/sharing-github-apps/registering-a-github-app-from-a-manifest","title":"App manifest","childPages":[]},{"href":"/en/apps/sharing-github-apps/registering-a-github-app-using-url-parameters","title":"App query parameters","childPages":[]}]},{"href":"/en/apps/maintaining-github-apps","title":"Maintaining GitHub Apps","childPages":[{"href":"/en/apps/maintaining-github-apps/modifying-a-github-app-registration","title":"Modify app settings","childPages":[]},{"href":"/en/apps/maintaining-github-apps/activating-optional-features-for-github-apps","title":"Activate optional features","childPages":[]},{"href":"/en/apps/maintaining-github-apps/about-github-app-managers","title":"GitHub App managers","childPages":[]},{"href":"/en/apps/maintaining-github-apps/managing-allowed-ip-addresses-for-a-github-app","title":"Manage allowed IP addresses","childPages":[]},{"href":"/en/apps/maintaining-github-apps/suspending-a-github-app-installation","title":"Suspend an installation","childPages":[]},{"href":"/en/apps/maintaining-github-apps/transferring-ownership-of-a-github-app","title":"Transfer ownership","childPages":[]},{"href":"/en/apps/maintaining-github-apps/deleting-a-github-app","title":"Delete your app","childPages":[]}]},{"href":"/en/apps/github-marketplace","title":"GitHub Marketplace","childPages":[{"href":"/en/apps/github-marketplace/github-marketplace-overview","title":"Overview","childPages":[{"href":"/en/apps/github-marketplace/github-marketplace-overview/about-github-marketplace-for-apps","title":"About GitHub Marketplace for apps","childPages":[]},{"href":"/en/apps/github-marketplace/github-marketplace-overview/about-marketplace-badges","title":"About marketplace badges","childPages":[]},{"href":"/en/apps/github-marketplace/github-marketplace-overview/applying-for-publisher-verification-for-your-organization","title":"Publisher verification","childPages":[]}]},{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace","title":"Create Marketplace apps","childPages":[{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace/requirements-for-listing-an-app","title":"Listing requirements","childPages":[]},{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace/security-best-practices-for-apps-on-github-marketplace","title":"Security best practice","childPages":[]},{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace/customer-experience-best-practices-for-apps","title":"Customer experience best practice","childPages":[]},{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace/viewing-metrics-for-your-listing","title":"View listing metrics","childPages":[]},{"href":"/en/apps/github-marketplace/creating-apps-for-github-marketplace/viewing-transactions-for-your-listing","title":"View listing transactions","childPages":[]}]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app","title":"Marketplace API usage","childPages":[{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/rest-endpoints-for-the-github-marketplace-api","title":"REST API","childPages":[]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/webhook-events-for-the-github-marketplace-api","title":"Webhook events","childPages":[]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/testing-your-app","title":"Testing your app","childPages":[]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-new-purchases-and-free-trials","title":"New purchases \u0026 free trials","childPages":[]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-plan-changes","title":"Handling plan changes","childPages":[]},{"href":"/en/apps/github-marketplace/using-the-github-marketplace-api-in-your-app/handling-plan-cancellations","title":"Plan cancellations","childPages":[]}]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace","title":"List an app on the Marketplace","childPages":[{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/drafting-a-listing-for-your-app","title":"Draft an app listing","childPages":[]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/writing-a-listing-description-for-your-app","title":"Write listing descriptions","childPages":[]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/setting-pricing-plans-for-your-listing","title":"Set listing pricing plans","childPages":[]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/configuring-a-webhook-to-notify-you-of-plan-changes","title":"Webhooks for plan changes","childPages":[]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/submitting-your-listing-for-publication","title":"Submit your listing","childPages":[]},{"href":"/en/apps/github-marketplace/listing-an-app-on-github-marketplace/deleting-your-app-listing-from-github-marketplace","title":"Delete your listing","childPages":[]}]},{"href":"/en/apps/github-marketplace/selling-your-app-on-github-marketplace","title":"Sell apps on the Marketplace","childPages":[{"href":"/en/apps/github-marketplace/selling-your-app-on-github-marketplace/pricing-plans-for-github-marketplace-apps","title":"Pricing plans for apps","childPages":[]},{"href":"/en/apps/github-marketplace/selling-your-app-on-github-marketplace/billing-customers","title":"Billing customers","childPages":[]},{"href":"/en/apps/github-marketplace/selling-your-app-on-github-marketplace/receiving-payment-for-app-purchases","title":"Receive payment","childPages":[]}]}]},{"href":"/en/apps/oauth-apps","title":"OAuth apps","childPages":[{"href":"/en/apps/oauth-apps/using-oauth-apps","title":"Using OAuth apps","childPages":[{"href":"/en/apps/oauth-apps/using-oauth-apps/installing-an-oauth-app-in-your-personal-account","title":"Install app personal account","childPages":[]},{"href":"/en/apps/oauth-apps/using-oauth-apps/installing-an-oauth-app-in-your-organization","title":"Install app organization","childPages":[]},{"href":"/en/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","title":"Authorizing OAuth apps","childPages":[]},{"href":"/en/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-oauth-apps","title":"Review OAuth apps","childPages":[]},{"href":"/en/apps/oauth-apps/using-oauth-apps/connecting-with-third-party-applications","title":"Third-party applications","childPages":[]},{"href":"/en/apps/oauth-apps/using-oauth-apps/internal-oauth-apps","title":"Internal apps","childPages":[]}]},{"href":"/en/apps/oauth-apps/building-oauth-apps","title":"Building OAuth apps","childPages":[{"href":"/en/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps","title":"GitHub Apps \u0026 OAuth apps","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/rate-limits-for-oauth-apps","title":"Rate limits","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app","title":"Creating an OAuth app","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app","title":"Authenticate with an OAuth app","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps","title":"Authorizing OAuth apps","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps","title":"Scopes for OAuth apps","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/creating-a-custom-badge-for-your-oauth-app","title":"Create custom badges","childPages":[]},{"href":"/en/apps/oauth-apps/building-oauth-apps/best-practices-for-creating-an-oauth-app","title":"Best practices","childPages":[]}]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps","title":"Maintaining OAuth apps","childPages":[{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/modifying-an-oauth-app","title":"Modifying an OAuth app","childPages":[]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/activating-optional-features-for-oauth-apps","title":"Activate optional features","childPages":[]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/transferring-ownership-of-an-oauth-app","title":"Transfer ownership","childPages":[]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors","title":"Troubleshoot authorization","childPages":[]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-oauth-app-access-token-request-errors","title":"Troubleshoot token request","childPages":[]},{"href":"/en/apps/oauth-apps/maintaining-oauth-apps/deleting-an-oauth-app","title":"Deleting an OAuth app","childPages":[]}]}]}]},"featureFlags":{},"nonEnterpriseDefaultVersion":"free-pro-team@latest","status":200,"fullUrl":"https://docs-internal.github.com/en/apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps","currentLayoutName":"default","relativePath":"apps/creating-github-apps/about-creating-github-apps/migrating-oauth-apps-to-github-apps.md"},"articleContext":{"title":"Migrating OAuth apps to GitHub Apps","intro":"\u003cp\u003eLearn about the advantages of migrating your OAuth app to a GitHub App, and learn how to migrate your OAuth app.\u003c/p\u003e","effectiveDate":"","renderedPage":"\u003ch2 id=\"benefits-of-migrating-from-oauth-apps-to-github-apps\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#benefits-of-migrating-from-oauth-apps-to-github-apps\"\u003eBenefits of migrating from OAuth apps to GitHub Apps\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eGitHub Apps are the recommended way to integrate with GitHub. GitHub Apps offer many advantages over OAuth apps, including:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnhanced security features, like fine-grained permissions, choice over repository access, and short lived tokens\u003c/li\u003e\n\u003cli\u003eThe ability to act independently of or on behalf of a user\u003c/li\u003e\n\u003cli\u003eScalable rate limits\u003c/li\u003e\n\u003cli\u003eBuilt-in webhooks\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor more information, see \u003ca href=\"/en/apps/creating-github-apps/setting-up-a-github-app/about-creating-github-apps#using-a-github-app-instead-of-an-oauth-app\"\u003eAbout creating GitHub Apps\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"converting-an-oauth-app-to-a-github-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#converting-an-oauth-app-to-a-github-app\"\u003eConverting an OAuth app to a GitHub App\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe following steps provide an overview of how to migrate from an OAuth app to a GitHub App. The specific steps depend on your app.\u003c/p\u003e\n\u003ch3 id=\"1-review-your-oauth-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#1-review-your-oauth-app\"\u003e1. Review your OAuth app\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eRe-familiarize yourself with the code for your OAuth app. The API requests that your OAuth app makes will help you decide what permissions to select for your GitHub App.\u003c/p\u003e\n\u003cp\u003eAdditionally, there are a few REST API endpoints that are not available for OAuth apps. Verify that any REST endpoints that you use are available for GitHub Apps by reviewing \u003ca href=\"/en/rest/overview/endpoints-available-for-github-apps\"\u003eEndpoints available for GitHub App installation access tokens\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"2-register-a-github-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#2-register-a-github-app\"\u003e2. Register a GitHub App\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eRegister a new GitHub App. For more information, see \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/creating-a-github-app\"\u003eRegistering a GitHub App\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eCompared to an OAuth app, you have more control over GitHub App settings. Some key additions are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUnlike an OAuth app, which always acts on behalf of a user, you can make your GitHub App take actions as itself or on behalf of a user. If you do not want your new GitHub App to take actions on behalf of a user, you can skip the \"Identifying and authorizing users\" settings. For more information, see \u003ca href=\"/en/apps/creating-github-apps/authenticating-with-a-github-app/about-authentication-with-a-github-app\"\u003eAbout authentication with a GitHub App\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eYou can use webhooks to notify your GitHub App when specific events occur. Unlike webhooks for OAuth apps, which you must configure via the API for each repository or organization, webhooks are built into GitHub Apps. When you register your GitHub App, you can select the webhook events that you want to receive. Additionally, if your OAuth app currently uses polling to determine if an event had occurred, consider subscribing to webhooks instead to help your GitHub App stay within the rate limit. For more information, see \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/using-webhooks-with-github-apps\"\u003eUsing webhooks with GitHub Apps\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWith an OAuth app, you request scopes when a user authorizes your app. With a GitHub App, you specify permissions in the app settings. These permissions are more granular than scopes and enable you to only select the permissions that your app needs. Additionally, these permissions are mapped to REST API endpoints and webhook events, so you can easily determine what permissions your GitHub App needs in order to access a specific REST API endpoint or subscribe to a specific webhook. Permissions are not currently documented for GraphQL requests. For more information, see \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/choosing-permissions-for-a-github-app\"\u003eChoosing permissions for a GitHub App\u003c/a\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3-modify-the-code-for-your-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#3-modify-the-code-for-your-app\"\u003e3. Modify the code for your app\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eOnce you have registered a GitHub App, adapt the code from your old OAuth app to work with your new GitHub App.\u003c/p\u003e\n\u003ch4 id=\"update-authentication\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#update-authentication\"\u003eUpdate authentication\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eYou will need to update your app's code to handle API authentication for your GitHub App. A GitHub App can authenticate in three ways:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAs the app itself, in order to get or modify details about the GitHub App registration or to create an installation access token. For more information, see \u003ca href=\"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app\"\u003eAuthenticating as a GitHub App\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAs an app installation, in order to take actions on behalf of itself. For more information, see \u003ca href=\"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation\"\u003eAuthenticating as a GitHub App installation\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eOn behalf of a user, in order to attribute actions to a user. For more information, see \u003ca href=\"/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user\"\u003eAuthenticating with a GitHub App on behalf of a user\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIf you are using GitHub's official Octokit.js library, you can use the built-in \u003ccode\u003eApp\u003c/code\u003e object to authenticate. For examples, see \u003ca href=\"/en/rest/guides/scripting-with-the-rest-api-and-javascript\"\u003eScripting with the REST API and JavaScript\u003c/a\u003e and \u003ca href=\"/en/apps/creating-github-apps/guides/building-a-github-app-that-responds-to-webhook-events\"\u003eBuilding a GitHub App that responds to webhook events\u003c/a\u003e.\u003c/p\u003e\n\u003ch4 id=\"review-rate-limits\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#review-rate-limits\"\u003eReview rate limits\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eReview the differences in rate limits between OAuth apps and GitHub Apps. GitHub Apps use sliding rules for rate limits, which can increase based on the number of repositories and number of users in the organization. For more information, see \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/rate-limits-for-github-apps\"\u003eRate limits for GitHub Apps\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIf possible, consider using conditional requests and subscribing to webhooks instead of polling to help you stay within rate limits. For more information about conditional requests, see \u003ca href=\"/en/rest/guides/best-practices-for-using-the-rest-api\"\u003eBest practices for using the REST API\u003c/a\u003e. For more information about using webhooks with your GitHub App, see \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/using-webhooks-with-github-apps\"\u003eUsing webhooks with GitHub Apps\u003c/a\u003e and \u003ca href=\"/en/apps/creating-github-apps/guides/building-a-github-app-that-responds-to-webhook-events\"\u003eBuilding a GitHub App that responds to webhook events\u003c/a\u003e.\u003c/p\u003e\n\u003ch4 id=\"test-your-code\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#test-your-code\"\u003eTest your code\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eTest your new GitHub App to make sure that your code works as expected.\u003c/p\u003e\n\u003ch3 id=\"4-publicize-your-new-github-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#4-publicize-your-new-github-app\"\u003e4. Publicize your new GitHub App\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eIf you want other accounts to be able to use your new GitHub App, make sure that your app is public. If you want to make your GitHub App more discoverable, list your app in GitHub Marketplace. For more information, see \u003ca href=\"/en/apps/publishing-apps-to-github-marketplace/github-marketplace-overview/about-github-marketplace\"\u003eAbout GitHub Marketplace for apps\u003c/a\u003e and \u003ca href=\"/en/apps/creating-github-apps/creating-github-apps/making-a-github-app-public-or-private\"\u003eMaking a GitHub App public or private\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"5-instruct-your-users-to-migrate\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#5-instruct-your-users-to-migrate\"\u003e5. Instruct your users to migrate\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eOnce your new GitHub App is ready, instruct users of your old OAuth app to migrate to your new GitHub App. There is not a way to automatically migrate your users. Each user must install and/or authorize your GitHub App on their own.\u003c/p\u003e\n\u003cp\u003eAs the app owner, you should include calls to action to encourage your users to install/authorize the new GitHub App and revoke authorization for the old OAuth app. You should also update any documentation or user interface elements.\u003c/p\u003e\n\u003ch4 id=\"prompt-users-to-install-your-github-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#prompt-users-to-install-your-github-app\"\u003ePrompt users to install your GitHub App\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eIf you want your GitHub App to make API requests on behalf of itself or access organization or repository resources, the user must install your GitHub App. When a user installs a GitHub App on their account or organization, they choose which repositories the app can access, and they grant the app the organization and repository permissions that it requested.\u003c/p\u003e\n\u003cp\u003eTo help your users install your GitHub App, you can add a link to your app's webpage that users can click to install the GitHub App. The format of the install URL is \u003ccode\u003ehttps://github.com/apps/YOUR_APP_NAME/installations/new\u003c/code\u003e. Replace \u003ccode\u003eYOUR_APP_NAME\u003c/code\u003e with the sluggified name of your GitHub App, which you can find in the \"Public link\" field on the settings page for your GitHub App.\u003c/p\u003e\n\u003cp\u003eTo pre-select any repositories your OAuth app had access to, you can append \u003ccode\u003e/permissions\u003c/code\u003e and query parameters to the install URL. This helps users grant your GitHub App access to repositories that your OAuth app already has access to. The query parameters are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esuggested_target_id\u003c/code\u003e: The ID of the user or organization that is installing your GitHub App. This parameter is required.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erepository_ids[]\u003c/code\u003e: The repository IDs to select for the installation. If omitted, all repositories are selected. The maximum number of repositories that can be pre-selected is 100. To get a list of repositories that your OAuth app has access to, use the \u003ca href=\"/en/rest/repos/repos#list-repositories-for-the-authenticated-user\"\u003eList repositories for the authenticated user\u003c/a\u003e and \u003ca href=\"/en/rest/repos/repos#list-organization-repositories\"\u003eList organization repositories\u003c/a\u003e endpoints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor example: \u003ccode\u003ehttps://github.com/apps/YOUR_APP_NAME/installations/new/permissions?suggested_target_id=ID_OF_USER_OR_ORG\u0026#x26;repository_ids[]=REPO_A_ID\u0026#x26;repository_ids[]=REPO_B_ID\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFor more information about installing GitHub Apps, see \u003ca href=\"/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-personal-account\"\u003eInstalling a GitHub App from GitHub Marketplace for your personal account\u003c/a\u003e, \u003ca href=\"/en/apps/using-github-apps/installing-a-github-app-from-github-marketplace-for-your-organizations\"\u003eInstalling a GitHub App from GitHub Marketplace for your organizations\u003c/a\u003e, \u003ca href=\"/en/apps/using-github-apps/installing-a-github-app-from-a-third-party\"\u003eInstalling a GitHub App from a third party\u003c/a\u003e and \u003ca href=\"/en/apps/using-github-apps/installing-your-own-github-app\"\u003eInstalling your own GitHub App\u003c/a\u003e.\u003c/p\u003e\n\u003ch4 id=\"prompt-users-to-authorize-your-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#prompt-users-to-authorize-your-app\"\u003ePrompt users to authorize your app\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eIf you want your GitHub App to make API requests on behalf of a user, the user must authorize the app. When a user authorizes an app, they grant the app permission to act on their behalf, and they grant the account permissions that the app requested. If the app is installed on an organization account, each user within that organization must authorize the app in order for the app to act on their behalf.\u003c/p\u003e\n\u003cp\u003eTo prompt users to authorize your app, you will lead them through the web application flow or device flow. For more information, see \u003ca href=\"/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app\"\u003eGenerating a user access token for a GitHub App\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eFor more information about authorizing GitHub Apps, see \u003ca href=\"/en/apps/using-github-apps/authorizing-github-apps\"\u003eAuthorizing GitHub Apps\u003c/a\u003e.\u003c/p\u003e\n\u003ch4 id=\"encourage-your-users-to-revoke-oauth-app-access\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#encourage-your-users-to-revoke-oauth-app-access\"\u003eEncourage your users to revoke OAuth app access\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eYou should also encourage your users to revoke access for your old OAuth app. This will help you fully transition away from your OAuth app and will help keep your users' data secure. For more information, see \u003ca href=\"/en/apps/oauth-apps/using-oauth-apps/reviewing-your-authorized-applications-oauth\"\u003eReviewing your authorized OAuth apps\u003c/a\u003e.\u003c/p\u003e\n\u003ch4 id=\"update-any-interfaces-or-documentation\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#update-any-interfaces-or-documentation\"\u003eUpdate any interfaces or documentation\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003eYou should update any user interface or documentation related to your app to reflect the change from an OAuth app to GitHub App.\u003c/p\u003e\n\u003ch3 id=\"6-remove-webhooks-for-your-old-oauth-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#6-remove-webhooks-for-your-old-oauth-app\"\u003e6. Remove webhooks for your old OAuth app\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eWhen a user installs your GitHub App and grants access to a repository, you should remove any webhooks for your old OAuth app. If your new GitHub App and your old OAuth app respond to webhooks for the same event, the user may observe duplicate behavior.\u003c/p\u003e\n\u003cp\u003eTo remove repository webhooks, you can listen for the \u003ccode\u003einstallation_repositories\u003c/code\u003e webhook with the \u003ccode\u003eadded\u003c/code\u003e action. When your GitHub App receives that event, you can use the REST API to delete the webhook on those repositories for your OAuth app. For more information, see \u003ca href=\"/en/webhooks-and-events/webhooks/webhook-events-and-payloads?actionType=added#installation_repositories\"\u003eWebhook events and payloads\u003c/a\u003e and \u003ca href=\"/en/rest/webhooks#delete-a-repository-webhook\"\u003eREST API endpoints for repository webhooks\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSimilarly, to remove organization webhooks, you can listen for the \u003ccode\u003einstallation\u003c/code\u003e webhook with the \u003ccode\u003ecreated\u003c/code\u003e action. When your GitHub App receives that event for an organization, you can use the REST API to delete the webhook on that organization and corresponding repositories for your OAuth app. For more information, see \u003ca href=\"/en/webhooks-and-events/webhooks/webhook-events-and-payloads?actionType=created#installation\"\u003eWebhook events and payloads\u003c/a\u003e, \u003ca href=\"/en/rest/orgs/webhooks#delete-an-organization-webhook\"\u003eREST API endpoints for organization webhooks\u003c/a\u003e, and \u003ca href=\"/en/rest/webhooks#delete-a-repository-webhook\"\u003eREST API endpoints for repository webhooks\u003c/a\u003e.\u003c/p\u003e\n\u003ch3 id=\"7-delete-your-old-oauth-app\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#7-delete-your-old-oauth-app\"\u003e7. Delete your old OAuth app\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eOnce your users have migrated to your new GitHub App, you should delete your old OAuth app. This will help avoid abuse of the OAuth app's credentials. This action will also revoke all of the OAuth app's remaining authorizations. For more information, see \u003ca href=\"/en/apps/oauth-apps/maintaining-oauth-apps/deleting-an-oauth-app\"\u003eDeleting an OAuth app\u003c/a\u003e. If your OAuth app is listed on GitHub Marketplace, you may need to contact GitHub Support to remove your app from the marketplace first.\u003c/p\u003e","miniTocItems":[{"contents":{"href":"#benefits-of-migrating-from-oauth-apps-to-github-apps","title":"Benefits of migrating from OAuth apps to GitHub Apps"}},{"contents":{"href":"#converting-an-oauth-app-to-a-github-app","title":"Converting an OAuth app to a GitHub App"}}],"permissions":"","includesPlatformSpecificContent":false,"includesToolSpecificContent":false,"defaultPlatform":"","defaultTool":"","product":"","productVideoUrl":"","currentLearningTrack":null,"detectedPlatforms":[],"detectedTools":[],"allTools":{"agents":"Agents","api":"API","azure_data_studio":"Azure Data Studio","bash":"Bash","cli":"GitHub CLI","codespaces":"Codespaces","curl":"curl","desktop":"Desktop","eclipse":"Eclipse","importer_cli":"GitHub Enterprise Importer CLI","javascript":"JavaScript","jetbrains":"JetBrains IDEs","jetbrains_beta":"JetBrains IDEs (Beta)","skillsets":"Skillsets","vimneovim":"Vim/Neovim","powershell":"PowerShell","visualstudio":"Visual Studio","vscode":"Visual Studio Code","webui":"Web browser","windowsterminal":"Windows Terminal","xcode":"Xcode"},"supportPortalVaIframeProps":{"supportPortalUrl":"https://support.github.com","vaFlowUrlParameter":""},"currentLayout":"default"}},"languagesContext":{"languages":{"en":{"name":"English","code":"en"},"zh":{"name":"Simplified Chinese","code":"zh","hreflang":"zh-Hans","nativeName":"简体中文"},"es":{"name":"Spanish","code":"es","nativeName":"Español"},"pt":{"name":"Portuguese","code":"pt","nativeName":"Português do Brasil"},"ru":{"name":"Russian","code":"ru","nativeName":"Русский"},"ja":{"name":"Japanese","code":"ja","nativeName":"日本語"},"fr":{"name":"French","code":"fr","nativeName":"Français"},"de":{"name":"German","code":"de","nativeName":"Deutsch"},"ko":{"name":"Korean","code":"ko","nativeName":"한국어"}}},"__N_SSP":true},"page":"/[versionId]/[productId]/[...restPage]","query":{"versionId":"free-pro-team@latest","productId":"apps","restPage":["creating-github-apps","about-creating-github-apps","migrating-oauth-apps-to-github-apps"]},"buildId":"Tm-n5Utsr8ZtHzoVY7OIy","isFallback":false,"isExperimentalCompile":false,"gssp":true,"appGip":true,"locale":"en","locales":["en","zh","es","pt","ru","ja","fr","de","ko"],"defaultLocale":"en","scriptLoader":[]}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10