Get the per-trace remediation diff for a control action
Returns a comparison of the original LLM span against the
remediated span produced by a retry control action — token
length delta, latency delta, Claude-rated similarity, and
per-rule eval score deltas. Lazy-computed on first GET and
cached for subsequent requests. TRU-363.
Status codes:
200 — diff available (cached or just computed)
202 — evaluation_incomplete: caller should poll
404 — action not found / cross-tenant
422 — no_remediated_span: action type cannot produce a diff
(currently fallback_model and prompt_modification)
GET
/
v1
/
control
/
actions
/
{id}
/
diff
Get the per-trace remediation diff for a control action
Per-trace remediation diff for a retry control action. Lazy-
computed on first GET and cached. embedding_similarity is a
0..1 score from a Claude similarity rating, with the sentinel
-1.0 when the rater call failed. TRU-363.
citations_per_1k_chars(remediated) -
citations_per_1k_chars(original). Null for diffs
computed before TRU-373 (column nullable, no backfill)
and when both outputs are empty. TRU-373.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TruLayer","colors":{"primary":"#6366F1","light":"#818CF8","dark":"#4F46E5"},"logo":{"light":"https://mintcdn.com/omnimodallc/Rc1rbNUGtX5WgsQI/logo/light.svg?fit=max\u0026auto=format\u0026n=Rc1rbNUGtX5WgsQI\u0026q=85\u0026s=533179b80c872f3f958c07a10a75b7ad","dark":"https://mintcdn.com/omnimodallc/Rc1rbNUGtX5WgsQI/logo/dark.svg?fit=max\u0026auto=format\u0026n=Rc1rbNUGtX5WgsQI\u0026q=85\u0026s=35f9b77cef986807c7a3f678adcfdb5e"},"favicon":"https://mintcdn.com/omnimodallc/xJho_XGKhESQfqYR/favicon.svg?fit=max\u0026auto=format\u0026n=xJho_XGKhESQfqYR\u0026q=85\u0026s=73c2634e0d88e4b01d70635608f04159","navbar":{"links":[{"href":"mailto:support@trulayer.ai","label":"Support"}],"primary":{"type":"button","label":"Sign up","href":"https://app.trulayer.ai/sign-up"}},"footer":{"socials":{"x":"https://x.com/trulayer_ai","github":"https://github.com/trulayer","linkedin":"https://linkedin.com/company/trulayer"}},"seo":{"metatags":{"canonical":"https://docs.trulayer.ai"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"chart-line","href":"https://app.trulayer.ai"},{"anchor":"Status","icon":"signal","href":"https://status.trulayer.ai"},{"anchor":"GitHub","icon":"github","href":"https://github.com/trulayer"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"omnimodallc","hasAudioNarration":false,"actualSubdomain":"omnimodallc","customDomains":["docs.trulayer.ai"],"gitSource":{"type":"github","owner":"trulayer","repo":"docs","deployBranch":"main","isPrivate":false,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a5d9860526179ec9eda3322","collectionId":"4240f09b-0968-4af5-aa3a-375dde840b29","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a5d9860526179ec9eda3322"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a5d9860526179ec9eda3322:success","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":110},{"language":"default","tag":"Endpoints","count":109},{"language":"default","tag":"Guides","count":87},{"language":"default","tag":"Dashboard","count":16},{"language":"default","tag":"Integrations","count":12},{"language":"default","tag":"control","count":9},{"language":"default","tag":"Go SDK","count":8},{"language":"default","tag":"datasets","count":8},{"language":"default","tag":"Python SDK","count":7},{"language":"default","tag":"TypeScript SDK","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action","slug":"/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action","pageMetadata":{"title":"Get the per-trace remediation diff for a control action","description":"Returns a comparison of the original LLM span against the\nremediated span produced by a `retry` control action — token\nlength delta, latency delta, Claude-rated similarity, and\nper-rule eval score deltas. Lazy-computed on first GET and\ncached for subsequent requests. TRU-363.\n\nStatus codes:\n * 200 — diff available (cached or just computed)\n * 202 — `evaluation_incomplete`: caller should poll\n * 404 — action not found / cross-tenant\n * 422 — `no_remediated_span`: action type cannot produce a diff\n (currently `fallback_model` and `prompt_modification`)\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/actions/{id}/diff","href":"/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action","autogeneratedByOpenApi":true},"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 li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Returns a comparison of the original LLM span against the\\nremediated span produced by a \", _jsx(_components.code, {\n children: \"retry\"\n }), \" control action — token\\nlength delta, latency delta, Claude-rated similarity, and\\nper-rule eval score deltas. Lazy-computed on first GET and\\ncached for subsequent requests. TRU-363.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Status codes:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"200 — diff available (cached or just computed)\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"202 — \", _jsx(_components.code, {\n children: \"evaluation_incomplete\"\n }), \": caller should poll\"]\n }), \"\\n\", _jsx(_components.li, {\n children: \"404 — action not found / cross-tenant\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"422 — \", _jsx(_components.code, {\n children: \"no_remediated_span\"\n }), \": action type cannot produce a diff\\n(currently \", _jsx(_components.code, {\n children: \"fallback_model\"\n }), \" and \", _jsx(_components.code, {\n children: \"prompt_modification\"\n }), \")\"]\n }), \"\\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":"Get the per-trace remediation diff for a control action","description":"Returns a comparison of the original LLM span against the\nremediated span produced by a `retry` control action — token\nlength delta, latency delta, Claude-rated similarity, and\nper-rule eval score deltas. Lazy-computed on first GET and\ncached for subsequent requests. TRU-363.\n\nStatus codes:\n * 200 — diff available (cached or just computed)\n * 202 — `evaluation_incomplete`: caller should poll\n * 404 — action not found / cross-tenant\n * 422 — `no_remediated_span`: action type cannot produce a diff\n (currently `fallback_model` and `prompt_modification`)\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/actions/{id}/diff","href":"/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"getRemediationDiff","tags":["control"],"summary":"Get the per-trace remediation diff for a control action","description":"Returns a comparison of the original LLM span against the\nremediated span produced by a `retry` control action — token\nlength delta, latency delta, Claude-rated similarity, and\nper-rule eval score deltas. Lazy-computed on first GET and\ncached for subsequent requests. TRU-363.\n\nStatus codes:\n * 200 — diff available (cached or just computed)\n * 202 — `evaluation_incomplete`: caller should poll\n * 404 — action not found / cross-tenant\n * 422 — `no_remediated_span`: action type cannot produce a diff\n (currently `fallback_model` and `prompt_modification`)\n","parameters":["396c1911-3cba-47f5-93f8-289b7a194dbe"],"responses":{"200":"edecda5a-ef19-4191-ae25-dbd730e3afc1","202":"62b012ee-d129-408a-b10e-21d4e01fd985","401":"21397fc2-5623-4c7f-826f-7e566d567064","404":"27d8dae5-fab6-4cb7-9821-e7fe9c2073ba","422":"e560bd28-8e61-449e-94dc-2f3a049ebb28"},"method":"get","type":"path","servers":["1fdfbe09-f60b-4dc4-876c-fd3c921de961","da4a1cd5-feab-463f-b8fb-4dc46866de30"],"security":["1a2e7257-0f54-402e-987e-25adc8adddab"],"path":"/v1/control/actions/{id}/diff","baseUrlOptions":["https://api.trulayer.ai","http://localhost:8080"],"title":"Get the per-trace remediation diff for a control action","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"396c1911-3cba-47f5-93f8-289b7a194dbe":{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"responses":{"edecda5a-ef19-4191-ae25-dbd730e3afc1":{"description":"Remediation diff","content":{"application/json":{"schema":{"type":"object","description":"Per-trace remediation diff for a `retry` control action. Lazy-\ncomputed on first GET and cached. `embedding_similarity` is a\n0..1 score from a Claude similarity rating, with the sentinel\n`-1.0` when the rater call failed. TRU-363.\n","required":["action_id","original_span_id","remediated_span_id","token_length_delta","latency_delta_ms","embedding_similarity","score_deltas","summary"],"properties":{"action_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"action_id","typeLabel":"string\u003cuuid>"},"original_span_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"original_span_id","typeLabel":"string\u003cuuid>"},"remediated_span_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"remediated_span_id","typeLabel":"string\u003cuuid>"},"token_length_delta":{"type":"integer","description":"remediated_tokens - original_tokens (sum of prompt + completion).","isRequired":true,"uniqueKey":"token_length_delta","typeLabel":"integer"},"latency_delta_ms":{"type":"integer","format":"int64","description":"remediated_latency_ms - original_latency_ms.","isRequired":true,"uniqueKey":"latency_delta_ms","typeLabel":"integer\u003cint64>"},"embedding_similarity":{"type":"number","format":"double","description":"0..1 similarity, or -1.0 when the rater call failed.","isRequired":true,"uniqueKey":"embedding_similarity","typeLabel":"number\u003cdouble>"},"score_deltas":{"type":"array","items":{"type":"object","required":["eval_rule_id","rule_name","original_score","remediated_score","delta"],"properties":{"eval_rule_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"score_deltas.items.[INDEX].eval_rule_id","typeLabel":"string\u003cuuid>"},"rule_name":{"type":"string","isRequired":true,"uniqueKey":"score_deltas.items.[INDEX].rule_name","typeLabel":"string"},"original_score":{"type":"number","format":"double","isRequired":true,"uniqueKey":"score_deltas.items.[INDEX].original_score","typeLabel":"number\u003cdouble>"},"remediated_score":{"type":"number","format":"double","isRequired":true,"uniqueKey":"score_deltas.items.[INDEX].remediated_score","typeLabel":"number\u003cdouble>"},"delta":{"type":"number","format":"double","isRequired":true,"uniqueKey":"score_deltas.items.[INDEX].delta","typeLabel":"number\u003cdouble>"}},"uniqueKey":"score_deltas.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"score_deltas","typeLabel":"object[]"},"summary":{"type":"string","isRequired":true,"uniqueKey":"summary","typeLabel":"string"},"citation_density_delta":{"oneOf":[{"type":"number","format":"double","description":"citations_per_1k_chars(remediated) -\ncitations_per_1k_chars(original). Null for diffs\ncomputed before TRU-373 (column nullable, no backfill)\nand when both outputs are empty. TRU-373.\n","uniqueKey":"citation_density_delta.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"citations_per_1k_chars(remediated) -\ncitations_per_1k_chars(original). Null for diffs\ncomputed before TRU-373 (column nullable, no backfill)\nand when both outputs are empty. TRU-373.\n","uniqueKey":"citation_density_delta.oneOf.1","typeLabel":"null"}],"uniqueKey":"citation_density_delta","typeLabel":"number\u003cdouble> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"action_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","original_span_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","remediated_span_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","token_length_delta":123,"latency_delta_ms":123,"embedding_similarity":123,"score_deltas":[{"eval_rule_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","rule_name":"\u003cstring>","original_score":123,"remediated_score":123,"delta":123}],"summary":"\u003cstring>","citation_density_delta":123}}},"exampleType":"generated"}},"exampleType":"generated"},"62b012ee-d129-408a-b10e-21d4e01fd985":{"description":"Evaluation still running — caller should poll","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["pending"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","enum":["evaluation_incomplete"],"isRequired":true,"uniqueKey":"reason","typeLabel":"enum\u003cstring>"}},"required":["status","reason"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"pending","reason":"evaluation_incomplete"}}},"exampleType":"generated"}},"exampleType":"generated"},"21397fc2-5623-4c7f-826f-7e566d567064":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"27d8dae5-fab6-4cb7-9821-e7fe9c2073ba":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e560bd28-8e61-449e-94dc-2f3a049ebb28":{"description":"Action type cannot produce a remediation diff","content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["no_remediated_span"],"isRequired":true,"uniqueKey":"reason","typeLabel":"enum\u003cstring>"}},"required":["reason"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"reason":"no_remediated_span"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"1a2e7257-0f54-402e-987e-25adc8adddab":{"BearerAuth":{"type":"http","scheme":"bearer","description":"SDK API key (`tl_...`) or Clerk session JWT","scopes":[]}}},"servers":{"1fdfbe09-f60b-4dc4-876c-fd3c921de961":{"url":"https://api.trulayer.ai","description":"Production"},"da4a1cd5-feab-463f-b8fb-4dc46866de30":{"url":"http://localhost:8080","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"SDK API key (`tl_...`) or Clerk session JWT","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"SDK API key (`tl_...`) or Clerk session JWT","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"omnimodallc","siteName":"TruLayer","title":"Get the per-trace remediation diff for a control action - TruLayer","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-14T06:32:50.156Z","originalFileLocation":"api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action.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=\"Returns a comparison of the original LLM span against the remediated span produced by a retry control action — token length delta, latency delta, Claude-rated similarity, and per-rule eval score deltas. Lazy-computed on first GET and cached for subsequent requests. TRU-363. Status codes: 200 — diff available (cached or just computed) 202 — evaluation_incomplete: caller should poll 404 — action not found / cross-tenant 422 — no_remediated_span: action type cannot produce a diff (currently fallback_model and prompt_modification)\">\u003cmeta data-mint-head name=\"application-name\" content=\"TruLayer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_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/omnimodallc/IO9_gQbDt9V1gpMF/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get the per-trace remediation diff for a control action - TruLayer\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns a comparison of the original LLM span against the remediated span produced by a retry control action — token length delta, latency delta, Claude-rated similarity, and per-rule eval score deltas. Lazy-computed on first GET and cached for subsequent requests. TRU-363. Status codes: 200 — diff available (cached or just computed) 202 — evaluation_incomplete: caller should poll 404 — action not found / cross-tenant 422 — no_remediated_span: action type cannot produce a diff (currently fallback_model and prompt_modification)\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TruLayer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://omnimodallc.mintlify.app/_mintlify/api/og/v2?division=control\u0026amp;title=Get+the+per-trace+remediation+diff+for+a+control+action\u0026amp;description=Returns+a+comparison+of+the+original+LLM+span+against+the%0Aremediated+span+produced+by+a+%60retry%60+control+action+%E2%80%94+token%0Alength+delta%2C+latency+delta%2C+Claude-rated\u0026amp;theme=f30cc050865b51b401e85f73\u0026amp;signature=c1bef02050295d1ac8c656411f4a51b205eefec8b19766797f94528b8429a529\">\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=\"Get the per-trace remediation diff for a control action - TruLayer\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns a comparison of the original LLM span against the remediated span produced by a retry control action — token length delta, latency delta, Claude-rated similarity, and per-rule eval score deltas. Lazy-computed on first GET and cached for subsequent requests. TRU-363. Status codes: 200 — diff available (cached or just computed) 202 — evaluation_incomplete: caller should poll 404 — action not found / cross-tenant 422 — no_remediated_span: action type cannot produce a diff (currently fallback_model and prompt_modification)\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://omnimodallc.mintlify.app/_mintlify/api/og/v2?division=control\u0026amp;title=Get+the+per-trace+remediation+diff+for+a+control+action\u0026amp;description=Returns+a+comparison+of+the+original+LLM+span+against+the%0Aremediated+span+produced+by+a+%60retry%60+control+action+%E2%80%94+token%0Alength+delta%2C+latency+delta%2C+Claude-rated\u0026amp;theme=f30cc050865b51b401e85f73\u0026amp;signature=c1bef02050295d1ac8c656411f4a51b205eefec8b19766797f94528b8429a529\">\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/omnimodallc/IO9_gQbDt9V1gpMF/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TruLayer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6366F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trulayer.ai/#organization\",\"name\":\"TruLayer\",\"url\":\"https://docs.trulayer.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/omnimodallc/Rc1rbNUGtX5WgsQI/logo/light.svg?fit=max\u0026auto=format\u0026n=Rc1rbNUGtX5WgsQI\u0026q=85\u0026s=533179b80c872f3f958c07a10a75b7ad\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trulayer.ai#website\",\"name\":\"TruLayer\",\"url\":\"https://docs.trulayer.ai\",\"publisher\":{\"@id\":\"https://docs.trulayer.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action#webpage\",\"url\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action\",\"name\":\"Get the per-trace remediation diff for a control action\",\"description\":\"Returns a comparison of the original LLM span against the remediated span produced by a retry control action — token length delta, latency delta, Claude-rated similarity, and per-rule eval score deltas. Lazy-computed on first GET and cached for subsequent requests. TRU-363. Status codes: 200 — diff available (cached or just computed) 202 — evaluation_incomplete: caller should poll 404 — action not found / cross-tenant 422 — no_remediated_span: action type cannot produce a diff (currently fallback_model and prompt_modification)\",\"dateModified\":\"2026-05-14T06:32:50.156Z\",\"isPartOf\":{\"@id\":\"https://docs.trulayer.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.trulayer.ai/api-reference/health/liveness-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"control\",\"item\":\"https://docs.trulayer.ai/api-reference/control/execute-a-control-action-retry-fallback-model-or-prompt-modification\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Get the per-trace remediation diff for a control action\",\"item\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action#apireference\",\"headline\":\"Get the per-trace remediation diff for a control action\",\"name\":\"Get the per-trace remediation diff for a control action\",\"description\":\"Returns a comparison of the original LLM span against the remediated span produced by a retry control action — token length delta, latency delta, Claude-rated similarity, and per-rule eval score deltas. Lazy-computed on first GET and cached for subsequent requests. TRU-363. Status codes: 200 — diff available (cached or just computed) 202 — evaluation_incomplete: caller should poll 404 — action not found / cross-tenant 422 — no_remediated_span: action type cannot produce a diff (currently fallback_model and prompt_modification)\",\"url\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trulayer.ai/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action#webpage\"},\"dateModified\":\"2026-05-14T06:32:50.156Z\",\"publisher\":{\"@id\":\"https://docs.trulayer.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trulayer.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TruLayer\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TruLayer","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"chart-line","href":"https://app.trulayer.ai"},{"anchor":"Status","icon":"signal","href":"https://status.trulayer.ai"},{"anchor":"GitHub","icon":"github","href":"https://github.com/trulayer"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"health","pages":[{"title":"Liveness check","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /health","href":"/api-reference/health/liveness-check"}]},{"group":"ingest","pages":[{"title":"Ingest a single trace","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/ingest","href":"/api-reference/ingest/ingest-a-single-trace"},{"title":"Ingest a batch of traces (max 100)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/ingest/batch","href":"/api-reference/ingest/ingest-a-batch-of-traces-max-100"}]},{"group":"otlp","pages":[{"title":"OTLP/HTTP ingest endpoint (OTel GenAI semconv v1.29.0)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/otlp/traces","href":"/api-reference/otlp/otlphttp-ingest-endpoint-otel-genai-semconv-v1290"},{"title":"Export traces in OTLP/HTTP JSON format","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/otlp/export","href":"/api-reference/otlp/export-traces-in-otlphttp-json-format"}]},{"group":"traces","pages":[{"title":"List traces with cursor-based pagination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/traces","href":"/api-reference/traces/list-traces-with-cursor-based-pagination"},{"title":"Get trace detail with spans and events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/traces/{id}","href":"/api-reference/traces/get-trace-detail-with-spans-and-events"},{"title":"Get the remediation chain for a trace","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/traces/{id}/remediations","href":"/api-reference/traces/get-the-remediation-chain-for-a-trace"},{"title":"Stream the spans of a single trace as CSV or JSONL (sync export)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/traces/export","href":"/api-reference/traces/stream-the-spans-of-a-single-trace-as-csv-or-jsonl-sync-export"},{"title":"Server-Sent Events stream of live trace events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/traces/live","href":"/api-reference/traces/server-sent-events-stream-of-live-trace-events"}]},{"group":"deprecations","pages":[{"title":"List currently deprecated v1 fields and endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/deprecations","href":"/api-reference/deprecations/list-currently-deprecated-v1-fields-and-endpoints"}]},{"group":"metrics","pages":[{"title":"Aggregate metrics (error rate, latency percentiles, cost)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/metrics","href":"/api-reference/metrics/aggregate-metrics-error-rate-latency-percentiles-cost"},{"title":"Customer-facing ingestion pipeline health (TRU-167)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/ingestion-health","href":"/api-reference/metrics/customer-facing-ingestion-pipeline-health-tru-167"}]},{"group":"audit","pages":[{"title":"Verify a daily audit-log head-hash anchor (TRU-163)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/audit/verify","href":"/api-reference/audit/verify-a-daily-audit-log-head-hash-anchor-tru-163"}]},{"group":"compliance","pages":[{"title":"Public sub-processor registry (TRU-52)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/subprocessors","href":"/api-reference/compliance/public-sub-processor-registry-tru-52"},{"title":"Subscribe an email to sub-processor change notifications (TRU-52)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/subprocessors/subscribe","href":"/api-reference/compliance/subscribe-an-email-to-sub-processor-change-notifications-tru-52"},{"title":"Unsubscribe an email from sub-processor change notifications (TRU-52)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/subprocessors/unsubscribe","href":"/api-reference/compliance/unsubscribe-an-email-from-sub-processor-change-notifications-tru-52"}]},{"group":"dsr","pages":[{"title":"List Data Subject Requests for the authenticated tenant (TRU-57)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/dsr","href":"/api-reference/dsr/list-data-subject-requests-for-the-authenticated-tenant-tru-57"},{"title":"Submit a Data Subject Request (TRU-57)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/dsr","href":"/api-reference/dsr/submit-a-data-subject-request-tru-57"},{"title":"Fetch a single DSR request (TRU-57)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/dsr/{id}","href":"/api-reference/dsr/fetch-a-single-dsr-request-tru-57"}]},{"group":"policies","pages":[{"title":"List Control Loop Policies (TRU-67 Phase 1)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/policies","href":"/api-reference/policies/list-control-loop-policies-tru-67-phase-1"},{"title":"Create a Control Loop Policy (TRU-67 Phase 1)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/policies","href":"/api-reference/policies/create-a-control-loop-policy-tru-67-phase-1"},{"title":"Fetch a single policy (TRU-67 Phase 1)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/policies/{id}","href":"/api-reference/policies/fetch-a-single-policy-tru-67-phase-1"},{"title":"Archive a policy (TRU-67 Phase 1)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/policies/{id}","href":"/api-reference/policies/archive-a-policy-tru-67-phase-1"},{"title":"Update a policy (TRU-67 Phase 1)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/policies/{id}","href":"/api-reference/policies/update-a-policy-tru-67-phase-1"}]},{"group":"saved-filters","pages":[{"title":"List team-shared saved filters (TRU-216)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/saved-filters","href":"/api-reference/saved-filters/list-team-shared-saved-filters-tru-216"},{"title":"Create a saved filter (TRU-216)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/saved-filters","href":"/api-reference/saved-filters/create-a-saved-filter-tru-216"},{"title":"Delete a saved filter (TRU-216)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/saved-filters/{id}","href":"/api-reference/saved-filters/delete-a-saved-filter-tru-216"},{"title":"Update a saved filter (TRU-216)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/saved-filters/{id}","href":"/api-reference/saved-filters/update-a-saved-filter-tru-216"}]},{"group":"feedback","pages":[{"title":"List feedback for the tenant with cursor-based pagination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/feedback","href":"/api-reference/feedback/list-feedback-for-the-tenant-with-cursor-based-pagination"},{"title":"Submit user feedback on a trace","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/feedback","href":"/api-reference/feedback/submit-user-feedback-on-a-trace"}]},{"group":"failures","pages":[{"title":"Group error traces by message prefix and return failure clusters","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/failures/clusters","href":"/api-reference/failures/group-error-traces-by-message-prefix-and-return-failure-clusters"}]},{"group":"evals","pages":[{"title":"List evaluations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval","href":"/api-reference/evals/list-evaluations"},{"title":"Trigger an evaluation run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/eval","href":"/api-reference/evals/trigger-an-evaluation-run"},{"title":"Get evaluation result","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval/{id}","href":"/api-reference/evals/get-evaluation-result"},{"title":"Stream evaluations as CSV or JSONL (sync export)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval/export","href":"/api-reference/evals/stream-evaluations-as-csv-or-jsonl-sync-export"},{"title":"Get time-bucketed eval score averages per metric","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval/trends","href":"/api-reference/evals/get-time-bucketed-eval-score-averages-per-metric"},{"title":"Get score distribution histogram for a metric","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval/histogram","href":"/api-reference/evals/get-score-distribution-histogram-for-a-metric"},{"title":"Compare eval metrics between two time windows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval/compare","href":"/api-reference/evals/compare-eval-metrics-between-two-time-windows"}]},{"group":"eval","pages":[{"title":"List pre-built LLM evaluators available for use","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval-catalog","href":"/api-reference/eval/list-pre-built-llm-evaluators-available-for-use"}]},{"group":"eval-rules","pages":[{"title":"List eval rules for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval-rules","href":"/api-reference/eval-rules/list-eval-rules-for-the-tenant"},{"title":"Create an eval rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/eval-rules","href":"/api-reference/eval-rules/create-an-eval-rule"},{"title":"Delete an eval rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/eval-rules/{id}","href":"/api-reference/eval-rules/delete-an-eval-rule"},{"title":"Update an eval rule (partial update)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/eval-rules/{id}","href":"/api-reference/eval-rules/update-an-eval-rule-partial-update"}]},{"group":"failure-rules","pages":[{"title":"List failure detection rules for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/failure-rules","href":"/api-reference/failure-rules/list-failure-detection-rules-for-the-tenant"},{"title":"Create a failure detection rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/failure-rules","href":"/api-reference/failure-rules/create-a-failure-detection-rule"},{"title":"Get a single failure detection rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/failure-rules/{id}","href":"/api-reference/failure-rules/get-a-single-failure-detection-rule"},{"title":"Delete a failure detection rule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/failure-rules/{id}","href":"/api-reference/failure-rules/delete-a-failure-detection-rule"},{"title":"Update a failure detection rule (partial update)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/failure-rules/{id}","href":"/api-reference/failure-rules/update-a-failure-detection-rule-partial-update"}]},{"group":"control","pages":[{"title":"Execute a control action (retry, fallback model, or prompt modification)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/control/execute","href":"/api-reference/control/execute-a-control-action-retry-fallback-model-or-prompt-modification"},{"title":"List control actions for the tenant","description":null,"deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/actions","href":"/api-reference/control/list-control-actions-for-the-tenant"},{"title":"Get the per-trace remediation diff for a control action","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/actions/{id}/diff","href":"/api-reference/control/get-the-per-trace-remediation-diff-for-a-control-action"},{"title":"List control actions parked for human approval (owner-only)","description":"Returns control actions in the `pending_approval` status. Owner-only;\nAPI-key callers are refused by the auth middleware. See TRU-68.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/actions/pending","href":"/api-reference/control/list-control-actions-parked-for-human-approval-owner-only"},{"title":"Approve a pending_approval control action (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/control/actions/{id}/approve","href":"/api-reference/control/approve-a-pending_approval-control-action-owner-only"},{"title":"Reject a pending_approval control action (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/control/actions/{id}/reject","href":"/api-reference/control/reject-a-pending_approval-control-action-owner-only"},{"title":"Get the tenant's control-loop kill-switch state","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/control/killswitch","href":"/api-reference/control/get-the-tenants-control-loop-kill-switch-state"},{"title":"Enable the control-loop kill-switch (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/control/killswitch/enable","href":"/api-reference/control/enable-the-control-loop-kill-switch-owner-only"},{"title":"Disable the control-loop kill-switch (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/control/killswitch/disable","href":"/api-reference/control/disable-the-control-loop-kill-switch-owner-only"}]},{"group":"prompts","pages":[{"title":"List closed-loop prompt-improvement deployments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/prompts/deployments","href":"/api-reference/prompts/list-closed-loop-prompt-improvement-deployments"},{"title":"Get a single prompt deployment by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/prompts/deployments/{id}","href":"/api-reference/prompts/get-a-single-prompt-deployment-by-id"},{"title":"Approve a prompt deployment for ship (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/prompts/deployments/{id}/approve","href":"/api-reference/prompts/approve-a-prompt-deployment-for-ship-owner-only"},{"title":"Reject a non-terminal prompt deployment (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/prompts/deployments/{id}/reject","href":"/api-reference/prompts/reject-a-non-terminal-prompt-deployment-owner-only"},{"title":"Roll a shipped or monitoring/regressed prompt deployment back (owner-only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/prompts/deployments/{id}/rollback","href":"/api-reference/prompts/roll-a-shipped-or-monitoringregressed-prompt-deployment-back-owner-only"}]},{"group":"apikeys","pages":[{"title":"List API keys for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/apikeys","href":"/api-reference/apikeys/list-api-keys-for-the-tenant"},{"title":"Create an API key (owner or member; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/apikeys","href":"/api-reference/apikeys/create-an-api-key-owner-or-member;-requires-clerk-auth"},{"title":"Revoke an API key (owner only; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/apikeys/{id}","href":"/api-reference/apikeys/revoke-an-api-key-owner-only;-requires-clerk-auth"},{"title":"Rotate an API key (owner or member; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/apikeys/{id}/rotate","href":"/api-reference/apikeys/rotate-an-api-key-owner-or-member;-requires-clerk-auth"}]},{"group":"projects","pages":[{"title":"List projects for the authenticated tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects","href":"/api-reference/projects/list-projects-for-the-authenticated-tenant"},{"title":"Create a new project (owner or member; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects","href":"/api-reference/projects/create-a-new-project-owner-or-member;-requires-clerk-auth"},{"title":"Update a project (rename or adjust retention override)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/projects/{id}","href":"/api-reference/projects/update-a-project-rename-or-adjust-retention-override"},{"title":"Archive a project (owner only; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{id}/archive","href":"/api-reference/projects/archive-a-project-owner-only;-requires-clerk-auth"},{"title":"Unarchive a previously-archived project (owner only; requires Clerk auth)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/projects/{id}/unarchive","href":"/api-reference/projects/unarchive-a-previously-archived-project-owner-only;-requires-clerk-auth"},{"title":"Read a single project-scoped metric (TRU-362)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/projects/{id}/metrics","href":"/api-reference/projects/read-a-single-project-scoped-metric-tru-362"}]},{"group":"datasets","pages":[{"title":"List datasets for the authenticated tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets","href":"/api-reference/datasets/list-datasets-for-the-authenticated-tenant"},{"title":"Create a new dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets","href":"/api-reference/datasets/create-a-new-dataset"},{"title":"Get a single dataset by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}","href":"/api-reference/datasets/get-a-single-dataset-by-id"},{"title":"Delete a dataset and its items","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/datasets/{id}","href":"/api-reference/datasets/delete-a-dataset-and-its-items"},{"title":"List items for a dataset with cursor-based pagination","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/items","href":"/api-reference/datasets/list-items-for-a-dataset-with-cursor-based-pagination"},{"title":"Add an item to a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/items","href":"/api-reference/datasets/add-an-item-to-a-dataset"},{"title":"Stream dataset items as CSV or JSONL (sync export)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/export","href":"/api-reference/datasets/stream-dataset-items-as-csv-or-jsonl-sync-export"},{"title":"Update a dataset item's label","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/datasets/{id}/items/{itemId}","href":"/api-reference/datasets/update-a-dataset-items-label"}]},{"group":"model-routes","pages":[{"title":"List model routes for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/model-routes","href":"/api-reference/model-routes/list-model-routes-for-the-tenant"},{"title":"Create a model route","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/model-routes","href":"/api-reference/model-routes/create-a-model-route"},{"title":"Delete a model route","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/model-routes/{id}","href":"/api-reference/model-routes/delete-a-model-route"},{"title":"Update a model route (partial update)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/model-routes/{id}","href":"/api-reference/model-routes/update-a-model-route-partial-update"}]},{"group":"search","pages":[{"title":"Free-text semantic search over span embeddings (server-side embed)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/search/spans","href":"/api-reference/search/free-text-semantic-search-over-span-embeddings-server-side-embed"},{"title":"Find spans semantically similar to a query vector","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/search/spans","href":"/api-reference/search/find-spans-semantically-similar-to-a-query-vector"}]},{"group":"webhooks","pages":[{"title":"List webhooks for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/webhooks","href":"/api-reference/webhooks/list-webhooks-for-the-tenant"},{"title":"Create a webhook","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/webhooks","href":"/api-reference/webhooks/create-a-webhook"},{"title":"Delete a webhook (owner only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/webhooks/{id}","href":"/api-reference/webhooks/delete-a-webhook-owner-only"},{"title":"Send a synthetic ping event to verify a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/webhooks/{id}/test","href":"/api-reference/webhooks/send-a-synthetic-ping-event-to-verify-a-webhook-endpoint"}]},{"group":"anomaly","pages":[{"title":"List detected anomalies for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/anomalies","href":"/api-reference/anomaly/list-detected-anomalies-for-the-tenant"},{"title":"Get a single anomaly by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/anomalies/{id}","href":"/api-reference/anomaly/get-a-single-anomaly-by-id"}]},{"group":"eval-runs","pages":[{"title":"List eval versions for a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/versions","href":"/api-reference/eval-runs/list-eval-versions-for-a-dataset"},{"title":"Create an eval version for a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/versions","href":"/api-reference/eval-runs/create-an-eval-version-for-a-dataset"},{"title":"List eval runs for a dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/datasets/{id}/runs","href":"/api-reference/eval-runs/list-eval-runs-for-a-dataset"},{"title":"Schedule an eval run against a dataset version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/datasets/{id}/runs","href":"/api-reference/eval-runs/schedule-an-eval-run-against-a-dataset-version"},{"title":"Get eval run status and progress","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval-runs/{id}","href":"/api-reference/eval-runs/get-eval-run-status-and-progress"},{"title":"Export eval run results","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval-runs/{id}/export","href":"/api-reference/eval-runs/export-eval-run-results"},{"title":"Score diff between two eval runs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/eval-runs/{id}/diff","href":"/api-reference/eval-runs/score-diff-between-two-eval-runs"}]},{"group":"eval-keys","pages":[{"title":"List active BYOK keys for premium eval models","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/settings/eval-keys","href":"/api-reference/eval-keys/list-active-byok-keys-for-premium-eval-models"},{"title":"Create or replace the BYOK key for a provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/settings/eval-keys","href":"/api-reference/eval-keys/create-or-replace-the-byok-key-for-a-provider"},{"title":"Revoke the BYOK key for a provider","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/settings/eval-keys/{provider}","href":"/api-reference/eval-keys/revoke-the-byok-key-for-a-provider"}]},{"group":"billing","pages":[{"title":"Create a Stripe Checkout session for a plan upgrade","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/settings/billing/checkout","href":"/api-reference/billing/create-a-stripe-checkout-session-for-a-plan-upgrade"},{"title":"Create a Stripe Billing Portal session","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/settings/billing/portal","href":"/api-reference/billing/create-a-stripe-billing-portal-session"},{"title":"List recent Stripe invoices for the tenant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/settings/invoices","href":"/api-reference/billing/list-recent-stripe-invoices-for-the-tenant"}]},{"group":"ci","pages":[{"title":"Evaluate an eval run against a CI policy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/ci/gate","href":"/api-reference/ci/evaluate-an-eval-run-against-a-ci-policy"}]},{"group":"members","pages":[{"title":"Count active API keys created by a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/members/{id}/key-count","href":"/api-reference/members/count-active-api-keys-created-by-a-member"},{"title":"Remove the authenticated user from the current organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/members/me","href":"/api-reference/members/remove-the-authenticated-user-from-the-current-organization"}]}]}]}]},"title":"Get the per-trace remediation diff for a control action - TruLayer","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}