Ask for one prompt change that would make every failed test in a run pass.
Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run’s failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit.
The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly.
The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.
API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.
Optional URL to notify when the suggestion finishes. We POST the completed job there (event test.suggestion.completed, with the same fields as the GET response), so you can stop polling. One delivery attempt, 8 second timeout.
Response
The suggestion, when it was ready in time. The suggestion fields are also present at the top level of data.
A proposed prompt change covering every failed attempt in a test run.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"RevRing AI Documentation","colors":{"primary":"#005cdd","light":"#5b9efa","dark":"#005cdd"},"logo":{"light":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/light.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=e28235c04eceefff5b3adb1cb7c33353","dark":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/dark.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=0ceef80328d53157b1b3a45914fb58a1"},"favicon":"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/favicon.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=3161414ca314cb968d3be90385506fbb","navbar":{"links":[{"href":"mailto:contact@revring.ai","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.revring.ai"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/revring"}},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"revringinc","hasAudioNarration":false,"actualSubdomain":"revringinc","customDomains":["docs.revring.ai"],"gitSource":{"type":"github","owner":"revringai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6accccd3f03b0dc1b4aaf120","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":148},{"language":"default","tag":"Guides","count":26},{"language":"default","tag":"Platform","count":22},{"language":"default","tag":"Campaigns","count":11},{"language":"default","tag":"Agents","count":10},{"language":"default","tag":"Calls","count":10},{"language":"default","tag":"Voices","count":10},{"language":"default","tag":"Alerts","count":8},{"language":"default","tag":"SIP Trunks","count":8},{"language":"default","tag":"Test Runs","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/test-suites/suggest-run-fix","slug":"/api-reference/test-suites/suggest-run-fix","pageMetadata":{"title":"Suggest a Fix for a Run","openapi":"POST /test-suites/{id}/runs/{runId}/suggest-fix","description":"Ask for one prompt change that would make every failed test in a run pass.\n\nRequesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run's failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit.\n\nThe wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, `wait=0` returns `status: running` immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly.\n\nThe run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in `result.skippedAttemptIds`.","href":"/api-reference/test-suites/suggest-run-fix"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Ask for one prompt change that would make every failed test in a run pass.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run’s failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, \", _jsx(_components.code, {\n children: \"wait=0\"\n }), \" returns \", _jsx(_components.code, {\n children: \"status: running\"\n }), \" immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in \", _jsx(_components.code, {\n children: \"result.skippedAttemptIds\"\n }), \".\"]\n })]\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":"Suggest a Fix for a Run","openapi":"POST /test-suites/{id}/runs/{runId}/suggest-fix","description":"Ask for one prompt change that would make every failed test in a run pass.\n\nRequesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run's failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit.\n\nThe wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, `wait=0` returns `status: running` immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly.\n\nThe run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in `result.skippedAttemptIds`.","href":"/api-reference/test-suites/suggest-run-fix"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Suggest a Fix for a Run","description":"Ask for one prompt change that would make every failed test in a run pass.\n\nRequesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run's failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit.\n\nThe wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, `wait=0` returns `status: running` immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly.\n\nThe run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in `result.skippedAttemptIds`.","operationId":"suggestRunFix","tags":["Test Suites"],"parameters":["237c4e17-f860-447e-919e-f8eb85a13733"],"requestBody":"b655e8e7-1be4-49d7-a309-ba8aefdc2a04","responses":{"200":"fb73d34c-b6ef-4d4e-8d3f-bbfb69fa9ec8","202":"ca9c97ef-7119-49e3-96d8-912ff429e92f","400":"fb0568bb-74de-4fe4-beca-0d5ca30c8d22","401":"72070eba-7445-420d-8d03-1b1b49ec2333","404":"198465d7-5adc-417c-aa33-2f0c980908f9"},"method":"post","type":"path","servers":["9d0997fe-7397-47d9-a3af-b8c62abb4b63"],"security":["6fa6cbe6-9d37-480e-b7e5-09d33fd7b619"],"path":"/test-suites/{id}/runs/{runId}/suggest-fix","baseUrlOptions":["https://api.revring.ai/v1"],"title":"Suggest a Fix for a Run","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"237c4e17-f860-447e-919e-f8eb85a13733":{"name":"wait","in":"query","required":false,"description":"Set to `0` to return immediately instead of waiting for the suggestion.","schema":{"type":"string","enum":["0"],"isRequired":false,"description":"Set to `0` to return immediately instead of waiting for the suggestion.","uniqueKey":"","typeLabel":"enum\u003cstring>"}},"85f40532-e3b8-4f2d-b8bc-736d36503aa9":{"name":"id","in":"path","required":true,"description":"Test suite ID","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Test suite ID","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"432de316-e8aa-446c-9f8e-077b0cfe8589":{"name":"runId","in":"path","required":true,"description":"Test run ID","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Test run ID","uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"callbackUrl":{"type":"string","description":"Optional URL to notify when the suggestion finishes. We POST the completed job there (event `test.suggestion.completed`, with the same fields as the GET response), so you can stop polling. One delivery attempt, 8 second timeout.","uniqueKey":"callbackUrl","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"callbackUrl":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"fb73d34c-b6ef-4d4e-8d3f-bbfb69fa9ec8":{"description":"The suggestion, when it was ready in time. The suggestion fields are also present at the top level of `data`.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"A proposed prompt change covering every failed attempt in a test run.","properties":{"status":{"type":"string","enum":["idle","running","ready","failed"],"description":"`idle` = none requested for this run. `running` = being prepared. `ready` = `result` holds the suggestion. `failed` = could not be prepared, request another.","uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"result":{"oneOf":[{"type":"object","description":"The suggestion. Present when `status` is `ready`, otherwise null.","properties":{"analysis":{"type":"string","description":"Overall diagnosis across the run's failures, leading with a shared root cause when there is one","uniqueKey":"data.result.oneOf.0.analysis","typeLabel":"string"},"changesSummary":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.changesSummary.items.[INDEX]","typeLabel":"string"},"description":"Plain-language summary of what was changed","uniqueKey":"data.result.oneOf.0.changesSummary","typeLabel":"string[]"},"suggestedPrompt":{"type":"string","description":"The complete corrected prompt, ready to save to the agent","uniqueKey":"data.result.oneOf.0.suggestedPrompt","typeLabel":"string"},"currentPrompt":{"type":"string","description":"The agent prompt the suggestion was written against, for comparison","uniqueKey":"data.result.oneOf.0.currentPrompt","typeLabel":"string"},"rubricIssues":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.rubricIssues.items.[INDEX]","typeLabel":"string"},"description":"Problems found in the test's pass criteria, if any","uniqueKey":"data.result.oneOf.0.rubricIssues","typeLabel":"string[]"},"perAttempt":{"type":"array","description":"One entry per failed attempt analyzed, in the order the attempts ran","items":{"type":"object","properties":{"attemptId":{"type":"string","description":"The failed attempt","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].attemptId","typeLabel":"string"},"testCaseName":{"type":"string","description":"Name of the test that failed","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].testCaseName","typeLabel":"string"},"analysis":{"type":"string","description":"Why this test failed and which part of the edit addresses it","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].analysis","typeLabel":"string"}},"uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.result.oneOf.0.perAttempt","typeLabel":"object[]"},"skippedAttemptIds":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.skippedAttemptIds.items.[INDEX]","typeLabel":"string"},"description":"Present only on very large runs: the oldest failed attempts beyond the most recent 12, which were not analyzed","uniqueKey":"data.result.oneOf.0.skippedAttemptIds","typeLabel":"string[]"},"edits":{"type":"array","items":{"type":"object","properties":{"find":{"type":"string","uniqueKey":"data.result.oneOf.0.edits.items.[INDEX].find","typeLabel":"string"},"replace":{"type":"string","uniqueKey":"data.result.oneOf.0.edits.items.[INDEX].replace","typeLabel":"string"}},"uniqueKey":"data.result.oneOf.0.edits.items.[INDEX]","typeLabel":"object"},"description":"The targeted edits that turn `currentPrompt` into `suggestedPrompt`, for rendering a diff. Usually present; absent when the suggestion was produced as a full rewrite, so always treat `suggestedPrompt` as the source of truth","uniqueKey":"data.result.oneOf.0.edits","typeLabel":"object[]"}},"uniqueKey":"data.result.oneOf.0","typeLabel":"object"},{"type":"null","description":"The suggestion. Present when `status` is `ready`, otherwise null.","properties":{"analysis":{"type":"string","description":"Overall diagnosis across the run's failures, leading with a shared root cause when there is one"},"changesSummary":{"type":"array","items":{"type":"string"},"description":"Plain-language summary of what was changed"},"suggestedPrompt":{"type":"string","description":"The complete corrected prompt, ready to save to the agent"},"currentPrompt":{"type":"string","description":"The agent prompt the suggestion was written against, for comparison"},"rubricIssues":{"type":"array","items":{"type":"string"},"description":"Problems found in the test's pass criteria, if any"},"perAttempt":{"type":"array","description":"One entry per failed attempt analyzed, in the order the attempts ran","items":{"type":"object","properties":{"attemptId":{"type":"string","description":"The failed attempt"},"testCaseName":{"type":"string","description":"Name of the test that failed"},"analysis":{"type":"string","description":"Why this test failed and which part of the edit addresses it"}}}},"skippedAttemptIds":{"type":"array","items":{"type":"string"},"description":"Present only on very large runs: the oldest failed attempts beyond the most recent 12, which were not analyzed"},"edits":{"type":"array","items":{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}}},"description":"The targeted edits that turn `currentPrompt` into `suggestedPrompt`, for rendering a diff. Usually present; absent when the suggestion was produced as a full rewrite, so always treat `suggestedPrompt` as the source of truth"}},"uniqueKey":"data.result.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.result","typeLabel":"object | null"},"stale":{"type":"boolean","description":"Present when `status` is `ready`. `true` means the agent's prompt has changed since this suggestion was written, so saving `suggestedPrompt` would overwrite those newer edits; request a fresh suggestion instead.","uniqueKey":"data.stale","typeLabel":"boolean"},"stage":{"type":"string","enum":["analyzing","writing"],"description":"Present while `status` is `running`: `analyzing` while the failures are being read, `writing` once the corrected output is being produced.","uniqueKey":"data.stage","typeLabel":"enum\u003cstring>"},"progress":{"type":"object","description":"Present while `status` is `running`, once writing begins.","properties":{"outputChars":{"type":"integer","description":"Characters of output produced so far","uniqueKey":"data.progress.outputChars","typeLabel":"integer"},"promptChars":{"type":"integer","description":"Size of the prompt under edit, for scale","uniqueKey":"data.progress.promptChars","typeLabel":"integer"}},"uniqueKey":"data.progress","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"status":"idle","result":{"analysis":"\u003cstring>","changesSummary":["\u003cstring>"],"suggestedPrompt":"\u003cstring>","currentPrompt":"\u003cstring>","rubricIssues":["\u003cstring>"],"perAttempt":[{"attemptId":"\u003cstring>","testCaseName":"\u003cstring>","analysis":"\u003cstring>"}],"skippedAttemptIds":["\u003cstring>"],"edits":[{"find":"\u003cstring>","replace":"\u003cstring>"}]},"stale":true,"stage":"analyzing","progress":{"outputChars":123,"promptChars":123}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ca9c97ef-7119-49e3-96d8-912ff429e92f":{"description":"The suggestion is being prepared. Poll Get Suggested Fix for a Run until `status` is `ready`.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"A proposed prompt change covering every failed attempt in a test run.","properties":{"status":{"type":"string","enum":["idle","running","ready","failed"],"description":"`idle` = none requested for this run. `running` = being prepared. `ready` = `result` holds the suggestion. `failed` = could not be prepared, request another.","uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"result":{"oneOf":[{"type":"object","description":"The suggestion. Present when `status` is `ready`, otherwise null.","properties":{"analysis":{"type":"string","description":"Overall diagnosis across the run's failures, leading with a shared root cause when there is one","uniqueKey":"data.result.oneOf.0.analysis","typeLabel":"string"},"changesSummary":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.changesSummary.items.[INDEX]","typeLabel":"string"},"description":"Plain-language summary of what was changed","uniqueKey":"data.result.oneOf.0.changesSummary","typeLabel":"string[]"},"suggestedPrompt":{"type":"string","description":"The complete corrected prompt, ready to save to the agent","uniqueKey":"data.result.oneOf.0.suggestedPrompt","typeLabel":"string"},"currentPrompt":{"type":"string","description":"The agent prompt the suggestion was written against, for comparison","uniqueKey":"data.result.oneOf.0.currentPrompt","typeLabel":"string"},"rubricIssues":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.rubricIssues.items.[INDEX]","typeLabel":"string"},"description":"Problems found in the test's pass criteria, if any","uniqueKey":"data.result.oneOf.0.rubricIssues","typeLabel":"string[]"},"perAttempt":{"type":"array","description":"One entry per failed attempt analyzed, in the order the attempts ran","items":{"type":"object","properties":{"attemptId":{"type":"string","description":"The failed attempt","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].attemptId","typeLabel":"string"},"testCaseName":{"type":"string","description":"Name of the test that failed","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].testCaseName","typeLabel":"string"},"analysis":{"type":"string","description":"Why this test failed and which part of the edit addresses it","uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX].analysis","typeLabel":"string"}},"uniqueKey":"data.result.oneOf.0.perAttempt.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.result.oneOf.0.perAttempt","typeLabel":"object[]"},"skippedAttemptIds":{"type":"array","items":{"type":"string","uniqueKey":"data.result.oneOf.0.skippedAttemptIds.items.[INDEX]","typeLabel":"string"},"description":"Present only on very large runs: the oldest failed attempts beyond the most recent 12, which were not analyzed","uniqueKey":"data.result.oneOf.0.skippedAttemptIds","typeLabel":"string[]"},"edits":{"type":"array","items":{"type":"object","properties":{"find":{"type":"string","uniqueKey":"data.result.oneOf.0.edits.items.[INDEX].find","typeLabel":"string"},"replace":{"type":"string","uniqueKey":"data.result.oneOf.0.edits.items.[INDEX].replace","typeLabel":"string"}},"uniqueKey":"data.result.oneOf.0.edits.items.[INDEX]","typeLabel":"object"},"description":"The targeted edits that turn `currentPrompt` into `suggestedPrompt`, for rendering a diff. Usually present; absent when the suggestion was produced as a full rewrite, so always treat `suggestedPrompt` as the source of truth","uniqueKey":"data.result.oneOf.0.edits","typeLabel":"object[]"}},"uniqueKey":"data.result.oneOf.0","typeLabel":"object"},{"type":"null","description":"The suggestion. Present when `status` is `ready`, otherwise null.","properties":{"analysis":{"type":"string","description":"Overall diagnosis across the run's failures, leading with a shared root cause when there is one"},"changesSummary":{"type":"array","items":{"type":"string"},"description":"Plain-language summary of what was changed"},"suggestedPrompt":{"type":"string","description":"The complete corrected prompt, ready to save to the agent"},"currentPrompt":{"type":"string","description":"The agent prompt the suggestion was written against, for comparison"},"rubricIssues":{"type":"array","items":{"type":"string"},"description":"Problems found in the test's pass criteria, if any"},"perAttempt":{"type":"array","description":"One entry per failed attempt analyzed, in the order the attempts ran","items":{"type":"object","properties":{"attemptId":{"type":"string","description":"The failed attempt"},"testCaseName":{"type":"string","description":"Name of the test that failed"},"analysis":{"type":"string","description":"Why this test failed and which part of the edit addresses it"}}}},"skippedAttemptIds":{"type":"array","items":{"type":"string"},"description":"Present only on very large runs: the oldest failed attempts beyond the most recent 12, which were not analyzed"},"edits":{"type":"array","items":{"type":"object","properties":{"find":{"type":"string"},"replace":{"type":"string"}}},"description":"The targeted edits that turn `currentPrompt` into `suggestedPrompt`, for rendering a diff. Usually present; absent when the suggestion was produced as a full rewrite, so always treat `suggestedPrompt` as the source of truth"}},"uniqueKey":"data.result.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.result","typeLabel":"object | null"},"stale":{"type":"boolean","description":"Present when `status` is `ready`. `true` means the agent's prompt has changed since this suggestion was written, so saving `suggestedPrompt` would overwrite those newer edits; request a fresh suggestion instead.","uniqueKey":"data.stale","typeLabel":"boolean"},"stage":{"type":"string","enum":["analyzing","writing"],"description":"Present while `status` is `running`: `analyzing` while the failures are being read, `writing` once the corrected output is being produced.","uniqueKey":"data.stage","typeLabel":"enum\u003cstring>"},"progress":{"type":"object","description":"Present while `status` is `running`, once writing begins.","properties":{"outputChars":{"type":"integer","description":"Characters of output produced so far","uniqueKey":"data.progress.outputChars","typeLabel":"integer"},"promptChars":{"type":"integer","description":"Size of the prompt under edit, for scale","uniqueKey":"data.progress.promptChars","typeLabel":"integer"}},"uniqueKey":"data.progress","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":{"status":"idle","result":{"analysis":"\u003cstring>","changesSummary":["\u003cstring>"],"suggestedPrompt":"\u003cstring>","currentPrompt":"\u003cstring>","rubricIssues":["\u003cstring>"],"perAttempt":[{"attemptId":"\u003cstring>","testCaseName":"\u003cstring>","analysis":"\u003cstring>"}],"skippedAttemptIds":["\u003cstring>"],"edits":[{"find":"\u003cstring>","replace":"\u003cstring>"}]},"stale":true,"stage":"analyzing","progress":{"outputChars":123,"promptChars":123}}}}},"exampleType":"generated"}},"exampleType":"generated"},"fb0568bb-74de-4fe4-beca-0d5ca30c8d22":{"description":"The run has not finished yet, or it has no failed attempts to analyze","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"72070eba-7445-420d-8d03-1b1b49ec2333":{"description":"Authentication required or API key invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"unauthorized","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"unauthorized"}}},"exampleType":"generated"}},"exampleType":"generated"},"198465d7-5adc-417c-aa33-2f0c980908f9":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"not_found","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"not_found"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"6fa6cbe6-9d37-480e-b7e5-09d33fd7b619":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","scopes":[],"schemeName":"apiKeyAuth"}}},"servers":{"9d0997fe-7397-47d9-a3af-b8c62abb4b63":{"url":"https://api.revring.ai/v1","description":"Production API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"API key for authentication. Generate API keys from the RevRing dashboard. A key is either full access or read-only; a read-only key is refused with 403 read_only_key on any request that creates, changes or deletes.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"x-api-key"}],"title":"apiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"revringinc","siteName":"RevRing AI Documentation","title":"Suggest a Fix for a Run - RevRing AI Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-11T19:23:16.762Z","originalFileLocation":"api-reference/test-suites/suggest-run-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=\"Ask for one prompt change that would make every failed test in a run pass. Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run\u0026#x27;s failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit. The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly. The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.\">\u003cmeta data-mint-head name=\"application-name\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_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/revringinc/yhLN44bkToDzQihq/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Suggest a Fix for a Run - RevRing AI Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Ask for one prompt change that would make every failed test in a run pass. Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run\u0026#x27;s failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit. The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly. The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://revringinc.mintlify.site/_mintlify/api/og/v2?division=Test+Runs\u0026amp;title=Suggest+a+Fix+for+a+Run\u0026amp;description=Ask+for+one+prompt+change+that+would+make+every+failed+test+in+a+run+pass.%0A%0ARequesting+a+fix+per+attempt+produces+separate+prompts+that+do+not+know+about+each+o\u0026amp;theme=5a859751c31e3347cd57ea04\u0026amp;signature=3d0f17a1ab733c0287ecc7ad1fb1001a6421d7af6d7a01f75ed124d0f203aedd\">\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=\"Suggest a Fix for a Run - RevRing AI Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Ask for one prompt change that would make every failed test in a run pass. Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run\u0026#x27;s failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit. The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly. The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://revringinc.mintlify.site/_mintlify/api/og/v2?division=Test+Runs\u0026amp;title=Suggest+a+Fix+for+a+Run\u0026amp;description=Ask+for+one+prompt+change+that+would+make+every+failed+test+in+a+run+pass.%0A%0ARequesting+a+fix+per+attempt+produces+separate+prompts+that+do+not+know+about+each+o\u0026amp;theme=5a859751c31e3347cd57ea04\u0026amp;signature=3d0f17a1ab733c0287ecc7ad1fb1001a6421d7af6d7a01f75ed124d0f203aedd\">\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/revringinc/yhLN44bkToDzQihq/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"RevRing AI Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#005cdd\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.revring.ai/api-reference/test-suites/suggest-run-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/test-suites/suggest-run-fix.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.revring.ai/#organization\",\"name\":\"RevRing AI Documentation\",\"url\":\"https://docs.revring.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/revringinc/4zfe2kVVWVYo-Rox/logo/light.svg?fit=max\u0026auto=format\u0026n=4zfe2kVVWVYo-Rox\u0026q=85\u0026s=e28235c04eceefff5b3adb1cb7c33353\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.revring.ai#website\",\"name\":\"RevRing AI Documentation\",\"url\":\"https://docs.revring.ai\",\"publisher\":{\"@id\":\"https://docs.revring.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix#webpage\",\"url\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix\",\"name\":\"Suggest a Fix for a Run\",\"description\":\"Ask for one prompt change that would make every failed test in a run pass. Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run's failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit. The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly. The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.\",\"dateModified\":\"2026-08-11T19:23:16.762Z\",\"isPartOf\":{\"@id\":\"https://docs.revring.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Test Runs\",\"item\":\"https://docs.revring.ai/api-reference/test-suites/list-runs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Suggest a Fix for a Run\",\"item\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix#apireference\",\"headline\":\"Suggest a Fix for a Run\",\"name\":\"Suggest a Fix for a Run\",\"description\":\"Ask for one prompt change that would make every failed test in a run pass. Requesting a fix per attempt produces separate prompts that do not know about each other, and applying one can undo another. This endpoint analyzes all of the run's failed attempts together and returns a single corrected prompt with a per-attempt breakdown, so failures that share a root cause get one coherent edit. The wait, polling, and reuse behavior is identical to the per-attempt Suggest a Fix: the request waits up to 105 seconds, wait=0 returns status: running immediately for polling with Get Suggested Fix for a Run, asking again joins a preparation already in progress, and a suggestion prepared within the last 10 minutes is returned instantly. The run must be finished and must contain at least one failed attempt. On runs with more than 12 failures, the most recent 12 are analyzed and the rest are listed in result.skippedAttemptIds.\",\"url\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix\",\"mainEntityOfPage\":{\"@id\":\"https://docs.revring.ai/api-reference/test-suites/suggest-run-fix#webpage\"},\"dateModified\":\"2026-08-11T19:23:16.762Z\",\"publisher\":{\"@id\":\"https://docs.revring.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.revring.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"RevRing AI Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"RevRing AI Documentation","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"Agents","pages":[{"title":"List Agents","openapi":"GET /agents","href":"/api-reference/agents/list"},{"title":"Get Agent","openapi":"GET /agents/{id}","href":"/api-reference/agents/get"},{"title":"Batch Get Agents","openapi":"POST /agents/batch-get","href":"/api-reference/agents/batch-get"},{"title":"Create Agent","openapi":"POST /agents","href":"/api-reference/agents/create"},{"title":"Draft an Agent From a Description","openapi":"POST /agents/draft","href":"/api-reference/agents/draft"},{"title":"Update Agent","openapi":"PATCH /agents/{id}","href":"/api-reference/agents/update"},{"title":"Chat With an Agent","openapi":"POST /agents/{id}/test-chat","href":"/api-reference/agents/test-chat"},{"title":"Talk to an Agent From a Browser","openapi":"POST /agents/{id}/test-call","href":"/api-reference/agents/test-call"},{"title":"Duplicate Agent","openapi":"POST /agents/{id}/duplicate","href":"/api-reference/agents/duplicate"},{"title":"Delete Agent","openapi":"DELETE /agents/{id}","href":"/api-reference/agents/delete"}]},{"group":"Agent Versions","pages":[{"title":"List Agent Versions","openapi":"GET /agents/{id}/revisions","href":"/api-reference/agents/list-revisions"},{"title":"Get Agent Version","openapi":"GET /agents/{id}/revisions/{revision}","href":"/api-reference/agents/get-revision"},{"title":"Restore Agent Version","openapi":"POST /agents/{id}/revisions/{revision}/restore","href":"/api-reference/agents/restore-revision"},{"title":"Publish Agent","openapi":"POST /agents/{id}/publish","href":"/api-reference/agents/publish"},{"title":"List Agent Environments","openapi":"GET /agents/{id}/environments","href":"/api-reference/agents/list-environments"},{"title":"Create or Update Environment","openapi":"PUT /agents/{id}/environments/{name}","href":"/api-reference/agents/upsert-environment"},{"title":"Delete Environment","openapi":"DELETE /agents/{id}/environments/{name}","href":"/api-reference/agents/delete-environment"}]},{"group":"Agent Phone Numbers","pages":[{"title":"List Agent Phone Numbers","openapi":"GET /agents/{id}/phone-numbers","href":"/api-reference/agents/list-phone-numbers"},{"title":"Add Phone Number","openapi":"POST /agents/{id}/phone-numbers","href":"/api-reference/agents/add-phone-number"},{"title":"Remove Phone Number","openapi":"DELETE /agents/{id}/phone-numbers/{phoneId}","href":"/api-reference/agents/remove-phone-number"},{"title":"Update Phone Number","openapi":"PATCH /agents/{id}/phone-numbers/{phoneId}","href":"/api-reference/agents/update-phone-number"}]},{"group":"Agent Custom Tools","pages":[{"title":"List Custom Tools","openapi":"GET /agents/{id}/custom-tools","href":"/api-reference/agents/list-custom-tools"},{"title":"Create Custom Tool","openapi":"POST /agents/{id}/custom-tools","href":"/api-reference/agents/create-custom-tool"},{"title":"Update Custom Tool","openapi":"PATCH /agents/{id}/custom-tools/{toolId}","href":"/api-reference/agents/update-custom-tool"},{"title":"Delete Custom Tool","openapi":"DELETE /agents/{id}/custom-tools/{toolId}","href":"/api-reference/agents/delete-custom-tool"},{"title":"Test MCP Server","openapi":"POST /agents/mcp-servers/test","href":"/api-reference/agents/test-mcp-server"}]},{"group":"Agent Knowledge Bases","pages":[{"title":"List Agent Knowledge Bases","openapi":"GET /agents/{id}/knowledge-bases","href":"/api-reference/agents/list-knowledge-bases"},{"title":"Link Knowledge Base","openapi":"POST /agents/{id}/knowledge-bases","href":"/api-reference/agents/link-knowledge-base"},{"title":"Unlink Knowledge Base","openapi":"DELETE /agents/{id}/knowledge-bases/{kbId}","href":"/api-reference/agents/unlink-knowledge-base"}]},{"group":"Agent Folders","pages":[{"title":"List Agent Folders","openapi":"GET /agent-folders","href":"/api-reference/agent-folders/list"},{"title":"Create Agent Folder","openapi":"POST /agent-folders","href":"/api-reference/agent-folders/create"},{"title":"Update Agent Folder","openapi":"PATCH /agent-folders/{id}","href":"/api-reference/agent-folders/update"},{"title":"Delete Agent Folder","openapi":"DELETE /agent-folders/{id}","href":"/api-reference/agent-folders/delete"}]},{"group":"Imports","pages":[{"title":"List Source Agents","openapi":"POST /imports/agents","href":"/api-reference/imports/list-agents"},{"title":"Import Agents","openapi":"POST /imports","href":"/api-reference/imports/import"}]},{"group":"SIP Trunks","pages":[{"title":"List SIP Trunks","openapi":"GET /sip-trunks","href":"/api-reference/sip-trunks/list"},{"title":"Get SIP Trunk","openapi":"GET /sip-trunks/{id}","href":"/api-reference/sip-trunks/get"},{"title":"List Available Phone Numbers","openapi":"GET /sip-trunks/{id}/available-numbers","href":"/api-reference/sip-trunks/list-available-numbers"},{"title":"Create SIP Trunk","openapi":"POST /sip-trunks","href":"/api-reference/sip-trunks/create"},{"title":"Update SIP Trunk","openapi":"PATCH /sip-trunks/{id}","href":"/api-reference/sip-trunks/update"},{"title":"Delete SIP Trunk","openapi":"DELETE /sip-trunks/{id}","href":"/api-reference/sip-trunks/delete"},{"title":"List Twilio Numbers","openapi":"POST /sip-trunks/connect/twilio/numbers","href":"/api-reference/sip-trunks/list-twilio-numbers"},{"title":"Connect Twilio","openapi":"POST /sip-trunks/connect/twilio","href":"/api-reference/sip-trunks/connect-twilio"}]},{"group":"Calls","pages":[{"title":"List Calls","openapi":"GET /calls","href":"/api-reference/calls/list"},{"title":"Get Call","openapi":"GET /calls/{id}","href":"/api-reference/calls/get"},{"title":"Batch Get Calls","openapi":"POST /calls/batch-get","href":"/api-reference/calls/batch-get"},{"title":"Send Call","openapi":"POST /calls","href":"/api-reference/calls/send"},{"title":"Cancel Call","openapi":"POST /calls/{id}/cancel","href":"/api-reference/calls/cancel"},{"title":"Send Instruction","openapi":"POST /calls/{id}/instructions","href":"/api-reference/calls/send-instruction"},{"title":"End Call","openapi":"POST /calls/{id}/end","href":"/api-reference/calls/end"},{"title":"Re-run Analysis","openapi":"POST /calls/{id}/reanalyze","href":"/api-reference/calls/reanalyze"},{"title":"Re-run Analysis (bulk)","openapi":"POST /calls/reanalyze","href":"/api-reference/calls/reanalyze-bulk"},{"title":"Export Calls","openapi":"GET /calls/export","href":"/api-reference/calls/export"}]},{"group":"Campaigns","pages":[{"title":"Create Campaign","openapi":"POST /campaigns","href":"/api-reference/campaigns/create"},{"title":"List Campaigns","openapi":"GET /campaigns","href":"/api-reference/campaigns/list"},{"title":"Get Campaign","openapi":"GET /campaigns/{id}","href":"/api-reference/campaigns/get"},{"title":"Update Campaign","openapi":"PATCH /campaigns/{id}","href":"/api-reference/campaigns/update"},{"title":"Delete Campaign","openapi":"DELETE /campaigns/{id}","href":"/api-reference/campaigns/delete"},{"title":"Add Campaign Contacts","openapi":"POST /campaigns/{id}/contacts","href":"/api-reference/campaigns/add-contacts"},{"title":"List Campaign Contacts","openapi":"GET /campaigns/{id}/contacts","href":"/api-reference/campaigns/list-contacts"},{"title":"Start Campaign","openapi":"POST /campaigns/{id}/start","href":"/api-reference/campaigns/start"},{"title":"Pause Campaign","openapi":"POST /campaigns/{id}/pause","href":"/api-reference/campaigns/pause"},{"title":"Cancel Campaign","openapi":"POST /campaigns/{id}/cancel","href":"/api-reference/campaigns/cancel"},{"title":"Export Campaign Results","openapi":"GET /campaigns/{id}/export","href":"/api-reference/campaigns/export"}]},{"group":"Alerts","pages":[{"title":"List Alert Rules","openapi":"GET /alert-rules","href":"/api-reference/alerts/list"},{"title":"Create Alert Rule","openapi":"POST /alert-rules","href":"/api-reference/alerts/create"},{"title":"Get Alert Rule","openapi":"GET /alert-rules/{id}","href":"/api-reference/alerts/get"},{"title":"Update Alert Rule","openapi":"PATCH /alert-rules/{id}","href":"/api-reference/alerts/update"},{"title":"Delete Alert Rule","openapi":"DELETE /alert-rules/{id}","href":"/api-reference/alerts/delete"},{"title":"List Alert Events","openapi":"GET /alert-rules/{id}/events","href":"/api-reference/alerts/events"},{"title":"Get Alert Value","openapi":"GET /alert-rules/{id}/value","href":"/api-reference/alerts/value"},{"title":"Send Test Alert","openapi":"POST /alert-rules/{id}/test","href":"/api-reference/alerts/test"}]},{"group":"Do Not Call","pages":[{"title":"List Do-Not-Call Numbers","openapi":"GET /do-not-call","href":"/api-reference/do-not-call/list"},{"title":"Add Do-Not-Call Numbers","openapi":"POST /do-not-call","href":"/api-reference/do-not-call/add"},{"title":"Remove Do-Not-Call Number","openapi":"DELETE /do-not-call/{e164}","href":"/api-reference/do-not-call/remove"}]},{"group":"Contacts","pages":[{"title":"List Contact Memories","openapi":"GET /contacts/memories","href":"/api-reference/contacts/list-memories"},{"title":"Get Contact Memory","openapi":"GET /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/get-memory"},{"title":"Set Contact Memory","openapi":"PUT /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/set-memory"},{"title":"Delete Contact Memory","openapi":"DELETE /contacts/{phoneNumber}/memory","href":"/api-reference/contacts/delete-memory"}]},{"group":"Integrations","pages":[{"title":"List Integrations","openapi":"GET /integrations","href":"/api-reference/integrations/list"},{"title":"Connect Integration","openapi":"POST /integrations","href":"/api-reference/integrations/connect"},{"title":"List Calendars","openapi":"GET /integrations/{id}/calendars","href":"/api-reference/integrations/calendars"},{"title":"Test Integration","openapi":"POST /integrations/{id}/test","href":"/api-reference/integrations/test"},{"title":"Update Integration","openapi":"PATCH /integrations/{id}","href":"/api-reference/integrations/update"},{"title":"Disconnect Integration","openapi":"DELETE /integrations/{id}","href":"/api-reference/integrations/delete"}]},{"group":"Knowledge Bases","pages":[{"title":"List Knowledge Bases","openapi":"GET /knowledge-bases","href":"/api-reference/knowledge-bases/list"},{"title":"Get Knowledge Base","openapi":"GET /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/get"},{"title":"Create Knowledge Base","openapi":"POST /knowledge-bases","href":"/api-reference/knowledge-bases/create"},{"title":"Update Knowledge Base","openapi":"PATCH /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/update"},{"title":"Delete Knowledge Base","openapi":"DELETE /knowledge-bases/{id}","href":"/api-reference/knowledge-bases/delete"}]},{"group":"Knowledge Base Sources","pages":[{"title":"Add Source","openapi":"POST /knowledge-bases/{id}/sources","href":"/api-reference/knowledge-bases/add-source"},{"title":"Get Source","openapi":"GET /knowledge-bases/{id}/sources/{sourceId}","href":"/api-reference/knowledge-bases/get-source"},{"title":"Refresh Source","openapi":"POST /knowledge-bases/{id}/sources/{sourceId}/refresh","href":"/api-reference/knowledge-bases/refresh-source"},{"title":"Delete Source","openapi":"DELETE /knowledge-bases/{id}/sources/{sourceId}","href":"/api-reference/knowledge-bases/delete-source"}]},{"group":"Voices","pages":[{"title":"List Voices","openapi":"GET /voices","href":"/api-reference/voices/list"},{"title":"Get Voice","openapi":"GET /voices/{id}","href":"/api-reference/voices/get"},{"title":"Preview Voice","openapi":"GET /voices/{id}/preview","href":"/api-reference/voices/preview"},{"title":"Create Voice","openapi":"POST /voices","href":"/api-reference/voices/create"},{"title":"Design Voices","openapi":"POST /voices/design","href":"/api-reference/voices/design"},{"title":"Search Studio Library","openapi":"GET /voices/studio/library","href":"/api-reference/voices/studio-library"},{"title":"Preview Studio Voice","openapi":"GET /voices/studio/library/{voiceId}/preview","href":"/api-reference/voices/studio-preview"},{"title":"Add Studio Voice","openapi":"POST /voices/studio","href":"/api-reference/voices/studio-add"},{"title":"Rename Voice","openapi":"PATCH /voices/{id}","href":"/api-reference/voices/rename"},{"title":"Delete Voice","openapi":"DELETE /voices/{id}","href":"/api-reference/voices/delete"}]},{"group":"Activity","pages":[{"title":"List Activity","openapi":"GET /activity","href":"/api-reference/activity/list"}]},{"group":"Analytics","pages":[{"title":"Get Analytics Overview","openapi":"GET /analytics/overview","href":"/api-reference/analytics/overview"},{"title":"Get Active Calls Count","openapi":"GET /analytics/active","href":"/api-reference/analytics/active"},{"title":"Compare Versions","openapi":"GET /analytics/versions","href":"/api-reference/analytics/versions"},{"title":"Get Agent Reply Times","openapi":"GET /analytics/reply-times","href":"/api-reference/analytics/reply-times"},{"title":"Get Agent Activity","openapi":"GET /analytics/agents","href":"/api-reference/analytics/agent-activity"}]},{"group":"Test Suites","pages":[{"title":"List Test Suites","openapi":"GET /test-suites","href":"/api-reference/test-suites/list"},{"title":"Get Test Suite","openapi":"GET /test-suites/{id}","href":"/api-reference/test-suites/get"},{"title":"Create Test Suite","openapi":"POST /test-suites","href":"/api-reference/test-suites/create"},{"title":"Update Test Suite","openapi":"PATCH /test-suites/{id}","href":"/api-reference/test-suites/update"},{"title":"Delete Test Suite","openapi":"DELETE /test-suites/{id}","href":"/api-reference/test-suites/delete"},{"title":"Create Test From Call","openapi":"POST /test-suites/{id}/tests/from-call","href":"/api-reference/test-suites/create-test-from-call"},{"title":"Create Suite From Failing Calls","openapi":"POST /test-suites/from-failing-calls","href":"/api-reference/test-suites/from-failing-calls"}]},{"group":"Test Cases","pages":[{"title":"List Test Cases","openapi":"GET /test-suites/{id}/tests","href":"/api-reference/test-suites/list-tests"},{"title":"Get Test Case","openapi":"GET /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/get-test"},{"title":"Create Test Case","openapi":"POST /test-suites/{id}/tests","href":"/api-reference/test-suites/create-test"},{"title":"Update Test Case","openapi":"PATCH /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/update-test"},{"title":"Delete Test Case","openapi":"DELETE /test-suites/{id}/tests/{testId}","href":"/api-reference/test-suites/delete-test"},{"title":"Generate Test Cases","openapi":"POST /test-suites/{id}/generate-tests","href":"/api-reference/test-suites/generate-tests"}]},{"group":"Test Runs","pages":[{"title":"List Test Runs","openapi":"GET /test-suites/{id}/runs","href":"/api-reference/test-suites/list-runs"},{"title":"Get Test Run","openapi":"GET /test-suites/{id}/runs/{runId}","href":"/api-reference/test-suites/get-run"},{"title":"Start Test Run","openapi":"POST /test-suites/{id}/runs","href":"/api-reference/test-suites/start-run"},{"title":"Cancel Test Run","openapi":"POST /test-suites/{id}/runs/{runId}/cancel","href":"/api-reference/test-suites/cancel-run"},{"title":"Suggest a Fix","openapi":"POST /test-suites/{id}/attempts/{attemptId}/suggest-fix","href":"/api-reference/test-suites/suggest-fix"},{"title":"Get Suggested Fix","openapi":"GET /test-suites/{id}/attempts/{attemptId}/suggest-fix","description":"Fetch the suggestion for a failed test attempt. Poll this every couple of seconds after requesting one: `status` stays `running` while it is being prepared and becomes `ready` when `result` holds the suggestion. `failed` means it could not be prepared; request a new one.","href":"/api-reference/test-suites/get-suggested-fix"},{"title":"Suggest a Fix for a Run","openapi":"POST /test-suites/{id}/runs/{runId}/suggest-fix","href":"/api-reference/test-suites/suggest-run-fix"},{"title":"Get Suggested Fix for a Run","openapi":"GET /test-suites/{id}/runs/{runId}/suggest-fix","description":"Fetch the run-level suggestion. Poll this every couple of seconds after requesting one: `status` stays `running` while it is being prepared and becomes `ready` when `result` holds the suggestion. `failed` means it could not be prepared; request a new one.","href":"/api-reference/test-suites/get-run-suggested-fix"}]},{"group":"Messaging Connections","pages":[{"title":"List Messaging Connections","openapi":"GET /messaging-connections","href":"/api-reference/messaging-connections/list"},{"title":"Get Messaging Connection","openapi":"GET /messaging-connections/{id}","href":"/api-reference/messaging-connections/get"},{"title":"Create Messaging Connection","openapi":"POST /messaging-connections","href":"/api-reference/messaging-connections/create"},{"title":"Update Messaging Connection","openapi":"PATCH /messaging-connections/{id}","href":"/api-reference/messaging-connections/update"},{"title":"Delete Messaging Connection","openapi":"DELETE /messaging-connections/{id}","href":"/api-reference/messaging-connections/delete"}]},{"group":"Messages","pages":[{"title":"Send Message","openapi":"POST /messages","href":"/api-reference/messages/send"},{"title":"List Messages","openapi":"GET /messages","href":"/api-reference/messages/list"},{"title":"Get Message","openapi":"GET /messages/{id}","href":"/api-reference/messages/get"}]},{"group":"Conversations","pages":[{"title":"List Conversations","openapi":"GET /conversations","href":"/api-reference/conversations/list"},{"title":"Delete Conversation","openapi":"DELETE /conversations/{id}","href":"/api-reference/conversations/delete"}]},{"group":"Webhooks","pages":[{"title":"Pre-Call Webhook","openapi":"webhook pre-call","href":"/api-reference/webhooks/pre-call"},{"title":"Post-Call Webhook","openapi":"webhook post-call","href":"/api-reference/webhooks/post-call"},{"title":"Webhook Signing Secret","openapi":"POST /webhooks/signing-secret","href":"/api-reference/webhooks/signing-secret"},{"title":"Get Webhook Signing State","openapi":"GET /webhooks/signing-secret","href":"/api-reference/webhooks/signing-state"},{"title":"Disable Webhook Signing","openapi":"DELETE /webhooks/signing-secret","href":"/api-reference/webhooks/signing-disable"},{"title":"Inbound Message Webhook","openapi":"webhook message-received","href":"/api-reference/webhooks/message-received"}]}]}]},"basePath":"","title":"Suggest a Fix for a Run - RevRing AI Documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}