Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH …/close status=fixed) — validating a finding that is not marked fixed returns verdict=‘not_eligible’. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict=‘validating’ with a replay_run_id — re-read the finding’s status via the findings list. Cross-workspace ids resolve to 404.
POST
/
api
/
v1
/
findings
/
{finding_id}
/
validate
Re-run a finding's attacks to confirm a fix
curl --request POST \ --url https://api.enokilabs.ai/api/v1/findings/{finding_id}/validate
resolved: every attack no longer reproduces (finding FIXED_VERIFIED). still_broken: at least one attack still reproduces, or none could be confirmed (the finding then stays fixed and awaits the next re-test). not_eligible: mark the finding fixed before validating -- it was not in a verifiable state. validating: still running -- re-read the finding's status via the findings list.
Post-validate finding, incl. status and per-attack last_replay_status.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Enoki Docs","description":"Security and safety testing for AI agents.","colors":{"primary":"#0F121A","light":"#F3F6E8","dark":"#0F121A"},"logo":{"light":"https://mintcdn.com/enoki-861e83a5/wytbpU7UfVc9mmSp/logo/light.svg?fit=max\u0026auto=format\u0026n=wytbpU7UfVc9mmSp\u0026q=85\u0026s=f611c233aaff582b2373aff2e0e21a40","dark":"https://mintcdn.com/enoki-861e83a5/wytbpU7UfVc9mmSp/logo/dark.svg?fit=max\u0026auto=format\u0026n=wytbpU7UfVc9mmSp\u0026q=85\u0026s=58c0a01b9ecf0447c9b3f050d5f828e0","href":"https://enokilabs.ai"},"favicon":"https://mintcdn.com/enoki-861e83a5/6T4h4W4crsrcNUEx/favicon.svg?fit=max\u0026auto=format\u0026n=6T4h4W4crsrcNUEx\u0026q=85\u0026s=c07da50da74ecba8f6c29de226c5691a","background":{"color":{"light":"#F3F6E8","dark":"#0F121A"}},"footer":{"socials":{"website":"https://enokilabs.ai"}},"fonts":{"family":"Geist"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"enoki-861e83a5","hasAudioNarration":false,"actualSubdomain":"enoki-861e83a5","customDomains":["docs.enokilabs.ai"],"gitSource":{"type":"github","owner":"ethicgate","repo":"ethicgate","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"a4b91925-c246-48d6-985e-f709097ec9ea","liveDeploymentHistoryId":"6ae072b9898aa086d1dccb6e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae072b9898aa086d1dccb6e"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae072b9898aa086d1dccb6e","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"REST API","count":16},{"language":"default","tag":"assessment","count":5},{"language":"default","tag":"Integrations","count":4},{"language":"default","tag":"target-profile","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"findings","count":3},{"language":"default","tag":"Connect","count":2},{"language":"default","tag":"MCP","count":2},{"language":"default","tag":"integration","count":2},{"language":"default","tag":"taxonomy","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"code:not(pre code){background-color:rgba(15,18,26,.07)!important;color:#0f121a!important;border:1px solid rgba(15,18,26,.12);border-radius:.35rem;padding:.05rem .35rem;white-space:nowrap}.dark code:not(pre code){background-color:rgba(255,255,255,.1)!important;color:#f3f6e8!important;border-color:rgba(255,255,255,.14)}.callout{background-color:#fff!important;border-color:rgba(15,18,26,.1)!important}.callout,.callout *{color:#0f121a!important}.dark .callout{background-color:rgba(255,255,255,.05)!important;border-color:rgba(255,255,255,.12)!important}.dark .callout,.dark .callout *{color:#f3f6e8!important}"}],"page":{"pagePath":"api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix","slug":"/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix","pageMetadata":{"title":"Re-run a finding's attacks to confirm a fix","description":"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict='not_eligible'. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict='validating' with a replay_run_id -- re-read the finding's status via the findings list. Cross-workspace ids resolve to 404.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/findings/{finding_id}/validate","href":"/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH …/close status=fixed) — validating a finding that is not marked fixed returns verdict=‘not_eligible’. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict=‘validating’ with a replay_run_id — re-read the finding’s status via the findings list. Cross-workspace ids resolve to 404.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Re-run a finding's attacks to confirm a fix","description":"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict='not_eligible'. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict='validating' with a replay_run_id -- re-read the finding's status via the findings list. Cross-workspace ids resolve to 404.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/findings/{finding_id}/validate","href":"/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["findings"],"summary":"Re-run a finding's attacks to confirm a fix","description":"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict='not_eligible'. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict='validating' with a replay_run_id -- re-read the finding's status via the findings list. Cross-workspace ids resolve to 404.","operationId":"api_validate_finding_api_v1_findings__finding_id__validate_post","parameters":["8c830119-f352-414c-9d63-2e9ecf090c1e","0e7e2604-bd0d-4d33-b243-1dc662fda733"],"responses":{"200":"c1c0a75c-32cc-46d5-aad0-b42328557812","403":"7fad3d70-d1c3-4665-85fe-41454d410835","404":"d7756331-7426-4d17-8b28-8f96894c7635","409":"ae996500-bd47-4ba1-bb8f-737eb51e97c6","422":"d9166f8c-ea50-4ea5-bae8-6a7c88d53fd9","429":"dae0c7d4-3f31-495c-9a85-7ca926f5ec40"},"method":"post","type":"path","servers":["ecc94452-5a0c-4247-b9b2-b494520b154a"],"security":[],"path":"/api/v1/findings/{finding_id}/validate","baseUrlOptions":["https://api.enokilabs.ai"],"title":"Re-run a finding's attacks to confirm a fix","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"8c830119-f352-414c-9d63-2e9ecf090c1e":{"name":"finding_id","in":"path","required":true,"schema":{"type":"string","title":"Finding Id","isRequired":true,"uniqueKey":"","typeLabel":"string"}},"0e7e2604-bd0d-4d33-b243-1dc662fda733":{"name":"Authorization","in":"header","required":false,"schema":{"oneOf":[{"type":"string","title":"Authorization","description":"Bearer token with API key","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Authorization","description":"Bearer token with API key","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"},"description":"Bearer token with API key"}},"responses":{"c1c0a75c-32cc-46d5-aad0-b42328557812":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"finding_id":{"type":"string","title":"Finding Id","description":"The finding that was validated.","isRequired":true,"uniqueKey":"finding_id","typeLabel":"string"},"replay_run_id":{"type":"string","title":"Replay Run Id","description":"The replay run that re-ran the finding's attacks. Empty when the finding was not eligible and no run was spent.","isRequired":true,"uniqueKey":"replay_run_id","typeLabel":"string"},"verdict":{"type":"string","enum":["resolved","still_broken","not_eligible","validating"],"title":"Verdict","description":"resolved: every attack no longer reproduces (finding FIXED_VERIFIED). still_broken: at least one attack still reproduces, or none could be confirmed (the finding then stays fixed and awaits the next re-test). not_eligible: mark the finding fixed before validating -- it was not in a verifiable state. validating: still running -- re-read the finding's status via the findings list.","isRequired":true,"uniqueKey":"verdict","typeLabel":"enum\u003cstring>"},"finding":{"properties":{"finding_id":{"type":"string","title":"Finding Id","isRequired":true,"uniqueKey":"finding.finding_id","typeLabel":"string"},"lens":{"type":"string","enum":["security","safety","quality","policy"],"title":"Lens","description":"The kind of testing a finding came from.","isRequired":true,"uniqueKey":"finding.lens","typeLabel":"enum\u003cstring>"},"category":{"type":"string","title":"Category","isRequired":true,"uniqueKey":"finding.category","typeLabel":"string"},"severity":{"type":"string","enum":["critical","high","medium","low"],"title":"FindingSeverity","description":"Business-impact severity levels, ordered from most to least severe.","isRequired":true,"uniqueKey":"finding.severity","typeLabel":"enum\u003cstring>"},"description":{"type":"string","title":"Description","isRequired":true,"uniqueKey":"finding.description","typeLabel":"string"},"expected_behavior":{"type":"string","title":"Expected Behavior","isRequired":true,"uniqueKey":"finding.expected_behavior","typeLabel":"string"},"status":{"type":"string","title":"Status","isRequired":true,"uniqueKey":"finding.status","typeLabel":"string"},"created_at":{"type":"string","title":"Created At","isRequired":true,"uniqueKey":"finding.created_at","typeLabel":"string"},"attacks":{"items":{"properties":{"attack_id":{"type":"string","title":"Attack Id","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].attack_id","typeLabel":"string"},"score":{"type":"integer","title":"Score","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].score","typeLabel":"integer"},"source":{"properties":{"source_type":{"type":"string","enum":["manual","adaptive_attacker","compliance","test_suite","drill_down","policy"],"title":"FindingSourceType","description":"What produced the test behind a finding.\n\nAn assessment, a reporting top-up, a policy assessment, a manual entry, or a\nfollow-up on an existing finding.","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.source_type","typeLabel":"enum\u003cstring>"},"assessment_id":{"type":"string","title":"Assessment Id","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.assessment_id","typeLabel":"string"},"attack_index":{"type":"integer","title":"Attack Index","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.attack_index","typeLabel":"integer"},"date":{"oneOf":[{"type":"string","title":"Date","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.date.oneOf.0","typeLabel":"string"},{"type":"null","title":"Date","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source.date","typeLabel":"string | null"}},"type":"object","required":["source_type","assessment_id","attack_index","date"],"title":"ApiAttackSource","description":"Provenance block of one attack in the external API response.","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].source","typeLabel":"ApiAttackSource · object"},"replay_script":{"items":{"properties":{"step":{"type":"string","enum":["chat","http","assert"],"title":"Step","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].step","typeLabel":"enum\u003cstring>"},"message":{"oneOf":[{"type":"string","title":"Message","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].message.oneOf.0","typeLabel":"string"},{"type":"null","title":"Message","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].message.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].message","typeLabel":"string | null"},"response":{"oneOf":[{"type":"string","title":"Response","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response.oneOf.0","typeLabel":"string"},{"type":"null","title":"Response","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response","typeLabel":"string | null"},"session_id":{"oneOf":[{"type":"string","title":"Session Id","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].session_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Session Id","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].session_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].session_id","typeLabel":"string | null"},"method":{"oneOf":[{"type":"string","title":"Method","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].method.oneOf.0","typeLabel":"string"},{"type":"null","title":"Method","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].method.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].method","typeLabel":"string | null"},"url":{"oneOf":[{"type":"string","title":"Url","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].url","typeLabel":"string | null"},"headers":{"oneOf":[{"type":"object","title":"Headers","additionalProperties":{"type":"string","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].headers.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].headers.oneOf.0","typeLabel":"Headers · object"},{"type":"null","title":"Headers","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].headers.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].headers","typeLabel":"Headers · object | null"},"body":{"oneOf":[{"type":"string","title":"Body","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].body.oneOf.0","typeLabel":"string"},{"type":"null","title":"Body","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].body.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].body","typeLabel":"string | null"},"response_status":{"oneOf":[{"type":"integer","title":"Response Status","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_status.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Response Status","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_status","typeLabel":"integer | null"},"response_body":{"oneOf":[{"type":"string","title":"Response Body","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_body.oneOf.0","typeLabel":"string"},{"type":"null","title":"Response Body","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_body.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].response_body","typeLabel":"string | null"},"target":{"oneOf":[{"type":"string","title":"Target","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].target.oneOf.0","typeLabel":"string"},{"type":"null","title":"Target","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].target.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].target","typeLabel":"string | null"},"assertion":{"oneOf":[{"type":"string","title":"Assertion","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].assertion.oneOf.0","typeLabel":"string"},{"type":"null","title":"Assertion","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].assertion.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].assertion","typeLabel":"string | null"},"expected_behavior":{"oneOf":[{"type":"string","title":"Expected Behavior","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].expected_behavior.oneOf.0","typeLabel":"string"},{"type":"null","title":"Expected Behavior","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].expected_behavior.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].expected_behavior","typeLabel":"string | null"},"capture_as":{"oneOf":[{"type":"string","title":"Capture As","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].capture_as.oneOf.0","typeLabel":"string"},{"type":"null","title":"Capture As","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].capture_as.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX].capture_as","typeLabel":"string | null"}},"type":"object","required":["step"],"title":"ReplayStepResponse","description":"One step of a replay script; `step` says which kind.","uniqueKey":"finding.attacks.items.[INDEX].replay_script.items.[INDEX]","typeLabel":"ReplayStepResponse · object"},"type":"array","title":"Replay Script","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].replay_script","typeLabel":"ReplayStepResponse · object[]"},"last_replay_status":{"type":"string","enum":["pending","succeeded","failed","inconclusive","stale"],"title":"Last Replay Status","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].last_replay_status","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","title":"Created At","isRequired":true,"uniqueKey":"finding.attacks.items.[INDEX].created_at","typeLabel":"string"},"last_replayed_at":{"oneOf":[{"type":"string","title":"Last Replayed At","uniqueKey":"finding.attacks.items.[INDEX].last_replayed_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Last Replayed At","uniqueKey":"finding.attacks.items.[INDEX].last_replayed_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"finding.attacks.items.[INDEX].last_replayed_at","typeLabel":"string | null"}},"type":"object","required":["attack_id","score","source","replay_script","last_replay_status","created_at"],"title":"ApiAttackItem","description":"One attack inside a finding in the external API response.","uniqueKey":"finding.attacks.items.[INDEX]","typeLabel":"ApiAttackItem · object"},"type":"array","title":"Attacks","isRequired":true,"uniqueKey":"finding.attacks","typeLabel":"ApiAttackItem · object[]"}},"type":"object","required":["finding_id","lens","category","severity","description","expected_behavior","status","created_at","attacks"],"title":"ApiFindingItem","description":"Post-validate finding, incl. status and per-attack last_replay_status.","isRequired":true,"uniqueKey":"finding","typeLabel":"ApiFindingItem · object"}},"type":"object","required":["finding_id","replay_run_id","verdict","finding"],"title":"ApiValidateResponse","description":"Outcome of POST /api/v1/findings/{finding_id}/validate.\n\nThe embedded finding carries the full state; `verdict` sums it up as the one\nsignal a remediation loop acts on.","uniqueKey":"","typeLabel":"ApiValidateResponse · object"},"examples":{"Example":{"title":"Example","value":{"finding_id":"\u003cstring>","replay_run_id":"\u003cstring>","verdict":"resolved","finding":{"finding_id":"\u003cstring>","lens":"security","category":"\u003cstring>","severity":"critical","description":"\u003cstring>","expected_behavior":"\u003cstring>","status":"\u003cstring>","created_at":"\u003cstring>","attacks":[{"attack_id":"\u003cstring>","score":123,"source":{"source_type":"manual","assessment_id":"\u003cstring>","attack_index":123,"date":"\u003cstring>"},"replay_script":[{"step":"chat","message":"\u003cstring>","response":"\u003cstring>","session_id":"\u003cstring>","method":"\u003cstring>","url":"\u003cstring>","headers":{},"body":"\u003cstring>","response_status":123,"response_body":"\u003cstring>","target":"\u003cstring>","assertion":"\u003cstring>","expected_behavior":"\u003cstring>","capture_as":"\u003cstring>"}],"last_replay_status":"pending","created_at":"\u003cstring>","last_replayed_at":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"7fad3d70-d1c3-4665-85fe-41454d410835":{"description":"The workspace's plan withholds this finding's proof, so it cannot be re-run","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"d7756331-7426-4d17-8b28-8f96894c7635":{"description":"Finding not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"ae996500-bd47-4ba1-bb8f-737eb51e97c6":{"description":"A validation is already running for this finding","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"d9166f8c-ea50-4ea5-bae8-6a7c88d53fd9":{"description":"The finding's target cannot be wired for replay","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"dae0c7d4-3f31-495c-9a85-7ca926f5ec40":{"description":"Concurrency or daily replay cap exceeded","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{},"servers":{"ecc94452-5a0c-4247-b9b2-b494520b154a":{"url":"https://api.enokilabs.ai","description":"Enoki API"}}},"originalFileLocation":"openapi.json"},"subdomain":"enoki-861e83a5","siteName":"Enoki Docs","title":"Re-run a finding's attacks to confirm a fix - Enoki Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-27T09:45:34.201Z","originalFileLocation":"api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix.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=\"description\" content=\"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict=\u0026#x27;not_eligible\u0026#x27;. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict=\u0026#x27;validating\u0026#x27; with a replay_run_id -- re-read the finding\u0026#x27;s status via the findings list. Cross-workspace ids resolve to 404.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Enoki Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Re-run a finding\u0026#x27;s attacks to confirm a fix - Enoki Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict=\u0026#x27;not_eligible\u0026#x27;. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict=\u0026#x27;validating\u0026#x27; with a replay_run_id -- re-read the finding\u0026#x27;s status via the findings list. Cross-workspace ids resolve to 404.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Enoki Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://enoki-861e83a5.mintlify.app/_mintlify/api/og/v2?division=findings\u0026amp;title=Re-run+a+finding%27s+attacks+to+confirm+a+fix\u0026amp;description=Re-runs+every+attack+under+the+finding+against+the+live+target+and+drives+its+verification+status.+Call+AFTER+marking+the+finding+fixed+%28PATCH+...%2Fclose+status%3D\u0026amp;theme=7dab79a77306f37c8b6ebe93\u0026amp;signature=74ed7dabe47664687bf11f2a94e54890e1e9ed89d400ca18303e4de6ae3da6ed\">\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=\"Re-run a finding\u0026#x27;s attacks to confirm a fix - Enoki Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict=\u0026#x27;not_eligible\u0026#x27;. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict=\u0026#x27;validating\u0026#x27; with a replay_run_id -- re-read the finding\u0026#x27;s status via the findings list. Cross-workspace ids resolve to 404.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://enoki-861e83a5.mintlify.app/_mintlify/api/og/v2?division=findings\u0026amp;title=Re-run+a+finding%27s+attacks+to+confirm+a+fix\u0026amp;description=Re-runs+every+attack+under+the+finding+against+the+live+target+and+drives+its+verification+status.+Call+AFTER+marking+the+finding+fixed+%28PATCH+...%2Fclose+status%3D\u0026amp;theme=7dab79a77306f37c8b6ebe93\u0026amp;signature=74ed7dabe47664687bf11f2a94e54890e1e9ed89d400ca18303e4de6ae3da6ed\">\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/enoki-861e83a5/kOa2A3QnLxOcGLaX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Enoki Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F121A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.enokilabs.ai/#organization\",\"name\":\"Enoki Docs\",\"url\":\"https://docs.enokilabs.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/enoki-861e83a5/wytbpU7UfVc9mmSp/logo/light.svg?fit=max\u0026auto=format\u0026n=wytbpU7UfVc9mmSp\u0026q=85\u0026s=f611c233aaff582b2373aff2e0e21a40\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.enokilabs.ai#website\",\"name\":\"Enoki Docs\",\"url\":\"https://docs.enokilabs.ai\",\"publisher\":{\"@id\":\"https://docs.enokilabs.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix#webpage\",\"url\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix\",\"name\":\"Re-run a finding's attacks to confirm a fix\",\"description\":\"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict='not_eligible'. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict='validating' with a replay_run_id -- re-read the finding's status via the findings list. Cross-workspace ids resolve to 404.\",\"dateModified\":\"2026-10-27T09:45:34.201Z\",\"isPartOf\":{\"@id\":\"https://docs.enokilabs.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"REST API\",\"item\":\"https://docs.enokilabs.ai/api-reference\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"findings\",\"item\":\"https://docs.enokilabs.ai/api-reference/findings/retrieve-findings-for-a-completed-run\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Re-run a finding's attacks to confirm a fix\",\"item\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix#apireference\",\"headline\":\"Re-run a finding's attacks to confirm a fix\",\"name\":\"Re-run a finding's attacks to confirm a fix\",\"description\":\"Re-runs every attack under the finding against the live target and drives its verification status. Call AFTER marking the finding fixed (PATCH .../close status=fixed) -- validating a finding that is not marked fixed returns verdict='not_eligible'. Returns the terminal verdict when the re-run finishes quickly; otherwise returns verdict='validating' with a replay_run_id -- re-read the finding's status via the findings list. Cross-workspace ids resolve to 404.\",\"url\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix\",\"mainEntityOfPage\":{\"@id\":\"https://docs.enokilabs.ai/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix#webpage\"},\"dateModified\":\"2026-10-27T09:45:34.201Z\",\"publisher\":{\"@id\":\"https://docs.enokilabs.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.enokilabs.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Enoki Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Enoki Docs","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Enoki documentation","href":"/index"},{"title":"What we test for","href":"/what-we-test"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Connect","pages":[{"title":"Connect your agent","href":"/connect-your-agent"},{"title":"API keys \u0026 scopes","href":"/api-keys"}]},{"group":"Integrations","pages":[{"title":"Webhooks","href":"/integrations/webhooks"},{"title":"Linear","href":"/integrations/linear"},{"title":"Jira","href":"/integrations/jira"},{"title":"GitHub","href":"/integrations/github"}]},{"group":"MCP","pages":[{"title":"MCP tool reference","href":"/mcp-tools"},{"title":"Troubleshooting","href":"/troubleshooting"}]},{"group":"REST API","pages":[{"title":"REST API reference","href":"/api-reference"},{"group":"assessment","pages":[{"title":"Trigger an assessment run","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/run","href":"/api-reference/assessment/trigger-an-assessment-run"},{"title":"Poll run status","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/run/{run_id}","href":"/api-reference/assessment/poll-run-status"},{"title":"Retrieve what a completed run covered, per category","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/run/{run_id}/coverage","href":"/api-reference/assessment/retrieve-what-a-completed-run-covered-per-category"},{"title":"Cancel a running assessment","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/run/{run_id}/cancel","href":"/api-reference/assessment/cancel-a-running-assessment"},{"title":"List runs for a model","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/model/{model_id}/run","href":"/api-reference/assessment/list-runs-for-a-model"}]},{"group":"integration","pages":[{"title":"List inventory models","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/model","href":"/api-reference/integration/list-inventory-models"},{"title":"Register an agent target (atomic prove-then-persist)","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/model","href":"/api-reference/integration/register-an-agent-target-atomic-prove-then-persist"}]},{"group":"findings","pages":[{"title":"Retrieve findings for a completed run","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/run/{run_id}/findings","href":"/api-reference/findings/retrieve-findings-for-a-completed-run"},{"title":"Close a finding (mark fixed or dismiss as not an issue)","description":"Closes a finding from CI/CD or an agent: mark it 'fixed' or dismiss it as not an issue ('dismissed'). Every close requires an explanation, and a dismissal also requires a category (reason_code). Workspace-scoped: a finding from another workspace resolves to 404.","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/findings/{finding_id}/close","href":"/api-reference/findings/close-a-finding-mark-fixed-or-dismiss-as-not-an-issue"},{"title":"Re-run a finding's attacks to confirm a fix","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/findings/{finding_id}/validate","href":"/api-reference/findings/re-run-a-findings-attacks-to-confirm-a-fix"}]},{"group":"taxonomy","pages":[{"title":"List taxonomy categories","description":"List the security categories an assessment run can be focused on, with the display name and description of each. The 'key' of each entry is exactly what the 'categories' field of POST /api/v1/run accepts; a key this endpoint did not return is rejected there with a 400. Use the descriptions to pick the categories relevant to a change instead of running the full taxonomy on every deploy.\n\nResponses are static platform metadata, so a polling caller can cache one for an hour. Part of the platform plan: a trial workspace is refused with 403.","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/category","href":"/api-reference/taxonomy/list-taxonomy-categories"}]},{"group":"target-profile","pages":[{"title":"Read a target's profile","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/model/{model_id}/profile","href":"/api-reference/target-profile/read-a-targets-profile"},{"title":"Change a target's profile","deprecated":null,"version":null,"openapi":"/openapi.json patch /api/v1/model/{model_id}/profile","href":"/api-reference/target-profile/change-a-targets-profile"},{"title":"Confirm values of a target's profile","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/model/{model_id}/profile/confirm","href":"/api-reference/target-profile/confirm-values-of-a-targets-profile"},{"title":"Retract a dismissal from a target's profile","deprecated":null,"version":null,"openapi":"/openapi.json delete /api/v1/model/{model_id}/profile/non-issues/{finding_id}","href":"/api-reference/target-profile/retract-a-dismissal-from-a-targets-profile"}]}]}]},"title":"Re-run a finding's attacks to confirm a fix - Enoki Docs","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}