Semgrep can match generic patterns in languages that it does not yet support. Use generic pattern matching for languages that do not have a parser, configuration files, or other structured data such as XML. Generic pattern matching can also be helpful in files containing multiple languages, even if the languages are otherwise supported, such as HTML with embedded JavaScript or PHP code. In those cases, you can also consider Extract mode (experimental), but generic patterns may be more straightforward and still effective.As an example of generic matching, consider this rule:
rules: - id: dynamic-proxy-scheme pattern: proxy_pass $$SCHEME:// ...; paths: include: - "*.conf" - "*.vhost" - sites-available/* - sites-enabled/* languages: - generic severity: MEDIUM message: >- The protocol scheme for this proxy is dynamically determined. This can be dangerous if the scheme is injected by an attacker because it may forcibly alter the connection scheme. Consider hardcoding a scheme for this proxy. metadata: references: - https://github.com/yandex/gixy/blob/master/en/plugins/ssrf.md category: security technology: - nginx confidence: MEDIUM
Generic pattern matching has the following properties:
A document is interpreted as a nested sequence of ASCII words, ASCII punctuation, and other bytes.
... (ellipsis operator) allows skipping non-matching elements, up to 10 lines down from the last match.
$X (metavariable) matches any word.
$...X (ellipsis metavariable) matches a sequence of words, up to 10 lines down from the last match.
Indentation determines primary nesting in the document.
Common ASCII braces (), [], and {} introduce secondary nesting but only within single lines. Therefore, misinterpreted or mismatched braces don’t disturb the structure of the rest of the document.
The document must be at least as indented as the pattern: any indentation specified in the pattern must be honored in the document.
Semgrep can reliably understand the syntax of natively supported languages. The generic mode is useful for unsupported languages and consequently brings specific limitations.
CAUTIONThe quality of results in the generic mode can vary depending on the language you use it for.
The generic mode works fine with any human-readable text, as long as it is primarily based on ASCII symbols. Since the generic mode does not understand the syntax of the language you are scanning, the quality of the result may differ from language to language or even depend on specific code. As a consequence, the generic mode works well for some languages, but it does not always give consistent results. Generally, it’s possible or even easy to write code in weird ways that prevent generic mode from matching.Example: In XML, one can write Hello instead of Hello. If a rule pattern in generic mode is Hello, Semgrep is unable to match the Hello, unlike if it had full XML support.With respect to Semgrep operators and features:
support is limited to capturing a single “word”, which is a token of the form [A-Za-z0-9_]+. They can’t capture sequences of tokens such as hello, world (in this case, there are three tokens: hello, ,, and world).
The ellipsis operator is supported and spans, at most, 10 lines.
The pattern operators like either/not/inside are supported.
Inline regular expressions for strings ("=~/word.*/") are not supported.
This section explains how to use Semgrep’s generic mode to match
single lines of code using an ellipsis metavariable. Many simple
configuration formats are collections of key and value pairs delimited
by newlines. For example, to extract the password value from the
following made-up input:
Unfortunately, the following pattern does not match the whole line. In generic mode, metavariables only capture a single word (alphanumeric sequence):
password = $PASSWORD
This pattern matches the input file but assigns the value p to $PASSWORD instead of the full value p@$$w0rd.To match an arbitrary sequence of items and capture their value in the example:
Use a named ellipsis by changing the pattern to the following:
password = $...PASSWORD
This still leads Semgrep to capture too much information. The value assigned to $...PASSWORD is now p@$$w0rd and server = example.com. In generic mode, an ellipsis extends until the end of the current block or up to 10 lines below, whichever comes first. To prevent this behavior, continue with the next step.
In the Semgrep rule, specify the following key:
generic_ellipsis_max_span: 0
This option forces the ellipsis operator to match patterns within a single line.
Example of the resulting rule:
id: password-in-config-filepattern: | password = $...PASSWORDoptions: # prevent ellipses from matching multiple lines generic_ellipsis_max_span: 0message: | password found in config file: $...PASSWORDlanguages: - genericseverity: WARNING
By default, the generic mode does not know about comments or code
that can be ignored. The following example is
scanning for CSS code that sets the text color to blue. The target code
is the following:
color: /* my fave color */ blue;
Use the options.generic_comment_style
to ignore C-style comments, as is the case in the example.
The Semgrep rule is:
id: css-blue-is-uglypattern: | color: blueoptions: # ignore comments of the form /* ... */ generic_comment_style: cmessage: | Blue is ugly.languages: - genericseverity: WARNING
In the Semgrep code, the generic pattern matching implementation is called spacegrep because it tokenizes based on whitespace (and because it sounds cool 😎).
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Semgrep","colors":{"primary":"#008456","light":"#008456","dark":"#54D8B7"},"logo":{"light":"https://mintcdn.com/semgrep-ee9d73d8/6O2eWotSEeX-M9yU/logo/light.svg?fit=max\u0026auto=format\u0026n=6O2eWotSEeX-M9yU\u0026q=85\u0026s=b53db72fbb1f3942a5595610873e9cc6","dark":"https://mintcdn.com/semgrep-ee9d73d8/6O2eWotSEeX-M9yU/logo/dark.svg?fit=max\u0026auto=format\u0026n=6O2eWotSEeX-M9yU\u0026q=85\u0026s=2c839aeee7634559bcfcaab9f54df40d","href":"https://semgrep.dev"},"favicon":"https://mintcdn.com/semgrep-ee9d73d8/yMsI1pCt6oL_Pkb9/favicon.svg?fit=max\u0026auto=format\u0026n=yMsI1pCt6oL_Pkb9\u0026q=85\u0026s=61bb3fbb609f4fb63384c3321dee46d3","background":{"decoration":"gradient","color":{"light":"#f8f9f9","dark":"#131a2c"}},"navbar":{"links":[{"href":"https://semgrep.dev/orgs/-","label":"Login"}],"primary":{"type":"button","label":"Book demo","href":"https://semgrep.dev/contact/demo/"}},"footer":{"socials":{"x":"https://x.com/semgrep","github":"https://github.com/semgrep/semgrep","linkedin":"https://www.linkedin.com/company/semgrep"}},"integrations":{"gtm":{"tagId":"GTM-NNHHMTCL"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Registry","icon":"database","href":"https://semgrep.dev/explore/"},{"anchor":"Playground","icon":"codepen","href":"https://semgrep.dev/playground/new"},{"anchor":"Academy","icon":"graduation-cap","href":"https://academy.semgrep.dev"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"semgrep-ee9d73d8","hasAudioNarration":false,"actualSubdomain":"semgrep-ee9d73d8","customDomains":["docs.semgrep.dev"],"gitSource":{"type":"github","owner":"semgrep","repo":"semgrep-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae23335513bdca6ff7c14fb","collectionId":"7cda6da1-a522-46de-b8a5-1464871eb1dc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae23335513bdca6ff7c14fb"},"feedback":{"edits":false,"thumbs":true,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae23335513bdca6ff7c14fb","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API","count":245},{"language":"default","tag":"Endpoints","count":235},{"language":"default","tag":"v2 (Experimental)","count":215},{"language":"default","tag":"Knowledge base","count":174},{"language":"default","tag":"Help","count":144},{"language":"default","tag":"Scan \u0026 secure","count":122},{"language":"default","tag":"Set up and deploy scans","count":50},{"language":"default","tag":"Scan and triage","count":36},{"language":"default","tag":"Core deployment","count":33},{"language":"default","tag":"Learning guides","count":32}],"searchSettings":{"maxResults":10,"isFiltersEnabled":true,"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"h1{font-weight:400!important}.dark .accordion,.dark [data-component-part=accordion-button]{background-color:#131c2d!important}.dark [data-component-part=accordion-button]:hover{background-color:#1f2d44!important}.api-changelog-table td:first-child,.api-changelog-table th:first-child{min-width:0!important;width:1%;white-space:nowrap}.api-changelog-table td:last-child a,.api-changelog-table td:last-child>span{display:inline-block;margin-bottom:.3rem}.api-changelog-table td:last-child a:last-child{margin-bottom:0}[data-component-part=tooltip-content]{max-width:min(28rem,calc(100vw - 2rem));overflow-wrap:anywhere;white-space:pre-line}.scm-support-matrix table{width:auto!important;min-width:0!important}.scm-support-matrix td:first-child,.scm-support-matrix th:first-child{vertical-align:bottom;width:12rem;min-width:10rem!important}.scm-support-matrix td:first-child{vertical-align:middle}.scm-support-matrix th:not(:first-child){position:relative;height:10rem;min-width:2.75rem;padding:0!important;white-space:nowrap}.scm-support-matrix th:not(:first-child)>span{position:absolute;bottom:.6rem;left:50%;transform-origin:left bottom;transform:rotate(-45deg)}.scm-support-matrix td:not(:first-child){min-width:0!important;white-space:nowrap}.scm-legend-entry{white-space:nowrap}.scm-support-matrix a{border-bottom:none!important;text-decoration:none!important}#recommended-gitlab-version{scroll-margin-top:8rem}"}],"page":{"pagePath":"writing-rules/generic-pattern-matching","slug":"/writing-rules/generic-pattern-matching","pageMetadata":{"title":"Generic pattern matching","description":null,"href":"/writing-rules/generic-pattern-matching"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedFrame,Tooltip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedFrame)_missingMdxReference(`OptimizedFrame`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`introduction`,children:`Introduction`}),`\n`,_jsxs(_components.p,{children:[`Semgrep can match generic patterns in languages that it does `,_jsx(_components.strong,{children:`not`}),` yet support. Use generic pattern matching for languages that do not have a parser, configuration files, or other structured data such as XML. Generic pattern matching can also be helpful in files containing multiple languages, even if the languages are otherwise supported, such as HTML with embedded JavaScript or PHP code. In those cases, you can also consider `,_jsx(_components.a,{href:`/writing-rules/experiments/deprecated-experiments#extract-mode`,children:`Extract mode (experimental)`}),`, but generic patterns may be more straightforward and still effective.`]}),`\n`,_jsx(_components.p,{children:`As an example of generic matching, consider this rule:`}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`24`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`24`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`rules`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`dynamic-proxy-scheme`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` pattern`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`proxy_pass $$SCHEME:// ...;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` paths`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` include`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"*.conf\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"*.vhost\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sites-available/*`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sites-enabled/*`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` languages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`generic`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` severity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`MEDIUM`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`-`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` The protocol scheme for this proxy is dynamically determined.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` This can be dangerous if the scheme is injected by an`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` attacker because it may forcibly alter the connection scheme.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Consider hardcoding a scheme for this proxy.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` metadata`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` references`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`https://github.com/yandex/gixy/blob/master/en/plugins/ssrf.md`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` category`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`security`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` technology`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`nginx`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` confidence`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`MEDIUM`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The preceding rule `,_jsx(_components.a,{href:`https://semgrep.dev/playground/r/generic.nginx.security.dynamic-proxy-scheme.dynamic-proxy-scheme`,children:`matches`}),` this code snippet:`]}),`\n`,_jsx(CodeBlock,{filename:``,expandable:`true`,numberOfLines:`31`,language:`java`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`java`,children:_jsxs(_components.code,{language:`java`,numberOfLines:`31`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`server {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` listen `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`443`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` server_name `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`www`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`example`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` keepalive_timeout `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`70`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl_certificate `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`www`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`example`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`crt`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl_certificate_key `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`www`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`example`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`com`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` location `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`~`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)$ {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` # ruleid`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dynamic`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`scheme`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proxy_pass $1`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`//$2/$3;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` location `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`~*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ^/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`internal`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`?`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy_proto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`https`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`?`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy_host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`?`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`?`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy_path`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)$ {`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` internal;`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` # ruleid`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dynamic`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`scheme`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proxy_pass $proxy_proto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`//$proxy_host/$proxy_path ;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proxy_set_header `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#4EC9B0`},children:`Host`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $proxy_host`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` location `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`~`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)$ {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` # ok`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dynamic`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`scheme`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proxy_pass http`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`//$1/$2/$3;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` location `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`~`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)$ {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` # ok`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` dynamic`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`proxy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`scheme`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proxy_pass https`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`:`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`//$1/$2/$3;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Generic pattern matching has the following properties:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A document is interpreted as a nested sequence of ASCII words, ASCII punctuation, and other bytes.`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`...`}),` (ellipsis operator) allows skipping non-matching elements, up to 10 lines down from the last match.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`$X`}),` (metavariable) matches any word.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`$...X`}),` (ellipsis metavariable) matches a sequence of words, up to 10 lines down from the last match.`]}),`\n`,_jsx(_components.li,{children:`Indentation determines primary nesting in the document.`}),`\n`,_jsxs(_components.li,{children:[`Common ASCII braces `,_jsx(_components.code,{children:`()`}),`, `,_jsx(_components.code,{children:`[]`}),`, and `,_jsx(_components.code,{children:`{}`}),` introduce secondary nesting but only within single lines. Therefore, misinterpreted or mismatched braces don’t disturb the structure of the rest of the document.`]}),`\n`,_jsx(_components.li,{children:`The document must be at least as indented as the pattern: any indentation specified in the pattern must be honored in the document.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`caveats-and-limitations-of-generic-mode`,children:`Caveats and limitations of generic mode`}),`\n`,_jsxs(_components.p,{children:[`Semgrep can reliably understand the syntax of natively `,_jsx(_components.a,{href:`/supported-languages`,children:`supported languages`}),`. The generic mode is useful for unsupported languages and consequently brings specific limitations.`]}),`\n`,_jsxs(Warning,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`CAUTION`})}),_jsx(_components.p,{children:`The quality of results in the generic mode can vary depending on the language you use it for.`})]}),`\n`,_jsx(_components.p,{children:`The generic mode works fine with any human-readable text, as long as it is primarily based on ASCII symbols. Since the generic mode does not understand the syntax of the language you are scanning, the quality of the result may differ from language to language or even depend on specific code. As a consequence, the generic mode works well for some languages, but it does not always give consistent results. Generally, it’s possible or even easy to write code in weird ways that prevent generic mode from matching.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example`}),`: In XML, one can write `,_jsx(_components.code,{children:`\u0026#x48;\u0026#x65;\u0026#x6C;\u0026#x6C;\u0026#x6F`}),` instead of `,_jsx(_components.code,{children:`Hello`}),`. If a rule pattern in generic mode is `,_jsx(_components.code,{children:`Hello`}),`, Semgrep is unable to match the `,_jsx(_components.code,{children:`\u0026#x48;\u0026#x65;\u0026#x6C;\u0026#x6C;\u0026#x6F`}),`, unlike if it had full XML support.`]}),`\n`,_jsx(_components.p,{children:`With respect to Semgrep operators and features:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(Tooltip,{tip:`Abstraction that matches unknown values. Metavariables begin with $ and can include uppercase letters, digits, and underscores.`,cta:`See full definition.`,href:`/writing-rules/glossary#metavariable`,children:`Metavariable`}),` support is limited to capturing a single “word”, which is a token of the form [A-Za-z0-9_]+. They can’t capture sequences of tokens such as hello, world (in this case, there are three tokens: `,_jsx(_components.code,{children:`hello`}),`, `,_jsx(_components.code,{children:`,`}),`, and `,_jsx(_components.code,{children:`world`}),`).`]}),`\n`,_jsx(_components.li,{children:`The ellipsis operator is supported and spans, at most, 10 lines.`}),`\n`,_jsx(_components.li,{children:`The pattern operators like either/not/inside are supported.`}),`\n`,_jsxs(_components.li,{children:[`Inline regular expressions for strings (`,_jsx(_components.code,{children:`\"=~/word.*/\"`}),`) are not supported.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Heading,{level:`3`,id:`common-pitfall-#1-not-enough`,children:[`Common pitfall #1: not enough `,_jsx(_components.code,{children:`...`})]}),`\n`,_jsx(_components.p,{children:`Rule of thumb:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`If the pattern commonly matches many lines, use `,_jsx(_components.code,{children:`... ...`}),` (20 lines), or `,_jsx(_components.code,{children:`... ... ...`}),` (30 lines), to ensure that all lines are matched.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Here’s an innocuous pattern that should match the call to a function `,_jsx(_components.code,{children:`f()`}),`:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`f(...)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`It matches the following code `,_jsx(_components.a,{href:`https://semgrep.dev/s/9v9R`,children:`just fine`}),`:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`12`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`f(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 2,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 3,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 4,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 5,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 6,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 7,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 8,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 9`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`But it `,_jsx(_components.a,{href:`https://semgrep.dev/s/1z6Q`,children:`fails`}),` here because the function arguments span more than 10 lines:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`13`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`f(`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 1,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 2,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 3,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 4,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 5,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 6,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 7,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 8,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 9,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` 10`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`https://semgrep.dev/s/9v9R`,children:`solution`}),` is to use multiple `,_jsx(_components.code,{children:`...`}),` in the pattern:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`f(... ...)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`common-pitfall-#2-not-enough-indentation`,children:`Common pitfall #2: not enough indentation`}),`\n`,_jsx(_components.p,{children:`Rule of thumb:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`If the target code is always indented, use indentation in the pattern.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`In the following example, the goal is to match the `,_jsx(_components.code,{children:`system`}),` sections containing a `,_jsx(_components.code,{children:`name`}),` field:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`9`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# match here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[system]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` name = \"Debian\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# DON'T match here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[system]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` max_threads = 2`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[user]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` name = \"Admin Overlord\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`❌ This pattern `,_jsx(_components.a,{href:`https://semgrep.dev/s/ry1A`,children:`incorrectly`}),` catches the `,_jsx(_components.code,{children:`name`}),` field in the `,_jsx(_components.code,{children:`user`}),` section:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[system]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`name = ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`✅ This pattern catches `,_jsx(_components.a,{href:`https://semgrep.dev/s/bXAr`,children:`only`}),` the `,_jsx(_components.code,{children:`name`}),` field in the `,_jsx(_components.code,{children:`system`}),` section:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[system]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` name = ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`handling-line-based-input`,children:`Handling line-based input`}),`\n`,_jsxs(_components.p,{children:[`This section explains how to use Semgrep’s generic mode to match\nsingle lines of code using an ellipsis metavariable. Many simple\nconfiguration formats are collections of key and value pairs delimited\nby newlines. For example, to extract the `,_jsx(_components.code,{children:`password`}),` value from the\nfollowing made-up input:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`username = bob`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`password = p@$$w0rd`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`server = example.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`Unfortunately, the following pattern does not match the whole line. In generic mode, metavariables only capture a single word (alphanumeric sequence):`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`password = $PASSWORD`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`This pattern matches the input file but assigns the value `,_jsx(_components.code,{children:`p`}),` to `,_jsx(_components.code,{children:`$PASSWORD`}),` instead of the full value `,_jsx(_components.code,{children:`p@$$w0rd`}),`.`]}),`\n`,_jsx(_components.p,{children:`To match an arbitrary sequence of items and capture their value in the example:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Use a named ellipsis by changing the pattern to the following:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`password = $...PASSWORD`})}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This still leads Semgrep to capture too much information. The value assigned to `,_jsx(_components.code,{children:`$...PASSWORD`}),` is now `,_jsx(_components.code,{children:`p@$$w0rd`}),` and`,_jsx(`br`,{}),`\n`,_jsx(_components.code,{children:`server = example.com`}),`. In generic mode, an ellipsis extends until the end of the current block or up to 10 lines below, whichever comes first. To prevent this behavior, continue with the next step.`]}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In the Semgrep rule, specify the following key:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`generic_ellipsis_max_span`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`This option forces the ellipsis operator to match patterns within a single line.\nExample of the `,_jsx(_components.a,{href:`https://semgrep.dev/playground/s/KPzn`,children:`resulting rule`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`password-in-config-file`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`pattern`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` password = $...PASSWORD`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # prevent ellipses from matching multiple lines`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` generic_ellipsis_max_span`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` password found in config file: $...PASSWORD`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`languages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`generic`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`severity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`WARNING`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`ignoring-comments`,children:`Ignoring comments`}),`\n`,_jsxs(_components.p,{children:[`By default, the generic mode does `,_jsx(_components.strong,{children:`not`}),` know about comments or code\nthat can be ignored. The following example is\nscanning for CSS code that sets the text color to blue. The target code\nis the following:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`color: /* my fave color */ blue;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`/writing-rules/rule-syntax/#options`,children:_jsx(_components.code,{children:`options.generic_comment_style`})}),`\nto ignore C-style comments, as is the case in the example.\nThe Semgrep rule is:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`css-blue-is-ugly`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`pattern`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` color: blue`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`options`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # ignore comments of the form /* ... */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` generic_comment_style`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`c`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`message`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`|`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Blue is ugly.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`languages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` - `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`generic`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`severity`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`WARNING`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`command-line-example`,children:`Command line example`}),`\n`,_jsxs(_components.p,{children:[`Sample pattern: `,_jsx(_components.code,{children:`exec(...)`})]}),`\n`,_jsxs(_components.p,{children:[`Sample target file `,_jsx(_components.code,{children:`exec.txt`}),` contains:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`18`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`import`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` as`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` safe_function`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`safe_function(user_input`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`exec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`\"ls\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`exec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`some_var`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`some_exec(foo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`exec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (foo)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`exec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` bar`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# exec(foo)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`\"exec(bar)\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Output:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`17`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`17`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`$`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` semgrep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -l`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` generic`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" 'exec(...)` exec.text\"})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`7:exec(\"ls\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`--------------------------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`11:exec(some_var)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`--------------------------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`19:exec (foo)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`--------------------------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`23:exec (`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`24:128`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`25: \\xA0 \\xA0bar`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`26:129`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`27:)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`--------------------------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`31:# exec(foo)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`--------------------------------------------------------------------------------`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`35:print(\"exec(bar)\")`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`ran 1 rules on 1 files: 6 findings`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`semgrep-registry-rules-for-generic-pattern-matching`,children:`Semgrep Registry rules for generic pattern matching`}),`\n`,_jsxs(_components.p,{children:[`You can peruse `,_jsx(_components.a,{href:`https://semgrep.dev/r?lang=generic\u0026sev=ERROR,WARNING,INFO\u0026tag=dgryski.semgrep-go,hazanasec.semgrep-rules,ajinabraham.njsscan,best-practice,security,java-spring,go-stdlib,ruby-stdlib,java-stdlib,js-node,nodejsscan,owasp,dlint,react,performance,compatibility,portability,correctness,maintainability,security,mongodb,experimental,caching,robots-denied,missing-noreferrer,missing-noopener`,children:`existing generic rules`}),` in the Semgrep registry. In general, short patterns on structured data perform the best.`]}),`\n`,_jsx(Heading,{level:`2`,id:`cheat-sheet`,children:`Cheat sheet`}),`\n`,_jsxs(_components.p,{children:[`Some examples of what matches and what doesn’t match on the `,_jsx(_components.code,{children:`generic`}),` tab of the Semgrep cheat sheet below:`]}),`\n`,_jsx(Frame,{children:_jsx(OptimizedFrame,{src:`https://semgrep.dev/embed/cheatsheet`,scrolling:`0`,width:`100%`,height:`800`,loading:`lazy`,frameBorder:`0`})}),`\n`,_jsx(Heading,{level:`2`,id:`hidden-bonus`,children:`Hidden bonus`}),`\n`,_jsxs(_components.p,{children:[`In the Semgrep code, the generic pattern matching implementation is called `,_jsx(_components.strong,{children:`spacegrep`}),` because it tokenizes based on whitespace (and because it sounds cool 😎).`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Generic pattern matching","description":null,"href":"/writing-rules/generic-pattern-matching"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Introduction","slug":"introduction","depth":2,"children":[]},{"title":"Caveats and limitations of generic mode","slug":"caveats-and-limitations-of-generic-mode","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[{"title":"Common pitfall #1: not enough ...","slug":"common-pitfall-#1-not-enough","depth":3,"children":[]},{"title":"Common pitfall #2: not enough indentation","slug":"common-pitfall-#2-not-enough-indentation","depth":3,"children":[]},{"title":"Handling line-based input","slug":"handling-line-based-input","depth":3,"children":[]},{"title":"Ignoring comments","slug":"ignoring-comments","depth":3,"children":[]}]},{"title":"Command line example","slug":"command-line-example","depth":2,"children":[]},{"title":"Semgrep Registry rules for generic pattern matching","slug":"semgrep-registry-rules-for-generic-pattern-matching","depth":2,"children":[]},{"title":"Cheat sheet","slug":"cheat-sheet","depth":2,"children":[]},{"title":"Hidden bonus","slug":"hidden-bonus","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/semgrep-ee9d73d8/3525e17c6c545faa/fs.js"],"subdomain":"semgrep-ee9d73d8","siteName":"Semgrep","title":"Generic pattern matching - Semgrep","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T19:12:15.412Z","originalFileLocation":"writing-rules/generic-pattern-matching.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"application-name\" content=\"Semgrep\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Generic pattern matching - Semgrep\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Semgrep\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://semgrep-ee9d73d8.mintlify.app/_mintlify/api/og/v2?division=Advanced+rule-writing+techniques\u0026amp;title=Generic+pattern+matching\u0026amp;theme=78efe124df89674ac26e6eb5\u0026amp;signature=6cf2ed166ef2ce09140f9d3c67298432aecf9680c627537d576c9525d31fff71\">\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=\"Generic pattern matching - Semgrep\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://semgrep-ee9d73d8.mintlify.app/_mintlify/api/og/v2?division=Advanced+rule-writing+techniques\u0026amp;title=Generic+pattern+matching\u0026amp;theme=78efe124df89674ac26e6eb5\u0026amp;signature=6cf2ed166ef2ce09140f9d3c67298432aecf9680c627537d576c9525d31fff71\">\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/semgrep-ee9d73d8/kWw4JJfCeFf62dGq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Semgrep\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#008456\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/writing-rules/generic-pattern-matching.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.semgrep.dev/#organization\",\"name\":\"Semgrep\",\"url\":\"https://docs.semgrep.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/semgrep-ee9d73d8/6O2eWotSEeX-M9yU/logo/light.svg?fit=max\u0026auto=format\u0026n=6O2eWotSEeX-M9yU\u0026q=85\u0026s=b53db72fbb1f3942a5595610873e9cc6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.semgrep.dev#website\",\"name\":\"Semgrep\",\"url\":\"https://docs.semgrep.dev\",\"publisher\":{\"@id\":\"https://docs.semgrep.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching#webpage\",\"url\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching\",\"name\":\"Generic pattern matching\",\"dateModified\":\"2026-10-27T19:12:15.412Z\",\"isPartOf\":{\"@id\":\"https://docs.semgrep.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Write rules for Semgrep Code\",\"item\":\"https://docs.semgrep.dev/writing-rules/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced rule-writing techniques\",\"item\":\"https://docs.semgrep.dev/writing-rules/rule-defined-fix\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Generic pattern matching\",\"item\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching#article\",\"headline\":\"Generic pattern matching\",\"name\":\"Generic pattern matching\",\"url\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching\",\"mainEntityOfPage\":{\"@id\":\"https://docs.semgrep.dev/writing-rules/generic-pattern-matching#webpage\"},\"dateModified\":\"2026-10-27T19:12:15.412Z\",\"publisher\":{\"@id\":\"https://docs.semgrep.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.semgrep.dev#website\"}}]}\u003c/script>","siteName":"Semgrep","nav":{"global":{"anchors":[{"anchor":"Registry","icon":"database","href":"https://semgrep.dev/explore/"},{"anchor":"Playground","icon":"codepen","href":"https://semgrep.dev/playground/new"},{"anchor":"Academy","icon":"graduation-cap","href":"https://academy.semgrep.dev"}]},"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Scan \u0026 secure","icon":"shield-halved","pages":[{"title":"Scan \u0026 secure","href":"/getting-started/quickstart"}]},{"tab":"Scan at code generation","icon":"robot","pages":[{"title":"Scan at code generation","href":"/semgrep-guardian/overview"}]},{"tab":"Write rules","icon":"pen-to-square","groups":[{"group":"Write rules for Semgrep Code","pages":[{"title":"Write rules","sidebarTitle":"Overview","href":"/writing-rules/overview"},{"group":"Rule structure syntax","root":{"title":"Rule structure syntax","href":"/writing-rules/rule-syntax"},"pages":[{"title":"Rule structure syntax examples","href":"/writing-rules/rule-ideas"}]},{"group":"Rule pattern syntax","root":{"title":"Rule pattern syntax","href":"/writing-rules/pattern-syntax"},"pages":[{"title":"Rule pattern syntax examples","href":"/writing-rules/pattern-examples"}]},{"group":"Advanced rule-writing techniques","pages":[{"title":"Rule-defined fix","href":"/writing-rules/rule-defined-fix"},{"group":"Dataflow analysis","root":{"title":"Dataflow analysis engine overview","sidebarTitle":"Dataflow analysis","href":"/writing-rules/data-flow/data-flow-overview"},"pages":[{"title":"Constant propagation","href":"/writing-rules/data-flow/constant-propagation"},{"group":"Taint analysis","root":{"title":"Taint analysis overview","sidebarTitle":"Taint analysis","href":"/writing-rules/data-flow/taint-mode/overview"},"pages":[{"title":"Advanced taint analysis techniques","sidebarTitle":"Advanced techniques for taint analysis","href":"/writing-rules/data-flow/taint-mode/advanced"}]},{"title":"Dataflow status","description":null,"href":"/writing-rules/data-flow/status"}]},{"title":"Generic pattern matching","href":"/writing-rules/generic-pattern-matching"},{"title":"Metavariable analysis","description":null,"href":"/writing-rules/metavariable-analysis"},{"group":"Experiments 🧪","pages":[{"title":"Introduction to Semgrep experiments","sidebarTitle":"Introduction","href":"/writing-rules/experiments/introduction"},{"title":"Pattern syntax (experimental)","href":"/writing-rules/experiments/pattern-syntax"},{"title":"Aliengrep","href":"/writing-rules/experiments/aliengrep"},{"group":"Join mode","root":{"title":"Join mode overview","href":"/writing-rules/experiments/join-mode/overview"},"pages":[{"title":"Recursive joins","href":"/writing-rules/experiments/join-mode/recursive-joins"}]},{"title":"Symbolic propagation","href":"/writing-rules/experiments/symbolic-propagation"},{"title":"Display propagated value of metavariables","href":"/writing-rules/experiments/display-propagated-metavariable"},{"title":"Include multiple focus metavariables using set union semantics","href":"/writing-rules/experiments/multiple-focus-metavariables"},{"title":"r2c-internal-project-depends-on","sidebarTitle":"Key: r2c-internal-project-depends-on","href":"/writing-rules/experiments/r2c-internal-project-depends-on"},{"title":"Match captured metavariables with specific types","href":"/writing-rules/experiments/metavariable-type"},{"title":"Deprecated experiments","href":"/writing-rules/experiments/deprecated-experiments"}]}]},{"title":"Private rules","href":"/writing-rules/private-rules"},{"title":"Test rules","href":"/writing-rules/testing-rules"},{"title":"Troubleshooting rules","href":"/troubleshooting/rules"},{"title":"Static analysis and rule-writing glossary","sidebarTitle":"Glossary","href":"/writing-rules/glossary"}]},{"group":"Write rules for Semgrep Secrets","pages":[{"title":"Semgrep Secrets rule structure and sample","sidebarTitle":"Custom rules","href":"/semgrep-secrets/rules"},{"title":"Write custom validators","sidebarTitle":"Custom validators","href":"/semgrep-secrets/validators"}]}]},{"tab":"API","icon":"code","dropdowns":[{"dropdown":"v1","icon":"code","groups":[{"group":"Overview","pages":[{"title":"Semgrep API v1","href":"/api-reference/v1/Introduction"},{"title":"Authentication","href":"/api-reference/v1/Authentication"},{"title":"Terms of Use","href":"/api-reference/v1/Terms-of-Use"},{"title":"Changelog","href":"/api-reference/v1/Changelog"},{"title":"Deprecation Policy","href":"/api-reference/v1/Deprecation-Policy"}]},{"group":"Endpoints","pages":[{"group":"Code, Supply Chain, and AI-powered detection","pages":[{"title":"List code, supply chain, or AI-powered detection findings","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentSlug}/findings","href":"/api-reference/v1/findingsservice/list-code-supply-chain-or-ai-powered-detection-findings"}]},{"group":"Deployment","pages":[{"title":"List deployments","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments","href":"/api-reference/v1/deploymentsservice/list-deployments"}]},{"group":"Policies","pages":[{"title":"List policies","deprecated":true,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentId}/policies","href":"/api-reference/v1/policiesservice/list-policies"},{"title":"List policy rules","deprecated":true,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentId}/policies/{policyId}","href":"/api-reference/v1/policiesservice/list-policy-rules"},{"title":"Update policy","deprecated":true,"version":null,"openapi":"/public_v1.openapi.yaml put /api/v1/deployments/{deploymentId}/policies/{policyId}","href":"/api-reference/v1/policiesservice/update-policy"}]},{"group":"Projects","pages":[{"title":"Add tags to project","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml put /api/v1/deployments/{deploymentSlug}/projects/{projectName}/tags","href":"/api-reference/v1/projectsservice/add-tags-to-project"},{"title":"Remove tags from project","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml delete /api/v1/deployments/{deploymentSlug}/projects/{projectName}/tags","href":"/api-reference/v1/projectsservice/remove-tags-from-project"},{"title":"Get project details","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentSlug}/projects/{projectName}","href":"/api-reference/v1/projectsservice/get-project-details"},{"title":"Delete project","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml delete /api/v1/deployments/{deploymentSlug}/projects/{projectName}","href":"/api-reference/v1/projectsservice/delete-project"},{"title":"Update project details","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml patch /api/v1/deployments/{deploymentSlug}/projects/{projectName}","href":"/api-reference/v1/projectsservice/update-project-details"},{"title":"List all projects","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentSlug}/projects","href":"/api-reference/v1/projectsservice/list-all-projects"},{"title":"Toggle Managed Scans for a project","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml patch /api/v1/deployments/{deploymentSlug}/projects/{projectName}/managed-scan","href":"/api-reference/v1/projectsservice/toggle-managed-scans-for-a-project"}]},{"group":"Scans","pages":[{"title":"Get scan details","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentId}/scan/{scanId}","href":"/api-reference/v1/scansservice/get-scan-details"},{"title":"List scans (beta)","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/scans/search","href":"/api-reference/v1/scansservice/list-scans-beta"}]},{"group":"Secrets","pages":[{"title":"List secrets","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentId}/secrets","href":"/api-reference/v1/secretsservice/list-secrets"}]},{"group":"Supply Chain","pages":[{"title":"Create a new SBOM export job","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/sbom/export","href":"/api-reference/v1/supplychainservice/create-a-new-sbom-export-job"},{"title":"Get the status of a SBOM export job","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml get /api/v1/deployments/{deploymentId}/sbom/export/{taskToken}","href":"/api-reference/v1/supplychainservice/get-the-status-of-a-sbom-export-job"},{"title":"List dependencies","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/dependencies","href":"/api-reference/v1/supplychainservice/list-dependencies"},{"title":"List lockfiles in a given repository with dependencies","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/dependencies/repositories/{repositoryId}/lockfiles","href":"/api-reference/v1/supplychainservice/list-lockfiles-in-a-given-repository-with-dependencies"},{"title":"List repositories with dependencies","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/dependencies/repositories","href":"/api-reference/v1/supplychainservice/list-repositories-with-dependencies"}]},{"group":"Ticketing","pages":[{"title":"Create Jira tickets","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentSlug}/tickets","href":"/api-reference/v1/ticketingservice/create-jira-tickets"},{"title":"Link an existing ticket to findings","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/tickets/link","href":"/api-reference/v1/ticketingservice/link-an-existing-ticket-to-findings"},{"title":"Unlink a Jira ticket","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml delete /api/v1/deployments/{deploymentId}/ticketing/v2/tickets/{externalTicketId}","href":"/api-reference/v1/ticketingservice/unlink-a-jira-ticket"},{"title":"Unlink a ticket from findings","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentId}/tickets/unlink","href":"/api-reference/v1/ticketingservice/unlink-a-ticket-from-findings"}]},{"group":"Triage","pages":[{"title":"Bulk triage","deprecated":null,"version":null,"openapi":"/public_v1.openapi.yaml post /api/v1/deployments/{deploymentSlug}/triage","href":"/api-reference/v1/triageservice/bulk-triage"}]}]}]},{"dropdown":"v2 (Experimental)","icon":"flask","groups":[{"group":"Overview","pages":[{"title":"Semgrep API v2","href":"/api-reference/v2/Introduction"},{"title":"Authentication","href":"/api-reference/v2/Authentication"},{"title":"Terms of Use","href":"/api-reference/v2/Terms-of-Use"},{"title":"Changelog","href":"/api-reference/v2/Changelog"},{"title":"Deprecation Policy","href":"/api-reference/v2/Deprecation-Policy"}]},{"group":"Endpoints","pages":[{"group":"AI Fix Jobs","pages":[{"title":"Create fix job","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issues/{issueId}/fix_jobs","href":"/api-reference/v2/aifixjobsservice/create-fix-job"}]},{"group":"AI tasks","pages":[{"title":"Create combined task","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/{deploymentId}/combined_task","href":"/api-reference/v2/aitasksservice/create-combined-task"},{"title":"Create pattern fix task","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/pattern_fix","href":"/api-reference/v2/aitasksservice/create-pattern-fix-task"},{"title":"Get task info","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/ai/{deploymentId}/info","href":"/api-reference/v2/aitasksservice/get-task-info"}]},{"group":"Autofix","pages":[{"title":"Create autofix","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/v1/deployments/{deploymentId}/issues/{issueId}/autofix","href":"/api-reference/v2/autofixservice/create-autofix"}]},{"group":"Automations","pages":[{"title":"List automations","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notifications/deployments/{deploymentId}/automations","href":"/api-reference/v2/automationsservice/list-automations"},{"title":"Create automation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/automations","href":"/api-reference/v2/automationsservice/create-automation"},{"title":"Update automation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/notifications/deployments/{deploymentId}/automations/{automationId}","href":"/api-reference/v2/automationsservice/update-automation"},{"title":"Delete automation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/notifications/deployments/{deploymentId}/automations/{automationId}","href":"/api-reference/v2/automationsservice/delete-automation"},{"title":"List automations","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/v2/deployments/{deploymentId}/automations","href":"/api-reference/v2/automationsservice/list-automations-1"}]},{"group":"Autotriage Feedback","pages":[{"title":"Submit autotriage feedback","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/autotriage_feedback","href":"/api-reference/v2/autotriagefeedbackservice/submit-autotriage-feedback"}]},{"group":"Deployment","pages":[{"title":"List deployment users","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/users","href":"/api-reference/v2/deploymentservice/list-deployment-users"},{"title":"Add deployment user","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/users","href":"/api-reference/v2/deploymentservice/add-deployment-user"},{"title":"Create deployment","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments","href":"/api-reference/v2/deploymentservice/create-deployment"},{"title":"Get deployment","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}","href":"/api-reference/v2/deploymentservice/get-deployment"},{"title":"Update deployment","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}","href":"/api-reference/v2/deploymentservice/update-deployment"},{"title":"Get deployment authorized actions","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/authorized_actions","href":"/api-reference/v2/deploymentservice/get-deployment-authorized-actions"},{"title":"Get deployment default user role","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/default_user_role","href":"/api-reference/v2/deploymentservice/get-deployment-default-user-role"},{"title":"Get deployment for current token","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployment","href":"/api-reference/v2/deploymentservice/get-deployment-for-current-token"},{"title":"Get deployment GitHub app status","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/github_app_status","href":"/api-reference/v2/deploymentservice/get-deployment-github-app-status"},{"title":"List deployment users (paginated)","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/users/list","href":"/api-reference/v2/deploymentservice/list-deployment-users-paginated"},{"title":"Remove deployment user","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/users/{userId}","href":"/api-reference/v2/deploymentservice/remove-deployment-user"},{"title":"Send product toggle feedback","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/products/feedback","href":"/api-reference/v2/deploymentservice/send-product-toggle-feedback"},{"title":"Toggle cross-file analysis","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/has_deepsemgrep","href":"/api-reference/v2/deploymentservice/toggle-cross-file-analysis"},{"title":"Toggle dependency query","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/has_dependency_query","href":"/api-reference/v2/deploymentservice/toggle-dependency-query"},{"title":"Toggle triage via comment","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/has_triage_via_comment","href":"/api-reference/v2/deploymentservice/toggle-triage-via-comment"},{"title":"Update deployment user role","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/users/{userId}/roles","href":"/api-reference/v2/deploymentservice/update-deployment-user-role"}]},{"group":"Deployment Products","pages":[{"title":"Get deployment product config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/products","href":"/api-reference/v2/deploymentproductsservice/get-deployment-product-config"},{"title":"Create or update deployment product config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/products","href":"/api-reference/v2/deploymentproductsservice/create-or-update-deployment-product-config"},{"title":"Get deployment admin product config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/products/admin","href":"/api-reference/v2/deploymentproductsservice/get-deployment-admin-product-config"}]},{"group":"Deployment Tags","pages":[{"title":"Get a deployment tag","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/tags/{repositoryTag}","href":"/api-reference/v2/deploymenttagservice/get-a-deployment-tag"},{"title":"Create or update a deployment tag","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/tags/{repositoryTag}","href":"/api-reference/v2/deploymenttagservice/create-or-update-a-deployment-tag"},{"title":"Delete a deployment tag","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/tags/{repositoryTag}","href":"/api-reference/v2/deploymenttagservice/delete-a-deployment-tag"},{"title":"Find deployment tags with project counts","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/tags/find","href":"/api-reference/v2/deploymenttagservice/find-deployment-tags-with-project-counts"},{"title":"List deployment tags","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/tags","href":"/api-reference/v2/deploymenttagservice/list-deployment-tags"}]},{"group":"Deployments","pages":[{"title":"List deployments","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/v2/deployments","href":"/api-reference/v2/deploymentsservice/list-deployments"}]},{"group":"Editor","pages":[{"title":"Validate a rule against example code","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/run","href":"/api-reference/v2/editorservice/validate-a-rule-against-example-code"}]},{"group":"External Ticketing","pages":[{"title":"Create external tickets","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/ticketing/v2/{ticketingInstanceId}/create_tickets","href":"/api-reference/v2/externalticketingservice/create-external-tickets"},{"title":"Delete external ticket","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/notifications/deployments/{deploymentId}/ticketing/v2/{ticketingInstanceId}/tickets/{nangoExternalTicketId}","href":"/api-reference/v2/externalticketingservice/delete-external-ticket"},{"title":"Get external ticketing instances","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notifications/deployments/{deploymentId}/ticketing/v2","href":"/api-reference/v2/externalticketingservice/get-external-ticketing-instances"},{"title":"Link an existing ticket to findings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/ticketing/v2/{ticketingInstanceId}/tickets/link","href":"/api-reference/v2/externalticketingservice/link-an-existing-ticket-to-findings"},{"title":"Unlink a ticket from findings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/ticketing/v2/{ticketingInstanceId}/tickets/unlink","href":"/api-reference/v2/externalticketingservice/unlink-a-ticket-from-findings"}]},{"group":"Global Ignores","pages":[{"title":"Get product ignores","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/ignores","href":"/api-reference/v2/ignoresservice/get-product-ignores"},{"title":"Create product ignores","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/ignores","href":"/api-reference/v2/ignoresservice/create-product-ignores"},{"title":"Delete product ignores","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/ignores","href":"/api-reference/v2/ignoresservice/delete-product-ignores"},{"title":"Update product ignores","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/ignores","href":"/api-reference/v2/ignoresservice/update-product-ignores"}]},{"group":"Infrastructure Configurations","pages":[{"title":"Get Managed Scans VPC bootstrap CloudFormation template","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/infra-config/bootstrap-sms-vpc","href":"/api-reference/v2/infrastructureconfigurationsservice/get-managed-scans-vpc-bootstrap-cloudformation-template"}]},{"group":"Issues","pages":[{"title":"Bulk update issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/findings/v2","href":"/api-reference/v2/issuesservice/bulk-update-issues"},{"title":"Export issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issues/export","href":"/api-reference/v2/issuesservice/export-issues"},{"title":"Get issue","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/issues/v2/{issueId}","href":"/api-reference/v2/issuesservice/get-issue"},{"title":"Get issue code snippets","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/issues/v2/{issueId}/code-snippets","href":"/api-reference/v2/issuesservice/get-issue-code-snippets"},{"title":"Get issue counts","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issue_counts","href":"/api-reference/v2/issuesservice/get-issue-counts"},{"title":"Get issue filters","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issue_filters","href":"/api-reference/v2/issuesservice/get-issue-filters"},{"title":"List issue groups","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issues/search","href":"/api-reference/v2/issuesservice/list-issue-groups"},{"title":"List issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/issues","href":"/api-reference/v2/issuesservice/list-issues"},{"title":"List related issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/deployments/{deploymentId}/issues/{issueId}/related-issues","href":"/api-reference/v2/issuesservice/list-related-issues"}]},{"group":"Issues (Semgrep Agentic Workflows)","pages":[{"title":"Count issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/issues/{deploymentId}/counts","href":"/api-reference/v2/publicissuesservice/count-issues"},{"title":"Export issues as CSV","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/deployments/{deploymentId}/issue-exports","href":"/api-reference/v2/publicissuesservice/export-issues-as-csv"},{"title":"Get issue activity history","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/issues/{deploymentId}/issue/{issueId}/activity","href":"/api-reference/v2/publicissuesservice/get-issue-activity-history"},{"title":"Get issue by ID","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/issues/{deploymentId}/issue/{issueId}","href":"/api-reference/v2/publicissuesservice/get-issue-by-id"},{"title":"Triage issue","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/issues/{deploymentId}/issue/{issueId}","href":"/api-reference/v2/publicissuesservice/triage-issue"},{"title":"Get issue export","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/deployments/{deploymentId}/issue-exports/{exportId}","href":"/api-reference/v2/publicissuesservice/get-issue-export"},{"title":"List issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/issues/{deploymentId}/list","href":"/api-reference/v2/publicissuesservice/list-issues"}]},{"group":"Managed Scan Settings","pages":[{"title":"Get Semgrep Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/managed_scan_settings","href":"/api-reference/v2/managedscansettingsservice/get-semgrep-managed-scan-settings"},{"title":"Create Semgrep Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/managed_scan_settings","href":"/api-reference/v2/managedscansettingsservice/create-semgrep-managed-scan-settings"},{"title":"Update Semgrep Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/managed_scan_settings/{managedScanSettingsId}","href":"/api-reference/v2/managedscansettingsservice/update-semgrep-managed-scan-settings"},{"title":"Delete Semgrep Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/managed_scan_settings/{managedScanSettingsId}","href":"/api-reference/v2/managedscansettingsservice/delete-semgrep-managed-scan-settings"}]},{"group":"Memories","pages":[{"title":"Create memory","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/memories","href":"/api-reference/v2/memoriesservice/create-memory"},{"title":"Create memory from triage","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/memories/triage","href":"/api-reference/v2/memoriesservice/create-memory-from-triage"},{"title":"Update memory","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/ai/deployments/{deploymentId}/memories/{memoryId}","href":"/api-reference/v2/memoriesservice/update-memory"},{"title":"Delete memory","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/ai/deployments/{deploymentId}/memories/{memoryId}","href":"/api-reference/v2/memoriesservice/delete-memory"},{"title":"Find relevant issues","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/relevant_issues","href":"/api-reference/v2/memoriesservice/find-relevant-issues"},{"title":"Get memories by IDs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/memories/ids","href":"/api-reference/v2/memoriesservice/get-memories-by-ids"},{"title":"Get memory statistics","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/ai/deployments/{deploymentId}/memories/stats","href":"/api-reference/v2/memoriesservice/get-memory-statistics"},{"title":"List memories","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/ai/deployments/{deploymentId}/memories/list","href":"/api-reference/v2/memoriesservice/list-memories"},{"title":"List suggested memories","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/ai/deployments/{deploymentId}/memories/suggested","href":"/api-reference/v2/memoriesservice/list-suggested-memories"}]},{"group":"Notification Rules","pages":[{"title":"Create notification rule","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/actions","href":"/api-reference/v2/notificationrulesservice/create-notification-rule"},{"title":"Replace notification rule","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/actions/{notificationRuleId}","href":"/api-reference/v2/notificationrulesservice/replace-notification-rule"},{"title":"Delete notification rule","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/actions/{notificationRuleId}","href":"/api-reference/v2/notificationrulesservice/delete-notification-rule"},{"title":"List notification rules","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/actions/list","href":"/api-reference/v2/notificationrulesservice/list-notification-rules"},{"title":"Test notification rule","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/actions/{notificationRuleId}/test","href":"/api-reference/v2/notificationrulesservice/test-notification-rule"}]},{"group":"Notification Webhooks","pages":[{"title":"List notification webhooks","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notification_webhooks/deployments/{deploymentId}/webhooks","href":"/api-reference/v2/notificationwebhooksservice/list-notification-webhooks"},{"title":"Create notification webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notification_webhooks/deployments/{deploymentId}/webhooks","href":"/api-reference/v2/notificationwebhooksservice/create-notification-webhook"},{"title":"Get notification webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notification_webhooks/deployments/{deploymentId}/webhooks/{webhookId}","href":"/api-reference/v2/notificationwebhooksservice/get-notification-webhook"},{"title":"Update notification webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/notification_webhooks/deployments/{deploymentId}/webhooks/{webhookId}","href":"/api-reference/v2/notificationwebhooksservice/update-notification-webhook"},{"title":"Delete notification webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/notification_webhooks/deployments/{deploymentId}/webhooks/{webhookId}","href":"/api-reference/v2/notificationwebhooksservice/delete-notification-webhook"},{"title":"Test notification webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notification_webhooks/deployments/{deploymentId}/webhooks/{webhookId}/test","href":"/api-reference/v2/notificationwebhooksservice/test-notification-webhook"}]},{"group":"Policies","pages":[{"title":"List policies","deprecated":true,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/policies/v1/deployments/{deploymentId}","href":"/api-reference/v2/policiesservice/list-policies"},{"title":"List policy rules","deprecated":true,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/policies/v1/deployments/{deploymentId}/{policyId}/rules","href":"/api-reference/v2/policiesservice/list-policy-rules"},{"title":"Update policy rule","deprecated":true,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/policies/v1/deployments/{deploymentId}/{policyId}/rules/{rulePath}","href":"/api-reference/v2/policiesservice/update-policy-rule"}]},{"group":"Policies V2","pages":[{"title":"Get a detection policy","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/policies/v2/deployments/{deploymentId}/detection-policy/{product}","href":"/api-reference/v2/policiesv2service/get-a-detection-policy"},{"title":"Apply a detection policy","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml put /api/policies/v2/deployments/{deploymentId}/detection-policy/{product}","href":"/api-reference/v2/policiesv2service/apply-a-detection-policy"},{"title":"Get remediation policies","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/policies/v2/deployments/{deploymentId}/remediation-policies","href":"/api-reference/v2/policiesv2service/get-remediation-policies"},{"title":"Apply remediation policies","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml put /api/policies/v2/deployments/{deploymentId}/remediation-policies","href":"/api-reference/v2/policiesv2service/apply-remediation-policies"},{"title":"Get the detection policy summary","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/policies/v2/deployments/{deploymentId}/detection-policy","href":"/api-reference/v2/policiesv2service/get-the-detection-policy-summary"},{"title":"Get the policy vocabulary","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/policies/v2/deployments/{deploymentId}/vocab","href":"/api-reference/v2/policiesv2service/get-the-policy-vocabulary"},{"title":"Preview a detection policy apply","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/policies/v2/deployments/{deploymentId}/detection-policy/{product}:dryRun","href":"/api-reference/v2/policiesv2service/preview-a-detection-policy-apply"},{"title":"Preview a remediation policies apply","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/policies/v2/deployments/{deploymentId}/remediation-policies:dryRun","href":"/api-reference/v2/policiesv2service/preview-a-remediation-policies-apply"}]},{"group":"Projects","pages":[{"title":"Add Semgrep CI secrets to GitHub repositories","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/repos/_secret","href":"/api-reference/v2/projectsservice/add-semgrep-ci-secrets-to-github-repositories"},{"title":"Bulk edit projects by filter","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/repos/filtered","href":"/api-reference/v2/projectsservice/bulk-edit-projects-by-filter"},{"title":"Bulk edit selected projects","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/repos","href":"/api-reference/v2/projectsservice/bulk-edit-selected-projects"},{"title":"Get project","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/v2/deployments/{deploymentId}/projects/{projectId}","href":"/api-reference/v2/projectsservice/get-project"},{"title":"Delete project","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/v2/deployments/{deploymentId}/projects/{projectId}","href":"/api-reference/v2/projectsservice/delete-project"},{"title":"Get branch","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/v2/deployments/{deploymentId}/projects/{projectId}/branches/{branchId}","href":"/api-reference/v2/projectsservice/get-branch"},{"title":"Get project count","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/repos/count","href":"/api-reference/v2/projectsservice/get-project-count"},{"title":"List project IDs by tag","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/repos/by-tag","href":"/api-reference/v2/projectsservice/list-project-ids-by-tag"},{"title":"List projects","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/v2/deployments/{deploymentId}/projects/list","href":"/api-reference/v2/projectsservice/list-projects"},{"title":"Provision Semgrep CI GitHub Actions","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/repos/_provision","href":"/api-reference/v2/projectsservice/provision-semgrep-ci-github-actions"},{"title":"Sync all projects to SCM","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/repos/_refresh_async","href":"/api-reference/v2/projectsservice/sync-all-projects-to-scm"},{"title":"Sync project to SCM","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/repos/{repoId}/_sync","href":"/api-reference/v2/projectsservice/sync-project-to-scm"},{"title":"Update project","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/repos/{idOrName}","href":"/api-reference/v2/projectsservice/update-project"}]},{"group":"Projects - Managed Scan Settings","pages":[{"title":"Bulk get many projects' Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sms/v2/deployments/{deploymentId}/project_settings","href":"/api-reference/v2/projectmanagedscansettingsservice/bulk-get-many-projects-managed-scan-settings"},{"title":"Get a project's Managed Scan settings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/sms/v2/deployments/{deploymentId}/projects/{projectId}/settings","href":"/api-reference/v2/projectmanagedscansettingsservice/get-a-projects-managed-scan-settings"}]},{"group":"Reporting","pages":[{"title":"Get backlog by product report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/backlog/by-product","href":"/api-reference/v2/reportsservice/get-backlog-by-product-report"},{"title":"Get backlog by rule report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/backlog/by-rule","href":"/api-reference/v2/reportsservice/get-backlog-by-rule-report"},{"title":"Get backlog by severity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/backlog/by-severity","href":"/api-reference/v2/reportsservice/get-backlog-by-severity-report"},{"title":"Get findings activity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/activity","href":"/api-reference/v2/reportsservice/get-findings-activity-report"},{"title":"Get findings by project and product report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/by-project/by-product","href":"/api-reference/v2/reportsservice/get-findings-by-project-and-product-report"},{"title":"Get findings by project and severity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/by-project/by-severity","href":"/api-reference/v2/reportsservice/get-findings-by-project-and-severity-report"},{"title":"Get findings funnel report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/funnel","href":"/api-reference/v2/reportsservice/get-findings-funnel-report"},{"title":"Get guardrails activity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/guardrails-activity","href":"/api-reference/v2/reportsservice/get-guardrails-activity-report"},{"title":"Get guardrails adoption report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/guardrails-adoption","href":"/api-reference/v2/reportsservice/get-guardrails-adoption-report"},{"title":"Get Malware Firewall blocked malicious dependencies by advisory report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/malware-firewall/blocked-mal-deps/by-advisory","href":"/api-reference/v2/reportsservice/get-malware-firewall-blocked-malicious-dependencies-by-advisory-report"},{"title":"Get Malware Firewall blocked malicious dependencies by dependency, version, and ecosystem report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/malware-firewall/blocked-mal-deps/by-dep-version-and-ecosystem","href":"/api-reference/v2/reportsservice/get-malware-firewall-blocked-malicious-dependencies-by-dependency-version-and-ecosystem-report"},{"title":"Get Malware Firewall blocked malicious dependencies by ecosystem report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/malware-firewall/blocked-mal-deps/by-ecosystem","href":"/api-reference/v2/reportsservice/get-malware-firewall-blocked-malicious-dependencies-by-ecosystem-report"},{"title":"Get Malware Firewall scan activity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/malware-firewall/scan-activity","href":"/api-reference/v2/reportsservice/get-malware-firewall-scan-activity-report"},{"title":"Get Malware Firewall summary report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/malware-firewall/summary","href":"/api-reference/v2/reportsservice/get-malware-firewall-summary-report"},{"title":"Get median open age by product report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/median-open-age/by-product","href":"/api-reference/v2/reportsservice/get-median-open-age-by-product-report"},{"title":"Get median open age by severity report","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/reports/median-open-age/by-severity","href":"/api-reference/v2/reportsservice/get-median-open-age-by-severity-report"},{"title":"Get report findings","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/reporting/{deploymentId}/findings","href":"/api-reference/v2/reportsservice/get-report-findings"}]},{"group":"Review Comment Product Content","pages":[{"title":"List review comment product content","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/deployments/{deploymentId}/scm_comment_product_content","href":"/api-reference/v2/reviewcommentproductcontentservice/list-review-comment-product-content"},{"title":"Create review comment product content","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/deployments/{deploymentId}/scm_comment_product_content","href":"/api-reference/v2/reviewcommentproductcontentservice/create-review-comment-product-content"},{"title":"Update review comment product content","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/deployments/{deploymentId}/scm_comment_product_content/{reviewCommentProductContentId}","href":"/api-reference/v2/reviewcommentproductcontentservice/update-review-comment-product-content"},{"title":"Delete review comment product content","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/deployments/{deploymentId}/scm_comment_product_content/{reviewCommentProductContentId}","href":"/api-reference/v2/reviewcommentproductcontentservice/delete-review-comment-product-content"}]},{"group":"Ruleboards","pages":[{"title":"List ruleboards","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/ruleboards","href":"/api-reference/v2/ruleboardservice/list-ruleboards"},{"title":"Create ruleboard","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/ruleboards","href":"/api-reference/v2/ruleboardservice/create-ruleboard"},{"title":"Get ruleboard","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}","href":"/api-reference/v2/ruleboardservice/get-ruleboard"},{"title":"Update ruleboard","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}","href":"/api-reference/v2/ruleboardservice/update-ruleboard"},{"title":"Delete ruleboard","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}","href":"/api-reference/v2/ruleboardservice/delete-ruleboard"},{"title":"Get ruleboard finding counts","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}/finding_counts","href":"/api-reference/v2/ruleboardservice/get-ruleboard-finding-counts"},{"title":"Get ruleboard overview","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}/overview","href":"/api-reference/v2/ruleboardservice/get-ruleboard-overview"},{"title":"Update ruleboard overview","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/agent/deployments/{deploymentId}/ruleboards/{ruleboardSlug}/overview","href":"/api-reference/v2/ruleboardservice/update-ruleboard-overview"}]},{"group":"Scans","pages":[{"title":"Get scan","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/v2/deployments/{deploymentId}/scans/{scanId}","href":"/api-reference/v2/scansservice/get-scan"},{"title":"List scan subproject stats","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/deployments/{deploymentId}/scans/{scanId}/subproject-stats","href":"/api-reference/v2/scansservice/list-scan-subproject-stats"},{"title":"List scans","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/v2/deployments/{deploymentId}/projects/{projectId}/scans/list","href":"/api-reference/v2/scansservice/list-scans"},{"title":"Retry failed Managed Scans","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/v2/deployments/{deploymentId}/scans/retry","href":"/api-reference/v2/scansservice/retry-failed-managed-scans"}]},{"group":"Semgrep Agentic Workflows","pages":[{"title":"Get workflow job findings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/findings","href":"/api-reference/v2/semgrepworkflowsservice/get-workflow-job-findings"},{"title":"Get workflow job overview","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/workflows/v1/deployments/{deploymentId}/jobs/id/{jobId}/overview","href":"/api-reference/v2/semgrepworkflowsservice/get-workflow-job-overview"},{"title":"List available workflow types","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/workflows/v1/deployments/{deploymentId}/registry","href":"/api-reference/v2/semgrepworkflowsservice/list-available-workflow-types"},{"title":"List workflow jobs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/workflows/v1/deployments/{deploymentId}/jobs/list","href":"/api-reference/v2/semgrepworkflowsservice/list-workflow-jobs"},{"title":"Trigger a workflow run","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/workflows/v1/deployments/{deploymentId}/trigger","href":"/api-reference/v2/semgrepworkflowsservice/trigger-a-workflow-run"}]},{"group":"Slack","pages":[{"title":"Get Slack installation details","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/slack/installations","href":"/api-reference/v2/slackservice/get-slack-installation-details"},{"title":"Delete Slack installation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/slack/installations","href":"/api-reference/v2/slackservice/delete-slack-installation"},{"title":"Get Slack app installation URL","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/slack/install","href":"/api-reference/v2/slackservice/get-slack-app-installation-url"},{"title":"Get Slack channel mappings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/slack/channel_mappings","href":"/api-reference/v2/slackservice/get-slack-channel-mappings"},{"title":"Get Slack notification mappings","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/slack/channels","href":"/api-reference/v2/slackservice/get-slack-notification-mappings"},{"title":"Handle Slack OAuth callback","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/slack/oauth/callback","href":"/api-reference/v2/slackservice/handle-slack-oauth-callback"}]},{"group":"Source Code Management (SCM) apps","pages":[{"title":"Add Azure DevOps project","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/scm_apps/{scmAppId}/add_ado_project","href":"/api-reference/v2/scmappsservice/add-azure-devops-project"},{"title":"Complete Azure DevOps SCM app install","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/scm/ado_app_install","href":"/api-reference/v2/scmappsservice/complete-azure-devops-scm-app-install"},{"title":"Complete Cursor Origin installation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/deployments/{deploymentId}/cursor-installations/{requestId}/receipt","href":"/api-reference/v2/scmappsservice/complete-cursor-origin-installation"},{"title":"Complete SCM app request","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/scm/app_request_complete","href":"/api-reference/v2/scmappsservice/complete-scm-app-request"},{"title":"Create Azure DevOps SCM app (Service Principal)","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/ado_app","href":"/api-reference/v2/scmappsservice/create-azure-devops-scm-app-service-principal"},{"title":"Create SCM app request","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/app_request","href":"/api-reference/v2/scmappsservice/create-scm-app-request"},{"title":"Delete SCM app","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/scm/deployments/{deploymentId}/scm_apps/{scmAppId}","href":"/api-reference/v2/scmappsservice/delete-scm-app"},{"title":"Get public GitHub app status","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/scm_apps/public_gha","href":"/api-reference/v2/scmappsservice/get-public-github-app-status"},{"title":"Get SCM app","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/scm_apps/{requestId}","href":"/api-reference/v2/scmappsservice/get-scm-app"},{"title":"List SCM apps","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/scm_apps","href":"/api-reference/v2/scmappsservice/list-scm-apps"},{"title":"Rotate SCM app webhook secret","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/scm_apps/{scmAppId}/rotate_webhook_secret","href":"/api-reference/v2/scmappsservice/rotate-scm-app-webhook-secret"},{"title":"Start Cursor Origin installation","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/deployments/{deploymentId}/cursor-installations","href":"/api-reference/v2/scmappsservice/start-cursor-origin-installation"}]},{"group":"Source Code Management (SCM) configurations","pages":[{"title":"Check SCM config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/configs/{configId}/check","href":"/api-reference/v2/scmservice/check-scm-config"},{"title":"List SCM configs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/configs","href":"/api-reference/v2/scmservice/list-scm-configs"},{"title":"Create SCM config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/configs","href":"/api-reference/v2/scmservice/create-scm-config"},{"title":"Delete SCM config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/scm/deployments/{deploymentId}/configs/{configId}","href":"/api-reference/v2/scmservice/delete-scm-config"},{"title":"Update SCM config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/scm/deployments/{deploymentId}/configs/{configId}","href":"/api-reference/v2/scmservice/update-scm-config"},{"title":"Search SCM configs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/configs/search","href":"/api-reference/v2/scmservice/search-scm-configs"},{"title":"Sync SCM config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/configs/{configId}/_sync","href":"/api-reference/v2/scmservice/sync-scm-config"}]},{"group":"Source Code Management (SCM) webhooks","pages":[{"title":"List SCM webhook subscriptions","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/scm/deployments/{deploymentId}/subscriptions/{configId}","href":"/api-reference/v2/scmsubscriptionsservice/list-scm-webhook-subscriptions"},{"title":"Subscribe to SCM webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/scm/deployments/{deploymentId}/subscriptions/{configId}","href":"/api-reference/v2/scmsubscriptionsservice/subscribe-to-scm-webhook"},{"title":"Unsubscribe from SCM webhook","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/scm/deployments/{deploymentId}/subscriptions/{configId}","href":"/api-reference/v2/scmsubscriptionsservice/unsubscribe-from-scm-webhook"},{"title":"Rotate SCM webhook secret","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/scm/deployments/{deploymentId}/subscriptions/{configId}/rotate_secret","href":"/api-reference/v2/scmsubscriptionsservice/rotate-scm-webhook-secret"}]},{"group":"Supply Chain","pages":[{"title":"Generate a project's SBOM","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sca/deployments/{deploymentId}/sbom_async","href":"/api-reference/v2/supplychain2service/generate-a-projects-sbom"},{"title":"List dependencies","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/sca/deployments/{deploymentId}/dependencies","href":"/api-reference/v2/supplychain2service/list-dependencies"},{"title":"List dependencies","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sca/deployments/{deploymentId}/dependencies","href":"/api-reference/v2/supplychain2service/list-dependencies-1"},{"title":"List findings for advisory","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sca/deployments/{deploymentId}/advisories/{advisoryId}/findings","href":"/api-reference/v2/supplychain2service/list-findings-for-advisory"},{"title":"List lockfiles with dependencies in a given repository","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sca/deployments/{deploymentId}/{repositoryId}/lockfiles","href":"/api-reference/v2/supplychain2service/list-lockfiles-with-dependencies-in-a-given-repository"},{"title":"List repositories with dependencies","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/sca/deployments/{deploymentId}/repositories","href":"/api-reference/v2/supplychain2service/list-repositories-with-dependencies"}]},{"group":"Supply Chain - Managed Scans dependency resolution configurations","pages":[{"title":"Get SCA resolution configs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/projects/{projectId}/resolution_configs","href":"/api-reference/v2/smsscaresolutionconfigservice/get-sca-resolution-configs"}]},{"group":"Supply Chain - Managed Scans package manager configurations","pages":[{"title":"List package manager auth configs","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/deployments/{deploymentId}/packagemanagerauthconfigs","href":"/api-reference/v2/smspackagemanagerconfigservice/list-package-manager-auth-configs"},{"title":"Create package manager auth config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/agent/deployments/{deploymentId}/packagemanagerauthconfigs","href":"/api-reference/v2/smspackagemanagerconfigservice/create-package-manager-auth-config"},{"title":"Delete package manager auth config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/agent/deployments/{deploymentId}/packagemanagerauthconfigs/{packageManagerConfigId}","href":"/api-reference/v2/smspackagemanagerconfigservice/delete-package-manager-auth-config"},{"title":"Update package manager auth config","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml patch /api/agent/deployments/{deploymentId}/packagemanagerauthconfigs/{packageManagerConfigId}","href":"/api-reference/v2/smspackagemanagerconfigservice/update-package-manager-auth-config"}]},{"group":"Tasks","pages":[{"title":"Get task result","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/tasks/v2/{taskTokenJwt}","href":"/api-reference/v2/tasksservice/get-task-result"}]},{"group":"Teams","pages":[{"title":"Check RBAC status","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/permissions/v2/deployments/{deploymentId}/status","href":"/api-reference/v2/teamsservice/check-rbac-status"},{"title":"Create a deployment RBAC team","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/permissions/v2/deployments/{deploymentId}/teams","href":"/api-reference/v2/teamsservice/create-a-deployment-rbac-team"},{"title":"Get a deployment RBAC team","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}","href":"/api-reference/v2/teamsservice/get-a-deployment-rbac-team"},{"title":"Delete a deployment RBAC team","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml delete /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}","href":"/api-reference/v2/teamsservice/delete-a-deployment-rbac-team"},{"title":"Update a deployment RBAC team","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml patch /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}","href":"/api-reference/v2/teamsservice/update-a-deployment-rbac-team"},{"title":"List an RBAC team's child teams","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}/teams","href":"/api-reference/v2/teamsservice/list-an-rbac-teams-child-teams"},{"title":"List an RBAC team's repositories","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}/repos","href":"/api-reference/v2/teamsservice/list-an-rbac-teams-repositories"},{"title":"List an RBAC team's users","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml get /api/permissions/v2/deployments/{deploymentId}/teams/{teamId}/members","href":"/api-reference/v2/teamsservice/list-an-rbac-teams-users"},{"title":"List deployment teams","deprecated":null,"version":null,"tag":"Beta","openapi":"/public_v2.openapi.yaml post /api/permissions/v2/deployments/{deploymentId}/teams/list","href":"/api-reference/v2/teamsservice/list-deployment-teams"}]},{"group":"Tokens","pages":[{"title":"Delete tokens","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/tokens/v1/deployments/{deploymentId}/tokens","href":"/api-reference/v2/tokenservice/delete-tokens"}]},{"group":"Versions","pages":[{"title":"Get project version info","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/versions/{deploymentId}/project-info/{product}","href":"/api-reference/v2/versionsservice/get-project-version-info"}]},{"group":"Wiz Credentials","pages":[{"title":"List Wiz credentials","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notifications/deployments/{deploymentId}/wiz","href":"/api-reference/v2/wizcredentialservice/list-wiz-credentials"},{"title":"Create Wiz credential","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/wiz","href":"/api-reference/v2/wizcredentialservice/create-wiz-credential"},{"title":"Get Wiz credential","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/notifications/deployments/{deploymentId}/wiz/{id}","href":"/api-reference/v2/wizcredentialservice/get-wiz-credential"},{"title":"Update Wiz credential","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml put /api/notifications/deployments/{deploymentId}/wiz/{id}","href":"/api-reference/v2/wizcredentialservice/update-wiz-credential"},{"title":"Delete Wiz credential","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml delete /api/notifications/deployments/{deploymentId}/wiz/{id}","href":"/api-reference/v2/wizcredentialservice/delete-wiz-credential"},{"title":"Validate Wiz credential","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml post /api/notifications/deployments/{deploymentId}/wiz/validate","href":"/api-reference/v2/wizcredentialservice/validate-wiz-credential"}]},{"group":"Other","pages":[{"title":"Get identity","deprecated":null,"version":null,"tag":"Experimental","openapi":"/public_v2.openapi.yaml get /api/agent/identity","href":"/api-reference/v2/miscservice/get-identity"}]}]}]}]},{"tab":"Help","icon":"circle-question","menu":[{"item":"Knowledge base","icon":"book","pages":[{"title":"Knowledge base","href":"/kb"}]},{"item":"Learning guides","icon":"graduation-cap","pages":[{"title":"Learning guides","href":"/learn"}]},{"item":"Support","icon":"headset","pages":[{"title":"Support","href":"/support"}]}],"pages":[{"title":"Help","href":"/kb"}]},{"tab":"Explore","icon":"compass","menu":[{"item":"What's Semgrep","icon":"sparkles","pages":[{"title":"What's Semgrep","href":"/introduction"}]},{"item":"For developers","icon":"code","pages":[{"title":"For developers","href":"/for-developers/overview"}]},{"item":"References","icon":"code-simple","pages":[{"title":"References","href":"/category/ci-references"}]},{"item":"Support \u0026 resources","icon":"headset","pages":[{"title":"Support \u0026 resources","href":"/support"}]},{"item":"Registry","icon":"database","href":"https://semgrep.dev/explore"},{"item":"Playground","icon":"codepen","href":"https://semgrep.dev/playground/new"},{"item":"Semgrep Academy","icon":"graduation-cap","href":"https://academy.semgrep.dev/"}],"pages":[{"title":"Explore","href":"/introduction"}]},{"tab":"What's New","icon":"bullhorn","menu":[{"item":"What's New","icon":"sparkles","pages":[{"title":"What's New","href":"/whats-new"}]},{"item":"Release notes","icon":"newspaper","pages":[{"title":"Release notes","href":"/release-notes/2026-10-12"}]}],"pages":[{"title":"What's New","href":"/whats-new"}]}]},"title":"Generic pattern matching - Semgrep","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["07c022d89b"],"chunks":["Frame-DYplxqhs.js","DynamicMarkdown-Cc6AuSHS.js"]}