Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo’s first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that’s open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo’s page in details.html_url, and starts nothing.
With secrets found: tags of releases that never went live and hold them. A push may delete these, with plain git, and those releases can't go out after that.
With secrets found: tags of releases that went live and hold them. What's live never changes, so these can't come out, and the repo's code can only stay closed.
What going open publishes, once a scan has read it.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Patch","description":"Patch (patch.gg) is where people and their coding agents make browser games and mods and publish them, and where players play them. Coding agents: set up with https://patch.gg/llms.txt.","colors":{"primary":"#000000","light":"#F53CD1","dark":"#000000"},"logo":{"light":"https://mintcdn.com/patch-b3bbfc3b/KgoraNtrAh08SBeG/logo/light.svg?fit=max\u0026auto=format\u0026n=KgoraNtrAh08SBeG\u0026q=85\u0026s=92d1677e86684225363eef76f8ec9763","dark":"https://mintcdn.com/patch-b3bbfc3b/KgoraNtrAh08SBeG/logo/light.svg?fit=max\u0026auto=format\u0026n=KgoraNtrAh08SBeG\u0026q=85\u0026s=92d1677e86684225363eef76f8ec9763","href":"https://patch.gg"},"favicon":"https://mintcdn.com/patch-b3bbfc3b/KgoraNtrAh08SBeG/favicon.svg?fit=max\u0026auto=format\u0026n=KgoraNtrAh08SBeG\u0026q=85\u0026s=950620ea63e1e344a23c73e631881f4b","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","javascript","python"]}},"appearance":{"default":"light","strict":true},"background":{"color":{"light":"#FFFFFF","dark":"#FFFFFF"}},"navbar":{"primary":{"type":"button","label":"Open Patch","href":"https://patch.gg"}},"footer":{"socials":{"website":"https://patch.gg","discord":"https://discord.gg/W2VyyKxJy"}},"seo":{"metatags":{"og:image":"https://patch.gg/link-preview.png"}},"fonts":{"family":"Funnel Sans"},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"patch-b3bbfc3b","hasAudioNarration":false,"actualSubdomain":"patch-b3bbfc3b","customDomains":["docs.patch.gg"],"gitSource":{"type":"github","owner":"patch-gg","repo":"patch","deployBranch":"production","contentDirectory":"product/docs","isPrivate":true,"mountPath":"","label":"","_id":"6add1837da589734fa3cbbbc"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af188f79e9a7e27ab8ab02e","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API reference","count":99},{"language":"default","tag":"Endpoints","count":98},{"language":"default","tag":"Repos","count":16},{"language":"default","tag":"Releases","count":14},{"language":"default","tag":"Change requests","count":12},{"language":"default","tag":"GitHub","count":11},{"language":"default","tag":"Projects","count":10},{"language":"default","tag":"Docs","count":9},{"language":"default","tag":"Review","count":9},{"language":"default","tag":"Account","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* latin-ext */\n@font-face {\n font-family: 'Red Hat Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/redhatmono/v16/jVyN7nDnA2uf2zVvFAhhzEsUVuxSzgw.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Red Hat Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/redhatmono/v16/jVyN7nDnA2uf2zVvFAhhzEsUWOxS.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Red Hat Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/redhatmono/v16/jVyN7nDnA2uf2zVvFAhhzEsUVuxSzgw.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Red Hat Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/redhatmono/v16/jVyN7nDnA2uf2zVvFAhhzEsUWOxS.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face{font-family:\"Patch Pixel\";src:url(\"/fonts/PatchPixel-Regular.woff2\") format(\"woff2\");font-weight:400;font-display:swap}:root{--patch-pink: #f53cd1;--patch-line: #e5e5e5}#page-title,h1#page-title{font-family:\"Patch Pixel\", \"Funnel Sans\", sans-serif;font-weight:400;font-size:36px;line-height:45px;letter-spacing:0;-webkit-font-smoothing:none}code,pre,kbd{font-family:\"Red Hat Mono\", ui-monospace, monospace!important}.rounded,.rounded-sm,.rounded-md,.rounded-lg,.rounded-xl,.rounded-2xl,.rounded-3xl,.rounded-full:not(img):not(svg),button,input,pre,code,img,video{border-radius:0!important}.shadow,.shadow-sm,.shadow-md,.shadow-lg,.shadow-xl,.shadow-2xl{box-shadow:none!important}.prose a:not(.card):not([class*=\"card\"]){text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:3px}::selection{background:var(--patch-pink);color:#ffffff}"}],"page":{"pagePath":"api-reference/repos/scan-a-repos-whole-history-before-it-goes-open","slug":"/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open","pageMetadata":{"title":"Scan a repo's whole history before it goes open","description":"Members of the owning org, with the `publish` scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo's first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that's open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 `on_github`, with the repo's page in `details.html_url`, and starts nothing.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/repo/history-scan","href":"/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Members of the owning org, with the \", _jsx(_components.code, {\n children: \"publish\"\n }), \" scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo’s first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that’s open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 \", _jsx(_components.code, {\n children: \"on_github\"\n }), \", with the repo’s page in \", _jsx(_components.code, {\n children: \"details.html_url\"\n }), \", and starts nothing.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Scan a repo's whole history before it goes open","description":"Members of the owning org, with the `publish` scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo's first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that's open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 `on_github`, with the repo's page in `details.html_url`, and starts nothing.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/repo/history-scan","href":"/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Repos"],"summary":"Scan a repo's whole history before it goes open","description":"Members of the owning org, with the `publish` scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo's first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that's open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 `on_github`, with the repo's page in `details.html_url`, and starts nothing.","security":["e43d8b58-538a-4d15-9996-0430814b41b8"],"parameters":["7d2330d9-0cb4-492a-a6c2-5aba3b5d9165","61fd4096-04c8-48ad-8aac-e485b0f357d6"],"responses":{"200":"13b4911f-72c7-45a4-960b-ab1fa483880a","202":"ae17c7c4-fd01-48c2-897c-5f21b26150d0","308":"d3086e0d-9383-4949-8a18-f28323f44bdd","400":"8075a977-eaee-4d78-bc8e-7fa3f418823f","401":"45bd40c9-fe9c-4e6d-a1fd-62ce1d8d3205","403":"9bd2c7b1-5c57-4680-ac31-38c87eb57535","404":"ad0ecf90-c964-472b-a7f2-a9cfcb3f7337","409":"d9be20ce-f063-4539-bc8e-69ef8d16bfa4","429":"7ddb13c6-880c-43ba-8066-962234e6416c","502":"d4bd377e-0f57-48d7-ada5-0e87e8b45a8f","503":"14000197-fda9-49bd-bbe1-d3b1e97a346a"},"method":"post","type":"path","servers":["dad6a083-e3c9-413e-a466-107b42f9941c"],"path":"/projects/{owner}/{slug}/repo/history-scan","baseUrlOptions":["https://patch.gg/api/v1"],"title":"Scan a repo's whole history before it goes open","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"7d2330d9-0cb4-492a-a6c2-5aba3b5d9165":{"schema":{"type":"string","example":"patch","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"name":"owner","in":"path"},"61fd4096-04c8-48ad-8aac-e485b0f357d6":{"schema":{"type":"string","example":"demo-mod","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"name":"slug","in":"path"}},"responses":{"13b4911f-72c7-45a4-960b-ab1fa483880a":{"description":"One is running already","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["running","clean","secrets_found","failed"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"up_to_date":{"type":"boolean","description":"False once a push has landed since it started, which means a new scan.","isRequired":true,"uniqueKey":"up_to_date","typeLabel":"boolean"},"started_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"started_at","typeLabel":"string\u003cdate-time>"},"finished_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"finished_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"finished_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"finished_at","typeLabel":"string\u003cdate-time> | null"},"head_commit":{"oneOf":[{"type":"string","description":"The default branch's commit, as the scan read it.","isRequired":true,"uniqueKey":"head_commit.oneOf.0","typeLabel":"string"},{"type":"null","description":"The default branch's commit, as the scan read it.","isRequired":true,"uniqueKey":"head_commit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"head_commit","typeLabel":"string | null"},"failure":{"oneOf":[{"type":"string","description":"Why a failed scan didn't finish.","isRequired":true,"uniqueKey":"failure.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why a failed scan didn't finish.","isRequired":true,"uniqueKey":"failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure","typeLabel":"string | null"},"secret_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"secret_count","typeLabel":"integer"},"secrets":{"type":"array","items":{"type":"object","properties":{"commit":{"oneOf":[{"type":"string","description":"The commit that first had it. For a tag's message, the tag. Null for a file only a tag points at.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit.oneOf.0","typeLabel":"string"},{"type":"null","description":"The commit that first had it. For a tag's message, the tag. Null for a file only a tag points at.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit","typeLabel":"string | null"},"path":{"oneOf":[{"type":"string","maxLength":1000,"description":"Null for a message.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":1000,"description":"Null for a message.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].path","typeLabel":"string | null"},"line":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"secrets.items.[INDEX].line","typeLabel":"integer"},"rule":{"type":"string","maxLength":100,"example":"an AWS access key","isRequired":true,"uniqueKey":"secrets.items.[INDEX].rule","typeLabel":"string"},"masked":{"type":"string","pattern":"^.{1,4}…$","description":"How the secret starts, which only names its kind. Never its value.","example":"AKIA…","isRequired":true,"uniqueKey":"secrets.items.[INDEX].masked","typeLabel":"string"},"in":{"type":"string","enum":["file","big_file","commit_message","tag_message"],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].in","typeLabel":"enum\u003cstring>"}},"required":["commit","path","line","rule","masked","in"],"uniqueKey":"secrets.items.[INDEX]","typeLabel":"object"},"description":"The first of them, oldest commit first.","isRequired":true,"uniqueKey":"secrets","typeLabel":"object[]"},"removable_tags":{"type":"array","items":{"type":"string","uniqueKey":"removable_tags.items.[INDEX]","typeLabel":"string"},"description":"With secrets found: tags of releases that never went live and hold them. A push may delete these, with plain git, and those releases can't go out after that.","isRequired":true,"uniqueKey":"removable_tags","typeLabel":"string[]"},"live_tags":{"type":"array","items":{"type":"string","uniqueKey":"live_tags.items.[INDEX]","typeLabel":"string"},"description":"With secrets found: tags of releases that went live and hold them. What's live never changes, so these can't come out, and the repo's code can only stay closed.","isRequired":true,"uniqueKey":"live_tags","typeLabel":"string[]"},"fix":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string","isRequired":true,"uniqueKey":"fix.items.[INDEX].step","typeLabel":"string"},"commands":{"type":"array","items":{"type":"string","uniqueKey":"fix.items.[INDEX].commands.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"fix.items.[INDEX].commands","typeLabel":"string[]"}},"required":["step","commands"],"uniqueKey":"fix.items.[INDEX]","typeLabel":"object"},"description":"With secrets found: how to take them out of the history.","isRequired":true,"uniqueKey":"fix","typeLabel":"object[]"},"will_become_public":{"oneOf":[{"type":"object","properties":{"commit_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.commit_count","typeLabel":"integer"},"branches":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.branches.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches.names","typeLabel":"string[]"}},"required":["count","names"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches","typeLabel":"object"},"tags":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.tags.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags.names","typeLabel":"string[]"}},"required":["count","names"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags","typeLabel":"object"},"other_refs":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.other_refs.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs.names","typeLabel":"string[]"}},"required":["count","names"],"description":"Any other refs in the repo, which git serves to anyone once it's open.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs","typeLabel":"object"},"files_at_head":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head.count","typeLabel":"integer"},"paths":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.files_at_head.paths.items.[INDEX]","typeLabel":"string"},"maxItems":2000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head.paths","typeLabel":"string[]"}},"required":["count","paths"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head","typeLabel":"object"},"big_files":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.count","typeLabel":"integer"},"total_size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.total_size","typeLabel":"integer"},"scanned":{"type":"boolean","description":"True when nothing going open would publish went unread. A clean scan can still say false: `coverage` and `not_read` say what it couldn't read, and a secret there wouldn't be seen.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.scanned","typeLabel":"boolean"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path","typeLabel":"string | null"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].sha256","typeLabel":"string"},"size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].size","typeLabel":"integer"},"not_read":{"oneOf":[{"type":"string","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library.","uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library.","uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read.oneOf.1","typeLabel":"null"}],"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read","typeLabel":"enum\u003cstring> | null"}},"required":["path","sha256","size"],"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX]","typeLabel":"object"},"maxItems":1000,"description":"What wasn't read comes first.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files","typeLabel":"object[]"},"not_read":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.not_read.count","typeLabel":"integer"},"total_size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.not_read.total_size","typeLabel":"integer"}},"required":["count","total_size"],"description":"What going open would publish that the scan couldn't read: too big, past its limits, or compressed. Missing from a scan from before it read big files, which read none.","uniqueKey":"will_become_public.oneOf.0.big_files.not_read","typeLabel":"object"},"coverage":{"type":"string","maxLength":1000,"description":"What was and wasn't read, in words to show whoever's going open. Missing from a scan from before it read big files, which read none.","uniqueKey":"will_become_public.oneOf.0.big_files.coverage","typeLabel":"string"}},"required":["count","total_size","scanned","files"],"description":"Every Git LFS file anywhere in the history. They become public too, so the scan reads each once, within limits, and says what it couldn't.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files","typeLabel":"object"},"authors":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.count","typeLabel":"integer"},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].name","typeLabel":"string"},"email":{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].email","typeLabel":"string"},"commits":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].commits","typeLabel":"integer"}},"required":["name","email","commits"],"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX]","typeLabel":"object"},"maxItems":5000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people","typeLabel":"object[]"}},"required":["count","people"],"description":"Everyone who wrote, committed or tagged anything in the history, with their emails, which git history publishes.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors","typeLabel":"object"}},"required":["commit_count","branches","tags","other_refs","files_at_head","big_files","authors"],"description":"What going open publishes, once a scan has read it.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"commit_count":{"type":"integer","minimum":0},"branches":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"]},"tags":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"]},"other_refs":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"],"description":"Any other refs in the repo, which git serves to anyone once it's open."},"files_at_head":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"paths":{"type":"array","items":{"type":"string"},"maxItems":2000}},"required":["count","paths"]},"big_files":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"total_size":{"type":"integer","minimum":0},"scanned":{"type":"boolean","description":"True when nothing going open would publish went unread. A clean scan can still say false: `coverage` and `not_read` say what it couldn't read, and a secret there wouldn't be seen."},"not_read":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"total_size":{"type":"integer","minimum":0}},"required":["count","total_size"],"description":"What going open would publish that the scan couldn't read: too big, past its limits, or compressed. Missing from a scan from before it read big files, which read none."},"coverage":{"type":"string","maxLength":1000,"description":"What was and wasn't read, in words to show whoever's going open. Missing from a scan from before it read big files, which read none."},"files":{"type":"array","items":{"type":"object","properties":{"path":{"oneOf":[{"type":"string"},{"type":"null"}]},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer","minimum":0},"not_read":{"oneOf":[{"type":"string","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library."},{"type":"null","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library."}]}},"required":["path","sha256","size"]},"maxItems":1000,"description":"What wasn't read comes first."}},"required":["count","total_size","scanned","files"],"description":"Every Git LFS file anywhere in the history. They become public too, so the scan reads each once, within limits, and says what it couldn't."},"authors":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"commits":{"type":"integer","minimum":0}},"required":["name","email","commits"]},"maxItems":5000}},"required":["count","people"],"description":"Everyone who wrote, committed or tagged anything in the history, with their emails, which git history publishes."}},"required":["commit_count","branches","tags","other_refs","files_at_head","big_files","authors"],"description":"What going open publishes, once a scan has read it.","isRequired":true,"uniqueKey":"will_become_public.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"will_become_public","typeLabel":"object | null"}},"required":["id","status","up_to_date","started_at","finished_at","head_commit","failure","secret_count","secrets","removable_tags","live_tags","fix","will_become_public"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","status":"running","up_to_date":true,"started_at":"2023-11-07T05:31:56Z","finished_at":"2023-11-07T05:31:56Z","head_commit":"\u003cstring>","failure":"\u003cstring>","secret_count":1,"secrets":[{"commit":"\u003cstring>","path":"\u003cstring>","line":2,"rule":"an AWS access key","masked":"AKIA…","in":"file"}],"removable_tags":["\u003cstring>"],"live_tags":["\u003cstring>"],"fix":[{"step":"\u003cstring>","commands":["\u003cstring>"]}],"will_become_public":{"commit_count":1,"branches":{"count":1,"names":["\u003cstring>"]},"tags":{"count":1,"names":["\u003cstring>"]},"other_refs":{"count":1,"names":["\u003cstring>"]},"files_at_head":{"count":1,"paths":["\u003cstring>"]},"big_files":{"count":1,"total_size":1,"scanned":true,"files":[{"path":"\u003cstring>","sha256":"\u003cstring>","size":1,"not_read":"too_big"}],"not_read":{"count":1,"total_size":1},"coverage":"\u003cstring>"},"authors":{"count":1,"people":[{"name":"\u003cstring>","email":"\u003cstring>","commits":1}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ae17c7c4-fd01-48c2-897c-5f21b26150d0":{"description":"Started","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"status":{"type":"string","enum":["running","clean","secrets_found","failed"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"up_to_date":{"type":"boolean","description":"False once a push has landed since it started, which means a new scan.","isRequired":true,"uniqueKey":"up_to_date","typeLabel":"boolean"},"started_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"started_at","typeLabel":"string\u003cdate-time>"},"finished_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"finished_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"finished_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"finished_at","typeLabel":"string\u003cdate-time> | null"},"head_commit":{"oneOf":[{"type":"string","description":"The default branch's commit, as the scan read it.","isRequired":true,"uniqueKey":"head_commit.oneOf.0","typeLabel":"string"},{"type":"null","description":"The default branch's commit, as the scan read it.","isRequired":true,"uniqueKey":"head_commit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"head_commit","typeLabel":"string | null"},"failure":{"oneOf":[{"type":"string","description":"Why a failed scan didn't finish.","isRequired":true,"uniqueKey":"failure.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why a failed scan didn't finish.","isRequired":true,"uniqueKey":"failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure","typeLabel":"string | null"},"secret_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"secret_count","typeLabel":"integer"},"secrets":{"type":"array","items":{"type":"object","properties":{"commit":{"oneOf":[{"type":"string","description":"The commit that first had it. For a tag's message, the tag. Null for a file only a tag points at.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit.oneOf.0","typeLabel":"string"},{"type":"null","description":"The commit that first had it. For a tag's message, the tag. Null for a file only a tag points at.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].commit","typeLabel":"string | null"},"path":{"oneOf":[{"type":"string","maxLength":1000,"description":"Null for a message.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":1000,"description":"Null for a message.","isRequired":true,"uniqueKey":"secrets.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].path","typeLabel":"string | null"},"line":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"secrets.items.[INDEX].line","typeLabel":"integer"},"rule":{"type":"string","maxLength":100,"example":"an AWS access key","isRequired":true,"uniqueKey":"secrets.items.[INDEX].rule","typeLabel":"string"},"masked":{"type":"string","pattern":"^.{1,4}…$","description":"How the secret starts, which only names its kind. Never its value.","example":"AKIA…","isRequired":true,"uniqueKey":"secrets.items.[INDEX].masked","typeLabel":"string"},"in":{"type":"string","enum":["file","big_file","commit_message","tag_message"],"isRequired":true,"uniqueKey":"secrets.items.[INDEX].in","typeLabel":"enum\u003cstring>"}},"required":["commit","path","line","rule","masked","in"],"uniqueKey":"secrets.items.[INDEX]","typeLabel":"object"},"description":"The first of them, oldest commit first.","isRequired":true,"uniqueKey":"secrets","typeLabel":"object[]"},"removable_tags":{"type":"array","items":{"type":"string","uniqueKey":"removable_tags.items.[INDEX]","typeLabel":"string"},"description":"With secrets found: tags of releases that never went live and hold them. A push may delete these, with plain git, and those releases can't go out after that.","isRequired":true,"uniqueKey":"removable_tags","typeLabel":"string[]"},"live_tags":{"type":"array","items":{"type":"string","uniqueKey":"live_tags.items.[INDEX]","typeLabel":"string"},"description":"With secrets found: tags of releases that went live and hold them. What's live never changes, so these can't come out, and the repo's code can only stay closed.","isRequired":true,"uniqueKey":"live_tags","typeLabel":"string[]"},"fix":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string","isRequired":true,"uniqueKey":"fix.items.[INDEX].step","typeLabel":"string"},"commands":{"type":"array","items":{"type":"string","uniqueKey":"fix.items.[INDEX].commands.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"fix.items.[INDEX].commands","typeLabel":"string[]"}},"required":["step","commands"],"uniqueKey":"fix.items.[INDEX]","typeLabel":"object"},"description":"With secrets found: how to take them out of the history.","isRequired":true,"uniqueKey":"fix","typeLabel":"object[]"},"will_become_public":{"oneOf":[{"type":"object","properties":{"commit_count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.commit_count","typeLabel":"integer"},"branches":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.branches.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches.names","typeLabel":"string[]"}},"required":["count","names"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.branches","typeLabel":"object"},"tags":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.tags.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags.names","typeLabel":"string[]"}},"required":["count","names"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.tags","typeLabel":"object"},"other_refs":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs.count","typeLabel":"integer"},"names":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.other_refs.names.items.[INDEX]","typeLabel":"string"},"maxItems":1000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs.names","typeLabel":"string[]"}},"required":["count","names"],"description":"Any other refs in the repo, which git serves to anyone once it's open.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.other_refs","typeLabel":"object"},"files_at_head":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head.count","typeLabel":"integer"},"paths":{"type":"array","items":{"type":"string","uniqueKey":"will_become_public.oneOf.0.files_at_head.paths.items.[INDEX]","typeLabel":"string"},"maxItems":2000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head.paths","typeLabel":"string[]"}},"required":["count","paths"],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.files_at_head","typeLabel":"object"},"big_files":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.count","typeLabel":"integer"},"total_size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.total_size","typeLabel":"integer"},"scanned":{"type":"boolean","description":"True when nothing going open would publish went unread. A clean scan can still say false: `coverage` and `not_read` say what it couldn't read, and a secret there wouldn't be seen.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.scanned","typeLabel":"boolean"},"files":{"type":"array","items":{"type":"object","properties":{"path":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].path","typeLabel":"string | null"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].sha256","typeLabel":"string"},"size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].size","typeLabel":"integer"},"not_read":{"oneOf":[{"type":"string","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library.","uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library.","uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read.oneOf.1","typeLabel":"null"}],"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX].not_read","typeLabel":"enum\u003cstring> | null"}},"required":["path","sha256","size"],"uniqueKey":"will_become_public.oneOf.0.big_files.files.items.[INDEX]","typeLabel":"object"},"maxItems":1000,"description":"What wasn't read comes first.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.files","typeLabel":"object[]"},"not_read":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.not_read.count","typeLabel":"integer"},"total_size":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files.not_read.total_size","typeLabel":"integer"}},"required":["count","total_size"],"description":"What going open would publish that the scan couldn't read: too big, past its limits, or compressed. Missing from a scan from before it read big files, which read none.","uniqueKey":"will_become_public.oneOf.0.big_files.not_read","typeLabel":"object"},"coverage":{"type":"string","maxLength":1000,"description":"What was and wasn't read, in words to show whoever's going open. Missing from a scan from before it read big files, which read none.","uniqueKey":"will_become_public.oneOf.0.big_files.coverage","typeLabel":"string"}},"required":["count","total_size","scanned","files"],"description":"Every Git LFS file anywhere in the history. They become public too, so the scan reads each once, within limits, and says what it couldn't.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.big_files","typeLabel":"object"},"authors":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.count","typeLabel":"integer"},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].name","typeLabel":"string"},"email":{"type":"string","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].email","typeLabel":"string"},"commits":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX].commits","typeLabel":"integer"}},"required":["name","email","commits"],"uniqueKey":"will_become_public.oneOf.0.authors.people.items.[INDEX]","typeLabel":"object"},"maxItems":5000,"isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors.people","typeLabel":"object[]"}},"required":["count","people"],"description":"Everyone who wrote, committed or tagged anything in the history, with their emails, which git history publishes.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0.authors","typeLabel":"object"}},"required":["commit_count","branches","tags","other_refs","files_at_head","big_files","authors"],"description":"What going open publishes, once a scan has read it.","isRequired":true,"uniqueKey":"will_become_public.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"commit_count":{"type":"integer","minimum":0},"branches":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"]},"tags":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"]},"other_refs":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"names":{"type":"array","items":{"type":"string"},"maxItems":1000}},"required":["count","names"],"description":"Any other refs in the repo, which git serves to anyone once it's open."},"files_at_head":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"paths":{"type":"array","items":{"type":"string"},"maxItems":2000}},"required":["count","paths"]},"big_files":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"total_size":{"type":"integer","minimum":0},"scanned":{"type":"boolean","description":"True when nothing going open would publish went unread. A clean scan can still say false: `coverage` and `not_read` say what it couldn't read, and a secret there wouldn't be seen."},"not_read":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"total_size":{"type":"integer","minimum":0}},"required":["count","total_size"],"description":"What going open would publish that the scan couldn't read: too big, past its limits, or compressed. Missing from a scan from before it read big files, which read none."},"coverage":{"type":"string","maxLength":1000,"description":"What was and wasn't read, in words to show whoever's going open. Missing from a scan from before it read big files, which read none."},"files":{"type":"array","items":{"type":"object","properties":{"path":{"oneOf":[{"type":"string"},{"type":"null"}]},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$"},"size":{"type":"integer","minimum":0},"not_read":{"oneOf":[{"type":"string","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library."},{"type":"null","enum":["too_big","over_limit","compressed","not_held","library",null],"description":"Why it wasn't read, or null when it was. `too_big`: over the most it reads of one file. `over_limit`: past the most it reads in all, or its time. `compressed`: its bytes were read as stored, not what's inside. `not_held`: this repo holds no copy, so going open won't publish it. `library`: public already in Patch's library."}]}},"required":["path","sha256","size"]},"maxItems":1000,"description":"What wasn't read comes first."}},"required":["count","total_size","scanned","files"],"description":"Every Git LFS file anywhere in the history. They become public too, so the scan reads each once, within limits, and says what it couldn't."},"authors":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"commits":{"type":"integer","minimum":0}},"required":["name","email","commits"]},"maxItems":5000}},"required":["count","people"],"description":"Everyone who wrote, committed or tagged anything in the history, with their emails, which git history publishes."}},"required":["commit_count","branches","tags","other_refs","files_at_head","big_files","authors"],"description":"What going open publishes, once a scan has read it.","isRequired":true,"uniqueKey":"will_become_public.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"will_become_public","typeLabel":"object | null"}},"required":["id","status","up_to_date","started_at","finished_at","head_commit","failure","secret_count","secrets","removable_tags","live_tags","fix","will_become_public"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","status":"running","up_to_date":true,"started_at":"2023-11-07T05:31:56Z","finished_at":"2023-11-07T05:31:56Z","head_commit":"\u003cstring>","failure":"\u003cstring>","secret_count":1,"secrets":[{"commit":"\u003cstring>","path":"\u003cstring>","line":2,"rule":"an AWS access key","masked":"AKIA…","in":"file"}],"removable_tags":["\u003cstring>"],"live_tags":["\u003cstring>"],"fix":[{"step":"\u003cstring>","commands":["\u003cstring>"]}],"will_become_public":{"commit_count":1,"branches":{"count":1,"names":["\u003cstring>"]},"tags":{"count":1,"names":["\u003cstring>"]},"other_refs":{"count":1,"names":["\u003cstring>"]},"files_at_head":{"count":1,"paths":["\u003cstring>"]},"big_files":{"count":1,"total_size":1,"scanned":true,"files":[{"path":"\u003cstring>","sha256":"\u003cstring>","size":1,"not_read":"too_big"}],"not_read":{"count":1,"total_size":1},"coverage":"\u003cstring>"},"authors":{"count":1,"people":[{"name":"\u003cstring>","email":"\u003cstring>","commits":1}]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"d3086e0d-9383-4949-8a18-f28323f44bdd":{"description":"Renamed; follow the Location header","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"8075a977-eaee-4d78-bc8e-7fa3f418823f":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"45bd40c9-fe9c-4e6d-a1fd-62ce1d8d3205":{"description":"Not signed in","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"9bd2c7b1-5c57-4680-ac31-38c87eb57535":{"description":"Not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"ad0ecf90-c964-472b-a7f2-a9cfcb3f7337":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d9be20ce-f063-4539-bc8e-69ef8d16bfa4":{"description":"Open already, or no commits to scan, or its home is GitHub, which already shows its history (`on_github`)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"7ddb13c6-880c-43ba-8066-962234e6416c":{"description":"Too many requests: wait as long as `Retry-After` says (`retry_after_s` in `details`), then retry","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d4bd377e-0f57-48d7-ada5-0e87e8b45a8f":{"description":"The scanner couldn't be reached","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"14000197-fda9-49bd-bbe1-d3b1e97a346a":{"description":"No scanner is set up here","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"version_exists","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"oneOf":[{}],"uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"version_exists","message":"\u003cstring>","details":"\u003cunknown>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e43d8b58-538a-4d15-9996-0430814b41b8":{"bearer":{"type":"http","scheme":"bearer","description":"An API key (pch_...) or the token from pch login.","scopes":[],"schemeName":"bearer"}}},"servers":{"dad6a083-e3c9-413e-a466-107b42f9941c":{"url":"https://patch.gg/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key (pch_...) or the token from pch login.","scopes":[],"schemeName":"bearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key (pch_...) or the token from pch login.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer","name":"Authorization"}],"title":"bearer"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"patch-b3bbfc3b","siteName":"Patch","title":"Scan a repo's whole history before it goes open - Patch","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T06:26:35.790Z","originalFileLocation":"api-reference/repos/scan-a-repos-whole-history-before-it-goes-open.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo\u0026#x27;s first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that\u0026#x27;s open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo\u0026#x27;s page in details.html_url, and starts nothing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Patch\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Scan a repo\u0026#x27;s whole history before it goes open - Patch\">\u003cmeta data-mint-head property=\"og:description\" content=\"Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo\u0026#x27;s first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that\u0026#x27;s open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo\u0026#x27;s page in details.html_url, and starts nothing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Patch\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://patch.gg/link-preview.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Scan a repo\u0026#x27;s whole history before it goes open - Patch\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo\u0026#x27;s first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that\u0026#x27;s open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo\u0026#x27;s page in details.html_url, and starts nothing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://patch.gg/link-preview.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/patch-b3bbfc3b/0WQM5b1NSkUFum6b/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Patch\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.patch.gg/#organization\",\"name\":\"Patch\",\"url\":\"https://docs.patch.gg\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/patch-b3bbfc3b/KgoraNtrAh08SBeG/logo/light.svg?fit=max\u0026auto=format\u0026n=KgoraNtrAh08SBeG\u0026q=85\u0026s=92d1677e86684225363eef76f8ec9763\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.patch.gg#website\",\"name\":\"Patch\",\"url\":\"https://docs.patch.gg\",\"publisher\":{\"@id\":\"https://docs.patch.gg/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open#webpage\",\"url\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open\",\"name\":\"Scan a repo's whole history before it goes open\",\"description\":\"Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo's first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that's open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo's page in details.html_url, and starts nothing.\",\"dateModified\":\"2026-11-09T06:26:35.790Z\",\"isPartOf\":{\"@id\":\"https://docs.patch.gg#website\"},\"breadcrumb\":{\"@id\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.patch.gg/api-reference/meta/whether-the-api-and-its-database-are-up\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Repos\",\"item\":\"https://docs.patch.gg/api-reference/repos/a-projects-git-repo\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Scan a repo's whole history before it goes open\",\"item\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open#apireference\",\"headline\":\"Scan a repo's whole history before it goes open\",\"name\":\"Scan a repo's whole history before it goes open\",\"description\":\"Members of the owning org, with the publish scope. Going open publishes every commit, so this reads every commit reachable from every branch and tag, and any other ref, for secrets. It runs as a job: read the result with GET. A repo has one scan at a time, and asking while one runs answers with that one. A repo a push closed, as an open repo's first push does and one that brings a secret does, scans itself, and opens by itself once a scan is clean. A repo with no commits, or that's open already, has nothing to scan. A repo whose home is GitHub needs none, since GitHub already shows its history: it answers 409 on_github, with the repo's page in details.html_url, and starts nothing.\",\"url\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open\",\"mainEntityOfPage\":{\"@id\":\"https://docs.patch.gg/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open#webpage\"},\"image\":\"https://patch.gg/link-preview.png\",\"dateModified\":\"2026-11-09T06:26:35.790Z\",\"publisher\":{\"@id\":\"https://docs.patch.gg/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.patch.gg#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Patch\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Patch","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":"/get-started"}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API overview","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"Meta","pages":[{"title":"Whether the API and its database are up","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /health","href":"/api-reference/meta/whether-the-api-and-its-database-are-up"}]},{"group":"Account","pages":[{"title":"The signed-in user, their username and orgs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me","href":"/api-reference/account/the-signed-in-user-their-username-and-orgs"},{"title":"Change the name on your account, or give your birthday","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /me","href":"/api-reference/account/change-the-name-on-your-account-or-give-your-birthday"},{"title":"Choose or change your username","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /me/username","href":"/api-reference/account/choose-or-change-your-username"},{"title":"Whether a username or org name is free","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /names/{name}","href":"/api-reference/account/whether-a-username-or-org-name-is-free"},{"title":"Your API keys, newest first","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /tokens","href":"/api-reference/account/your-api-keys-newest-first"},{"title":"Create an API key for an agent or CI","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /tokens","href":"/api-reference/account/create-an-api-key-for-an-agent-or-ci"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /tokens/{id}","href":"/api-reference/account/revoke-an-api-key"},{"title":"Your projects, drafts included, newest first","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/projects","href":"/api-reference/account/your-projects-drafts-included-newest-first"}]},{"group":"Host games","pages":[{"title":"Search the games mods are made for, by name","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /host-games","href":"/api-reference/host-games/search-the-games-mods-are-made-for-by-name"},{"title":"A host game with its store ids and known builds","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /host-games/{slug}","href":"/api-reference/host-games/a-host-game-with-its-store-ids-and-known-builds"},{"title":"Your game requests, newest first, with what Patch's team answered","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /game-requests","href":"/api-reference/host-games/your-game-requests-newest-first-with-what-patchs-team-answered"},{"title":"Ask Patch to support a game","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /game-requests","href":"/api-reference/host-games/ask-patch-to-support-a-game"}]},{"group":"Feedback","pages":[{"title":"Your reports, newest first, with what Patch's team answered","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /feedback","href":"/api-reference/feedback/your-reports-newest-first-with-what-patchs-team-answered"},{"title":"Tell Patch's team what got in your way","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /feedback","href":"/api-reference/feedback/tell-patchs-team-what-got-in-your-way"}]},{"group":"Projects","pages":[{"title":"Search games and mods","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/search","href":"/api-reference/projects/search-games-and-mods"},{"title":"The categories, with how many public projects are in each","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /categories","href":"/api-reference/projects/the-categories-with-how-many-public-projects-are-in-each"},{"title":"Browse public projects, Patch's own first","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects","href":"/api-reference/projects/browse-public-projects-patchs-own-first"},{"title":"Create a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects","href":"/api-reference/projects/create-a-project"},{"title":"A project with its host games and latest public release","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}","href":"/api-reference/projects/a-project-with-its-host-games-and-latest-public-release"},{"title":"Delete a project that's still scratch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{owner}/{slug}","href":"/api-reference/projects/delete-a-project-thats-still-scratch"},{"title":"Edit a project's listing and source settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /projects/{owner}/{slug}","href":"/api-reference/projects/edit-a-projects-listing-and-source-settings"},{"title":"Claim a project as its original creator","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/claim","href":"/api-reference/projects/claim-a-project-as-its-original-creator"},{"title":"Projects you can claim at once as their original creator","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/claimable","href":"/api-reference/projects/projects-you-can-claim-at-once-as-their-original-creator"},{"title":"Staff picks, in order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /featured","href":"/api-reference/projects/staff-picks-in-order"}]},{"group":"Releases","pages":[{"title":"Releases you can see, newest first","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/releases","href":"/api-reference/releases/releases-you-can-see-newest-first"},{"title":"Create a draft release and get upload targets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/releases","href":"/api-reference/releases/create-a-draft-release-and-get-upload-targets"},{"title":"A release with its recipe, files and requirements","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/releases/{version}","href":"/api-reference/releases/a-release-with-its-recipe-files-and-requirements"},{"title":"Publish a release, once the person says it's ready","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/releases/{version}/submit","href":"/api-reference/releases/publish-a-release-once-the-person-says-its-ready"},{"title":"Short-lived download links for every file","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/releases/{version}/download","href":"/api-reference/releases/short-lived-download-links-for-every-file"},{"title":"Finish a multipart upload","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /uploads/{id}/complete","href":"/api-reference/releases/finish-a-multipart-upload"},{"title":"Fetch a public GitHub release's files, to make a release from them","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /imports/github","href":"/api-reference/releases/fetch-a-public-github-releases-files-to-make-a-release-from-them"},{"title":"The GitHub repository a project picks up releases from","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/github","href":"/api-reference/releases/the-github-repository-a-project-picks-up-releases-from"},{"title":"Pick up a GitHub repository's new releases by themselves","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /projects/{owner}/{slug}/github","href":"/api-reference/releases/pick-up-a-github-repositorys-new-releases-by-themselves"},{"title":"Stop picking up a GitHub repository's releases","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{owner}/{slug}/github","href":"/api-reference/releases/stop-picking-up-a-github-repositorys-releases"},{"title":"Check now: pick up the repository's latest release if it's new","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/github/check","href":"/api-reference/releases/check-now:-pick-up-the-repositorys-latest-release-if-its-new"},{"title":"Check a recipe, and optionally the files it goes with","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /recipes/validate","href":"/api-reference/releases/check-a-recipe-and-optionally-the-files-it-goes-with"},{"title":"How to build, test and publish on Patch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /guide","href":"/api-reference/releases/how-to-build-test-and-publish-on-patch"},{"title":"Record what a GitHub Actions workflow built","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /provenance","href":"/api-reference/releases/record-what-a-github-actions-workflow-built"}]},{"group":"Media","pages":[{"title":"A project's cover, screenshots and clips, in order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/media","href":"/api-reference/media/a-projects-cover-screenshots-and-clips-in-order"},{"title":"Add a cover, screenshot or clip, and get where to upload it","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/media","href":"/api-reference/media/add-a-cover-screenshot-or-clip-and-get-where-to-upload-it"},{"title":"Confirm an upload, and start making the media's copies","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/media/{id}/complete","href":"/api-reference/media/confirm-an-upload-and-start-making-the-medias-copies"},{"title":"Reorder a project's media","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /projects/{owner}/{slug}/media/order","href":"/api-reference/media/reorder-a-projects-media"},{"title":"Remove media from the listing","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{owner}/{slug}/media/{id}","href":"/api-reference/media/remove-media-from-the-listing"}]},{"group":"Review","pages":[{"title":"Where a release is in its review: status, checks, findings and test","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/releases/{version}/review","href":"/api-reference/review/where-a-release-is-in-its-review:-status-checks-findings-and-test"},{"title":"Test a release on your PC","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/releases/{version}/tests","href":"/api-reference/review/test-a-release-on-your-pc"},{"title":"A test: its state, each run's checks, and its review","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /tests/{id}","href":"/api-reference/review/a-test:-its-state-each-runs-checks-and-its-review"},{"title":"A test's contact sheets: a frame every 2 seconds, and bursts of consecutive frames, each labelled with its run time","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /tests/{id}/footage","href":"/api-reference/review/a-tests-contact-sheets:-a-frame-every-2-seconds-and-bursts-of-consecutive-frames-each-labelled-with-its-run-time"},{"title":"Send your review of a test's footage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /tests/{id}/review","href":"/api-reference/review/send-your-review-of-a-tests-footage"},{"title":"Cancel a test that hasn't been decided","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /tests/{id}/cancel","href":"/api-reference/review/cancel-a-test-that-hasnt-been-decided"},{"title":"Your test settings: whether your agents' tests start by themselves","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/test-settings","href":"/api-reference/review/your-test-settings:-whether-your-agents-tests-start-by-themselves"},{"title":"Turn your agents' tests starting by themselves on or off","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /me/test-settings","href":"/api-reference/review/turn-your-agents-tests-starting-by-themselves-on-or-off"},{"title":"Publish a release: upload to live in one flow","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/releases/{version}/publish","href":"/api-reference/review/publish-a-release:-upload-to-live-in-one-flow"}]},{"group":"Assets","pages":[{"title":"Search the asset library","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /assets/search","href":"/api-reference/assets/search-the-asset-library"},{"title":"Fields, values, counts and ranges for a query","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /assets/facets","href":"/api-reference/assets/fields-values-counts-and-ranges-for-a-query"},{"title":"Plan adding assets to a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /assets/plan","href":"/api-reference/assets/plan-adding-assets-to-a-project"},{"title":"A license's name, URL, duties and full text","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /assets/licenses/{spdx}","href":"/api-reference/assets/a-licenses-name-url-duties-and-full-text"},{"title":"What an agent should be told about an asset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /assets/{id}/mention","href":"/api-reference/assets/what-an-agent-should-be-told-about-an-asset"},{"title":"One asset: variants with file URLs, capabilities per runtime, license and credit","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /assets/{id}","href":"/api-reference/assets/one-asset:-variants-with-file-urls-capabilities-per-runtime-license-and-credit"}]},{"group":"Repos","pages":[{"title":"A project's git repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo","href":"/api-reference/repos/a-projects-git-repo"},{"title":"Change who can reach a repo, the training switch, or change requests","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /projects/{owner}/{slug}/repo","href":"/api-reference/repos/change-who-can-reach-a-repo-the-training-switch-or-change-requests"},{"title":"Change a repo's licence, and commit its licence files to say the same","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /projects/{owner}/{slug}/repo/license","href":"/api-reference/repos/change-a-repos-licence-and-commit-its-licence-files-to-say-the-same"},{"title":"Fork a project's repo into a new project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/fork","href":"/api-reference/repos/fork-a-projects-repo-into-a-new-project"},{"title":"A repo's forks","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/forks","href":"/api-reference/repos/a-repos-forks"},{"title":"The commit a release came from, and a zip of it","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/releases/{version}/source","href":"/api-reference/repos/the-commit-a-release-came-from-and-a-zip-of-it"},{"title":"Search every open repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /repos/search","href":"/api-reference/repos/search-every-open-repo"},{"title":"Your orgs' repos, private ones included","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/repos","href":"/api-reference/repos/your-orgs-repos-private-ones-included"},{"title":"A repo's branches and tags","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/refs","href":"/api-reference/repos/a-repos-branches-and-tags"},{"title":"A folder in a repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/tree","href":"/api-reference/repos/a-folder-in-a-repo"},{"title":"A file in a repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/file","href":"/api-reference/repos/a-file-in-a-repo"},{"title":"Send a browser to a file's bytes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/raw","href":"/api-reference/repos/send-a-browser-to-a-files-bytes"},{"title":"A repo's history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/commits","href":"/api-reference/repos/a-repos-history"},{"title":"One commit and what it changes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/commit","href":"/api-reference/repos/one-commit-and-what-it-changes"},{"title":"A repo's latest history scan","description":"Members of the owning org. Each secret says its commit, path, line and rule, with the secret itself masked. Patch never stores or returns its value. `will_become_public` is what going open publishes, every author's email included. `up_to_date` is false once a push has landed since it started. With wait, it holds the answer while the scan runs, until it finishes (up to 50 seconds).","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/history-scan","href":"/api-reference/repos/a-repos-latest-history-scan"},{"title":"Scan a repo's whole history before it goes open","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/repo/history-scan","href":"/api-reference/repos/scan-a-repos-whole-history-before-it-goes-open"}]},{"group":"Change requests","pages":[{"title":"A repo's change requests","description":"Newest first: the open ones unless you ask for another `state`, or `all`. Each says whether it's up to date (`up_to_date`) and how much Patch's review flagged (`flagged`, null for one from the repo's own branch, which the review doesn't read), so a list doesn't need a diff per row. `up_to_date` counts once against `repo_diff` for the whole page, and only a page's first 25 open requests have one: past that limit or those 25, or when the repo can't say just now, it's null and the list still answers.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/change-requests","href":"/api-reference/change-requests/a-repos-change-requests"},{"title":"Offer a branch to this repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/change-requests","href":"/api-reference/change-requests/offer-a-branch-to-this-repo"},{"title":"A change request","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/change-requests/{number}","href":"/api-reference/change-requests/a-change-request"},{"title":"Change a request's title or description","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /projects/{owner}/{slug}/change-requests/{number}","href":"/api-reference/change-requests/change-a-requests-title-or-description"},{"title":"What a change request changes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/change-requests/{number}/diff","href":"/api-reference/change-requests/what-a-change-request-changes"},{"title":"What Patch's review of a change request says","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/change-requests/{number}/review","href":"/api-reference/change-requests/what-patchs-review-of-a-change-request-says"},{"title":"Merge a change request","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/change-requests/{number}/merge","href":"/api-reference/change-requests/merge-a-change-request"},{"title":"Decline a change request","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/change-requests/{number}/decline","href":"/api-reference/change-requests/decline-a-change-request"},{"title":"Withdraw a change request","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/change-requests/{number}/withdraw","href":"/api-reference/change-requests/withdraw-a-change-request"},{"title":"A change request's talk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/change-requests/{number}/talk","href":"/api-reference/change-requests/a-change-requests-talk"},{"title":"Post in a change request's talk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/change-requests/{number}/talk","href":"/api-reference/change-requests/post-in-a-change-requests-talk"},{"title":"Delete a post from a change request's talk","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{owner}/{slug}/change-requests/{number}/talk/{id}","href":"/api-reference/change-requests/delete-a-post-from-a-change-requests-talk"}]},{"group":"GitHub","pages":[{"title":"Start linking your GitHub account with a code: for pch and agents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /me/github/device","href":"/api-reference/github/start-linking-your-github-account-with-a-code:-for-pch-and-agents"},{"title":"Whether the person has entered the device flow's code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/github/device/{id}","href":"/api-reference/github/whether-the-person-has-entered-the-device-flows-code"},{"title":"Who you are on GitHub, and where Patch's GitHub App is installed for you","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/github","href":"/api-reference/github/who-you-are-on-github-and-where-patchs-github-app-is-installed-for-you"},{"title":"The repos of one of the app's installations that you can reach","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/github/repos","href":"/api-reference/github/the-repos-of-one-of-the-apps-installations-that-you-can-reach"},{"title":"Connect a GitHub repo to a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /github/connect","href":"/api-reference/github/connect-a-github-repo-to-a-project"},{"title":"The GitHub repo that's a project's repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/repo/github","href":"/api-reference/github/the-github-repo-thats-a-projects-repo"},{"title":"Disconnect a project from its GitHub repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /projects/{owner}/{slug}/repo/github","href":"/api-reference/github/disconnect-a-project-from-its-github-repo"},{"title":"Open a pull request on a connected repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /projects/{owner}/{slug}/github/pulls","href":"/api-reference/github/open-a-pull-request-on-a-connected-repo"},{"title":"How a pull request on a connected repo stands","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /projects/{owner}/{slug}/github/pulls/{number}","href":"/api-reference/github/how-a-pull-request-on-a-connected-repo-stands"},{"title":"Merge a pull request on a connected repo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /projects/{owner}/{slug}/github/pulls/{number}/merge","href":"/api-reference/github/merge-a-pull-request-on-a-connected-repo"},{"title":"Your projects whose repo is on GitHub","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /me/github/projects","href":"/api-reference/github/your-projects-whose-repo-is-on-github"}]}]}]}]},"basePath":"","title":"Scan a repo's whole history before it goes open - Patch","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}