Internal callback, not a client API. When a pipeline’s REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {"error": ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint’s timeoutMs.
Report a failure instead of data; the run stops with this message
Response
Accepted (OK, text/plain)
The response is of type string.
Example:
"OK"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/schema.json","name":"Datris","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/datrisai/CNnWCgTgbz42nBnr/logo/datris-full-logo.png?fit=max\u0026auto=format\u0026n=CNnWCgTgbz42nBnr\u0026q=85\u0026s=f0e98fd8d344eb609f0b3883dfb274c9","dark":"https://mintcdn.com/datrisai/CNnWCgTgbz42nBnr/logo/datris-full-logo.png?fit=max\u0026auto=format\u0026n=CNnWCgTgbz42nBnr\u0026q=85\u0026s=f0e98fd8d344eb609f0b3883dfb274c9"},"favicon":"https://mintcdn.com/datrisai/Wy-t-WVKtfNZR2uU/favicon.svg?fit=max\u0026auto=format\u0026n=Wy-t-WVKtfNZR2uU\u0026q=85\u0026s=8e646366c64e42dc25798dc7be29431d","styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"datrisai","hasAudioNarration":false,"actualSubdomain":"datrisai","customDomains":["docs.datris.ai"],"gitSource":{"type":"github","owner":"datris","repo":"datris-platform-oss","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af0f2f719e45f289c57d11b","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":166},{"language":"default","tag":"Guides","count":70},{"language":"default","tag":"Taps","count":27},{"language":"default","tag":"Pipelines","count":26},{"language":"default","tag":"Destinations","count":18},{"language":"default","tag":"API Documentation","count":12},{"language":"default","tag":"Auth","count":10},{"language":"default","tag":"Metadata","count":10},{"language":"default","tag":"Configuration","count":8},{"language":"default","tag":"Versions","count":8}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/internal-callbacks/async-rest-endpoint-callback-internal","slug":"/api-reference/internal-callbacks/async-rest-endpoint-callback-internal","pageMetadata":{"title":"Async REST endpoint callback (internal)","description":"Internal callback, not a client API. When a pipeline's REST preprocessor or REST destination is configured with `async: true`, Datris POSTs the payload to that endpoint (carrying `pipelineToken`, `pipelineName` and `data`) and then blocks the run until the endpoint calls back here with the same `pipelineToken`. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (`data.header` / `data.rows`, or `{\"error\": ...}` to fail the run); for a destination only an `error` field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint's `timeoutMs`.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/restendpoint/callback","href":"/api-reference/internal-callbacks/async-rest-endpoint-callback-internal","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Internal callback, not a client API. When a pipeline’s REST preprocessor or REST destination is configured with \", _jsx(_components.code, {\n children: \"async: true\"\n }), \", Datris POSTs the payload to that endpoint (carrying \", _jsx(_components.code, {\n children: \"pipelineToken\"\n }), \", \", _jsx(_components.code, {\n children: \"pipelineName\"\n }), \" and \", _jsx(_components.code, {\n children: \"data\"\n }), \") and then blocks the run until the endpoint calls back here with the same \", _jsx(_components.code, {\n children: \"pipelineToken\"\n }), \". The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (\", _jsx(_components.code, {\n children: \"data.header\"\n }), \" / \", _jsx(_components.code, {\n children: \"data.rows\"\n }), \", or \", _jsx(_components.code, {\n children: \"{\\\"error\\\": ...}\"\n }), \" to fail the run); for a destination only an \", _jsx(_components.code, {\n children: \"error\"\n }), \" field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint’s \", _jsx(_components.code, {\n children: \"timeoutMs\"\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":"Async REST endpoint callback (internal)","description":"Internal callback, not a client API. When a pipeline's REST preprocessor or REST destination is configured with `async: true`, Datris POSTs the payload to that endpoint (carrying `pipelineToken`, `pipelineName` and `data`) and then blocks the run until the endpoint calls back here with the same `pipelineToken`. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (`data.header` / `data.rows`, or `{\"error\": ...}` to fail the run); for a destination only an `error` field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint's `timeoutMs`.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/restendpoint/callback","href":"/api-reference/internal-callbacks/async-rest-endpoint-callback-internal","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Internal callbacks"],"summary":"Async REST endpoint callback (internal)","description":"Internal callback, not a client API. When a pipeline's REST preprocessor or REST destination is configured with `async: true`, Datris POSTs the payload to that endpoint (carrying `pipelineToken`, `pipelineName` and `data`) and then blocks the run until the endpoint calls back here with the same `pipelineToken`. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (`data.header` / `data.rows`, or `{\"error\": ...}` to fail the run); for a destination only an `error` field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint's `timeoutMs`.","requestBody":"d77d57d2-ffa1-456a-b768-b059dbf54b97","responses":{"200":"fa7c9be1-de1b-48aa-924e-3507a5c45599","400":"e5056171-cd79-4625-9636-47cc7c77d81a"},"method":"post","type":"path","servers":["262ccf5c-4ea5-49a8-9a83-95e3892a9713"],"security":["d4177030-f4f5-461b-9b11-0d5ba968f158"],"path":"/api/v1/restendpoint/callback","baseUrlOptions":["http://localhost:8080"],"title":"Async REST endpoint callback (internal)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["pipelineToken","pipelineName"],"properties":{"pipelineToken":{"type":"string","description":"The token Datris sent in the outbound request; identifies the waiting run","isRequired":true,"uniqueKey":"pipelineToken","typeLabel":"string"},"pipelineName":{"type":"string","description":"The pipeline name Datris sent in the outbound request","isRequired":true,"uniqueKey":"pipelineName","typeLabel":"string"},"data":{"type":"object","description":"Preprocessor role — the processed payload, same shape as the outbound `data`","properties":{"header":{"type":"array","items":{"type":"string","uniqueKey":"data.header.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.header","typeLabel":"string[]"},"rows":{"type":"array","items":{"type":"string","uniqueKey":"data.rows.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.rows","typeLabel":"string[]"}},"uniqueKey":"data","typeLabel":"object"},"error":{"type":"string","description":"Report a failure instead of data; the run stops with this message","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"pipelineToken":"\u003cstring>","pipelineName":"\u003cstring>","data":{"header":["\u003cstring>"],"rows":["\u003cstring>"]},"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"fa7c9be1-de1b-48aa-924e-3507a5c45599":{"description":"Accepted (`OK`, text/plain)","content":{"text/plain":{"schema":{"type":"string","example":"OK","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"OK"}},"exampleType":"generated"}},"exampleType":"generated"},"e5056171-cd79-4625-9636-47cc7c77d81a":{"description":"`Missing pipelineToken` or `Missing pipelineName` (text/plain)","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"d4177030-f4f5-461b-9b11-0d5ba968f158":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Optional API key for authentication (enabled via application.yaml)","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"262ccf5c-4ea5-49a8-9a83-95e3892a9713":{"url":"http://localhost:8080","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Optional API key for authentication (enabled via application.yaml)","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"Optional API key for authentication (enabled via application.yaml)","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"x-api-key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"datrisai","siteName":"Datris","title":"Async REST endpoint callback (internal) - Datris","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-08T22:09:02.758Z","originalFileLocation":"api-reference/internal-callbacks/async-rest-endpoint-callback-internal.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=\"Internal callback, not a client API. When a pipeline\u0026#x27;s REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {\u0026quot;error\u0026quot;: ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint\u0026#x27;s timeoutMs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Datris\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_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/datrisai/Ct9Fhmh_y5jENZKB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Async REST endpoint callback (internal) - Datris\">\u003cmeta data-mint-head property=\"og:description\" content=\"Internal callback, not a client API. When a pipeline\u0026#x27;s REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {\u0026quot;error\u0026quot;: ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint\u0026#x27;s timeoutMs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Datris\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://datrisai.mintlify.site/_mintlify/api/og/v2?division=Internal+callbacks\u0026amp;title=Async+REST+endpoint+callback+%28internal%29\u0026amp;description=Internal+callback%2C+not+a+client+API.+When+a+pipeline%27s+REST+preprocessor+or+REST+destination+is+configured+with+%60async%3A+true%60%2C+Datris+POSTs+the+payload+to+that+\u0026amp;theme=f6d702702a5d4d8e3086208d\u0026amp;signature=bbde101efe05138797608321dbfa931e250969654d1dacb241d74d6ee7d232ef\">\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=\"Async REST endpoint callback (internal) - Datris\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Internal callback, not a client API. When a pipeline\u0026#x27;s REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {\u0026quot;error\u0026quot;: ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint\u0026#x27;s timeoutMs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://datrisai.mintlify.site/_mintlify/api/og/v2?division=Internal+callbacks\u0026amp;title=Async+REST+endpoint+callback+%28internal%29\u0026amp;description=Internal+callback%2C+not+a+client+API.+When+a+pipeline%27s+REST+preprocessor+or+REST+destination+is+configured+with+%60async%3A+true%60%2C+Datris+POSTs+the+payload+to+that+\u0026amp;theme=f6d702702a5d4d8e3086208d\u0026amp;signature=bbde101efe05138797608321dbfa931e250969654d1dacb241d74d6ee7d232ef\">\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/datrisai/Ct9Fhmh_y5jENZKB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Datris\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/internal-callbacks/async-rest-endpoint-callback-internal.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.datris.ai/#organization\",\"name\":\"Datris\",\"url\":\"https://docs.datris.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/datrisai/CNnWCgTgbz42nBnr/logo/datris-full-logo.png?fit=max\u0026auto=format\u0026n=CNnWCgTgbz42nBnr\u0026q=85\u0026s=f0e98fd8d344eb609f0b3883dfb274c9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.datris.ai#website\",\"name\":\"Datris\",\"url\":\"https://docs.datris.ai\",\"publisher\":{\"@id\":\"https://docs.datris.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal#webpage\",\"url\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal\",\"name\":\"Async REST endpoint callback (internal)\",\"description\":\"Internal callback, not a client API. When a pipeline's REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {\\\"error\\\": ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint's timeoutMs.\",\"dateModified\":\"2026-11-08T22:09:02.758Z\",\"isPartOf\":{\"@id\":\"https://docs.datris.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Datris\",\"item\":\"https://docs.datris.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Async REST endpoint callback (internal)\",\"item\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal#apireference\",\"headline\":\"Async REST endpoint callback (internal)\",\"name\":\"Async REST endpoint callback (internal)\",\"description\":\"Internal callback, not a client API. When a pipeline's REST preprocessor or REST destination is configured with async: true, Datris POSTs the payload to that endpoint (carrying pipelineToken, pipelineName and data) and then blocks the run until the endpoint calls back here with the same pipelineToken. The callback body is handed to the waiting run verbatim: for a preprocessor it is parsed like a synchronous response (data.header / data.rows, or {\\\"error\\\": ...} to fail the run); for a destination only an error field is inspected. A callback whose token has no waiting run is accepted and discarded. The run fails with a timeout if no callback arrives within the endpoint's timeoutMs.\",\"url\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal\",\"mainEntityOfPage\":{\"@id\":\"https://docs.datris.ai/api-reference/internal-callbacks/async-rest-endpoint-callback-internal#webpage\"},\"dateModified\":\"2026-11-08T22:09:02.758Z\",\"publisher\":{\"@id\":\"https://docs.datris.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.datris.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Datris\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Datris","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"MCP Reference","pages":[{"title":"MCP Reference","href":"/install-for-agents"}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"Data Ingestion API","href":"/api-reference/ingestion-api"},{"title":"Query API","href":"/api-reference/query-api"},{"title":"Pipeline Configuration API","href":"/api-reference/pipeline-api"},{"title":"Search API","href":"/api-reference/search-api"},{"title":"Metadata API","href":"/api-reference/metadata-api"},{"title":"AI Schema Generation API","href":"/api-reference/schema-generation-api"},{"title":"Configuration API","href":"/api-reference/config-api"},{"title":"Secrets API","href":"/api-reference/secrets-api"},{"title":"Pipeline Status API","href":"/api-reference/status-api"},{"title":"Health Check API","href":"/api-reference/health-api"},{"title":"Version API","href":"/api-reference/version-api"},{"title":"Taps API","href":"/api-reference/taps-api"}]},{"group":"Pipelines","pages":[{"title":"Get a pipeline configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline","href":"/api-reference/pipelines/get-a-pipeline-configuration"},{"title":"Create or update a pipeline configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline","href":"/api-reference/pipelines/create-or-update-a-pipeline-configuration"},{"title":"Delete a pipeline configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/pipeline","href":"/api-reference/pipelines/delete-a-pipeline-configuration"},{"title":"Rename a catalog","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v1/catalog/{name}","href":"/api-reference/pipelines/rename-a-catalog"},{"title":"Delete a catalog (detach or cascade)","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/catalog/{name}","href":"/api-reference/pipelines/delete-a-catalog-detach-or-cascade"},{"title":"Export a catalog as a zip backup","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/catalog/{name}/export","href":"/api-reference/pipelines/export-a-catalog-as-a-zip-backup"},{"title":"Enable order of a catalog's taps","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/catalog/{name}/enable-order","href":"/api-reference/pipelines/enable-order-of-a-catalogs-taps"},{"title":"Progress of a catalog's ordered enable","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/catalog/{name}/enable-ordered","href":"/api-reference/pipelines/progress-of-a-catalogs-ordered-enable"},{"title":"Enable a catalog's taps in dependency order","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/catalog/{name}/enable-ordered","href":"/api-reference/pipelines/enable-a-catalogs-taps-in-dependency-order"},{"title":"Cancel a catalog's ordered enable","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/catalog/{name}/enable-ordered","href":"/api-reference/pipelines/cancel-a-catalogs-ordered-enable"},{"title":"Restore a catalog from a zip backup","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/catalog/{name}/restore","href":"/api-reference/pipelines/restore-a-catalog-from-a-zip-backup"},{"title":"List all pipeline configurations","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines","href":"/api-reference/pipelines/list-all-pipeline-configurations"},{"title":"Unity Catalog sync state for a pipeline","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines/{name}/unity-catalog","href":"/api-reference/pipelines/unity-catalog-sync-state-for-a-pipeline"},{"title":"Stored CodeGen scripts for a pipeline","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines/{name}/codegen-scripts","href":"/api-reference/pipelines/stored-codegen-scripts-for-a-pipeline"},{"title":"Force a new CodeGen script","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipelines/{name}/codegen-scripts/{kind}/regenerate","href":"/api-reference/pipelines/force-a-new-codegen-script"},{"title":"Adopt a CodeGen script edited in the code repository","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipelines/{name}/codegen-scripts/{kind}/pull","href":"/api-reference/pipelines/adopt-a-codegen-script-edited-in-the-code-repository"},{"title":"Version history of a CodeGen script","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines/{name}/codegen-scripts/{kind}/versions","href":"/api-reference/pipelines/version-history-of-a-codegen-script"},{"title":"One version of a CodeGen script, with its text","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines/{name}/codegen-scripts/{kind}/versions/{version}","href":"/api-reference/pipelines/one-version-of-a-codegen-script-with-its-text"},{"title":"Line diff of two CodeGen script versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipelines/{name}/codegen-scripts/{kind}/versions/{version}/diff","href":"/api-reference/pipelines/line-diff-of-two-codegen-script-versions"},{"title":"Restore a CodeGen script version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipelines/{name}/codegen-scripts/{kind}/versions/{version}/restore","href":"/api-reference/pipelines/restore-a-codegen-script-version"},{"title":"Propose destination column types from landed data","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/dest-types","href":"/api-reference/pipelines/propose-destination-column-types-from-landed-data"},{"title":"Apply destination column types","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/dest-types","href":"/api-reference/pipelines/apply-destination-column-types"},{"title":"Suggest field protection from field names and types","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/protect/suggest","href":"/api-reference/pipelines/suggest-field-protection-from-field-names-and-types"},{"title":"Propose field protection from a preset (HIPAA Safe Harbor)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/protect/preset","href":"/api-reference/pipelines/propose-field-protection-from-a-preset-hipaa-safe-harbor"},{"title":"Reveal values of an encrypt-protected field","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/protect/reveal","href":"/api-reference/pipelines/reveal-values-of-an-encrypt-protected-field"},{"title":"Rotate the field protection encryption key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/protect/keys/rotate","href":"/api-reference/pipelines/rotate-the-field-protection-encryption-key"}]},{"group":"Ingestion","pages":[{"title":"Upload a file for processing","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/upload","href":"/api-reference/ingestion/upload-a-file-for-processing"}]},{"group":"AI","pages":[{"title":"AI schema generation","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/generate","href":"/api-reference/ai/ai-schema-generation"},{"title":"AI data profiling","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/profile","href":"/api-reference/ai/ai-data-profiling"},{"title":"AI-powered question answering","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/ai/answer","href":"/api-reference/ai/ai-powered-question-answering"},{"title":"Get the AI model catalog","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/ai/model-catalog","href":"/api-reference/ai/get-the-ai-model-catalog"},{"title":"Discover invokable models for a provider","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/ai/models","href":"/api-reference/ai/discover-invokable-models-for-a-provider"}]},{"group":"Status","pages":[{"title":"Get job status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/status","href":"/api-reference/status/get-job-status"},{"title":"Clear all ingestion history","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/pipeline/status","href":"/api-reference/status/clear-all-ingestion-history"},{"title":"Get a Live Read (scratch) pipeline's result","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/result","href":"/api-reference/status/get-a-live-read-scratch-pipelines-result"},{"title":"Kill a running job","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/job/kill","href":"/api-reference/status/kill-a-running-job"},{"title":"Get server version","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/version","href":"/api-reference/status/get-server-version"}]},{"group":"Query","pages":[{"title":"Query PostgreSQL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/postgres","href":"/api-reference/query/query-postgresql"},{"title":"Query MongoDB","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/mongodb","href":"/api-reference/query/query-mongodb"},{"title":"Query object store","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/objectstore","href":"/api-reference/query/query-object-store"},{"title":"Query Snowflake","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/snowflake","href":"/api-reference/query/query-snowflake"},{"title":"Query SQL Server","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/sqlserver","href":"/api-reference/query/query-sql-server"},{"title":"Query Databricks","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/databricks","href":"/api-reference/query/query-databricks"},{"title":"Natural-language query (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/query/natural","href":"/api-reference/query/natural-language-query-ai"}]},{"group":"Search","pages":[{"title":"Semantic search (all vector stores)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/search/{store}","href":"/api-reference/search/semantic-search-all-vector-stores"}]},{"group":"Health","pages":[{"title":"Server-side doctor report","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/doctor","href":"/api-reference/health/server-side-doctor-report"},{"title":"Check backend service health","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/health/services","href":"/api-reference/health/check-backend-service-health"},{"title":"List live, reachable vector stores","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/vector-stores/available","href":"/api-reference/health/list-live-reachable-vector-stores"},{"title":"List usable structured destinations","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/destinations/available","href":"/api-reference/health/list-usable-structured-destinations"}]},{"group":"Metadata","pages":[{"title":"List PostgreSQL databases","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/postgres/databases","href":"/api-reference/metadata/list-postgresql-databases"},{"title":"List PostgreSQL schemas","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/postgres/schemas","href":"/api-reference/metadata/list-postgresql-schemas"},{"title":"List PostgreSQL tables","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/postgres/tables","href":"/api-reference/metadata/list-postgresql-tables"},{"title":"List table columns","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/postgres/columns","href":"/api-reference/metadata/list-table-columns"},{"title":"List MongoDB databases","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/mongodb/databases","href":"/api-reference/metadata/list-mongodb-databases"},{"title":"List MongoDB collections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/mongodb/collections","href":"/api-reference/metadata/list-mongodb-collections"},{"title":"List Qdrant collections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/qdrant/collections","href":"/api-reference/metadata/list-qdrant-collections"},{"title":"List Weaviate classes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/weaviate/classes","href":"/api-reference/metadata/list-weaviate-classes"},{"title":"List Milvus collections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/milvus/collections","href":"/api-reference/metadata/list-milvus-collections"},{"title":"List Chroma collections","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/metadata/chroma/collections","href":"/api-reference/metadata/list-chroma-collections"}]},{"group":"Configuration","pages":[{"title":"Upload a configuration file","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/config/upload","href":"/api-reference/configuration/upload-a-configuration-file"},{"title":"AI-generate a validation schema","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/config/generate-schema","href":"/api-reference/configuration/ai-generate-a-validation-schema"}]},{"group":"Secrets","pages":[{"title":"List all secrets","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/secrets","href":"/api-reference/secrets/list-all-secrets"},{"title":"Get secret details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/secrets/{name}","href":"/api-reference/secrets/get-secret-details"},{"title":"Create or update a secret","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v1/secrets/{name}","href":"/api-reference/secrets/create-or-update-a-secret"},{"title":"Delete a secret","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/secrets/{name}","href":"/api-reference/secrets/delete-a-secret"}]},{"group":"Taps","pages":[{"title":"List all taps","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/taps","href":"/api-reference/taps/list-all-taps"},{"title":"Get a tap configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap","href":"/api-reference/taps/get-a-tap-configuration"},{"title":"Create or update a tap","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap","href":"/api-reference/taps/create-or-update-a-tap"},{"title":"Delete a tap","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/tap","href":"/api-reference/taps/delete-a-tap"},{"title":"Get tap run history","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/logs","href":"/api-reference/taps/get-tap-run-history"},{"title":"Get run history across all taps","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/logs/all","href":"/api-reference/taps/get-run-history-across-all-taps"},{"title":"Brainstorm chat (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/brainstorm","href":"/api-reference/taps/brainstorm-chat-ai"},{"title":"Generate tap script (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/generate","href":"/api-reference/taps/generate-tap-script-ai"},{"title":"Live progress of an in-flight script generation","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/generate/status","href":"/api-reference/taps/live-progress-of-an-in-flight-script-generation"},{"title":"Fix tap script (AI diagnosis)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/fix","href":"/api-reference/taps/fix-tap-script-ai-diagnosis"},{"title":"Store a tap script","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/script","href":"/api-reference/taps/store-a-tap-script"},{"title":"Pull a repo-backed tap script from its branch head","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/script/pull","href":"/api-reference/taps/pull-a-repo-backed-tap-script-from-its-branch-head"},{"title":"Move a tap script between storage backends","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/migrate-storage","href":"/api-reference/taps/move-a-tap-script-between-storage-backends"},{"title":"Review tap script (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/review","href":"/api-reference/taps/review-tap-script-ai"},{"title":"Optimize tap script (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/optimize","href":"/api-reference/taps/optimize-tap-script-ai"},{"title":"Test a tap","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/test","href":"/api-reference/taps/test-a-tap"},{"title":"Run a tap","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/run","href":"/api-reference/taps/run-a-tap"},{"title":"Generate CRON expression (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/cron","href":"/api-reference/taps/generate-cron-expression-ai"},{"title":"Read a document tap's ledger","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/ledger","href":"/api-reference/taps/read-a-document-taps-ledger"},{"title":"Clear the ledger (force re-scan) or delete one entry (force re-process)","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/tap/ledger","href":"/api-reference/taps/clear-the-ledger-force-re-scan-or-delete-one-entry-force-re-process"},{"title":"Read a tap's incremental-sync state","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/state","href":"/api-reference/taps/read-a-taps-incremental-sync-state"},{"title":"Overwrite a tap's incremental-sync state","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/state","href":"/api-reference/taps/overwrite-a-taps-incremental-sync-state"},{"title":"Reset a tap's incremental-sync state","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/tap/state","href":"/api-reference/taps/reset-a-taps-incremental-sync-state"}]},{"group":"Code repository","pages":[{"title":"Get the tenant code repository configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/code-repo","href":"/api-reference/code-repository/get-the-tenant-code-repository-configuration"},{"title":"Save the tenant code repository configuration","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v1/code-repo","href":"/api-reference/code-repository/save-the-tenant-code-repository-configuration"},{"title":"Test a code repository connection","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/code-repo/test","href":"/api-reference/code-repository/test-a-code-repository-connection"}]},{"group":"Versions","pages":[{"title":"List tap definition versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/versions","href":"/api-reference/versions/list-tap-definition-versions"},{"title":"Get a tap version snapshot","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/version","href":"/api-reference/versions/get-a-tap-version-snapshot"},{"title":"Diff two tap versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap/version/diff","href":"/api-reference/versions/diff-two-tap-versions"},{"title":"Restore a tap version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap/version/restore","href":"/api-reference/versions/restore-a-tap-version"},{"title":"List pipeline definition versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/versions","href":"/api-reference/versions/list-pipeline-definition-versions"},{"title":"Get a pipeline version snapshot","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/version","href":"/api-reference/versions/get-a-pipeline-version-snapshot"},{"title":"Diff two pipeline versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/pipeline/version/diff","href":"/api-reference/versions/diff-two-pipeline-versions"},{"title":"Restore a pipeline version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/pipeline/version/restore","href":"/api-reference/versions/restore-a-pipeline-version"}]},{"group":"Auth","pages":[{"title":"Log in","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/auth/login","href":"/api-reference/auth/log-in"},{"title":"Start single sign-on (OIDC)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/auth/oidc/login","href":"/api-reference/auth/start-single-sign-on-oidc"},{"title":"Single sign-on (OIDC) callback","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/auth/oidc/callback","href":"/api-reference/auth/single-sign-on-oidc-callback"},{"title":"Log out","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/auth/logout","href":"/api-reference/auth/log-out"},{"title":"Get the current user","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/auth/me","href":"/api-reference/auth/get-the-current-user"},{"title":"Change the current user's password","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/auth/change-password","href":"/api-reference/auth/change-the-current-users-password"},{"title":"List users (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/auth/users","href":"/api-reference/auth/list-users-admin"},{"title":"Create a user (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/auth/users","href":"/api-reference/auth/create-a-user-admin"},{"title":"Delete a user (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/auth/users/{username}","href":"/api-reference/auth/delete-a-user-admin"},{"title":"Update a user (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /api/v1/auth/users/{username}","href":"/api-reference/auth/update-a-user-admin"}]},{"group":"Agent Policy","pages":[{"title":"Read the agent policy","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/policy","href":"/api-reference/agent-policy/read-the-agent-policy"},{"title":"Replace the agent policy (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml put /api/v1/policy","href":"/api-reference/agent-policy/replace-the-agent-policy-admin"},{"title":"List queued agent actions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/approvals","href":"/api-reference/agent-policy/list-queued-agent-actions"},{"title":"Read one queued action","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/approvals/{id}","href":"/api-reference/agent-policy/read-one-queued-action"},{"title":"Approve a queued action (admin / editor)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/approvals/{id}/approve","href":"/api-reference/agent-policy/approve-a-queued-action-admin-editor"},{"title":"Reject a queued action (admin / editor)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/approvals/{id}/reject","href":"/api-reference/agent-policy/reject-a-queued-action-admin-editor"}]},{"group":"Recovery Agent","pages":[{"title":"List recovery-agent incidents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/incidents","href":"/api-reference/recovery-agent/list-recovery-agent-incidents"},{"title":"Read one incident","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/incidents/{id}","href":"/api-reference/recovery-agent/read-one-incident"},{"title":"Read one incident's evidence","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/incidents/{id}/evidence","href":"/api-reference/recovery-agent/read-one-incidents-evidence"},{"title":"Abandon an open incident (admin / editor)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/incidents/{id}/abandon","href":"/api-reference/recovery-agent/abandon-an-open-incident-admin-editor"},{"title":"Proceed past a needs-human scratch verdict (admin / editor)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/incidents/{id}/proceed","href":"/api-reference/recovery-agent/proceed-past-a-needs-human-scratch-verdict-admin-editor"},{"title":"Server-side Activity signals","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/activity/signals","href":"/api-reference/recovery-agent/server-side-activity-signals"}]},{"group":"Audit Log","pages":[{"title":"Query the audit log (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/audit-log","href":"/api-reference/audit-log/query-the-audit-log-admin"},{"title":"Audit log filter values (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/audit-log/facets","href":"/api-reference/audit-log/audit-log-filter-values-admin"},{"title":"Audit log operational status (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/audit-log/status","href":"/api-reference/audit-log/audit-log-operational-status-admin"},{"title":"Export the audit log as CSV (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/audit-log/export","href":"/api-reference/audit-log/export-the-audit-log-as-csv-admin"}]},{"group":"API Keys","pages":[{"title":"List API keys (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/keys","href":"/api-reference/api-keys/list-api-keys-admin"},{"title":"Issue a new API key (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/keys","href":"/api-reference/api-keys/issue-a-new-api-key-admin"},{"title":"Revoke an API key (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/keys/{label}","href":"/api-reference/api-keys/revoke-an-api-key-admin"},{"title":"Rotate an API key (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/keys/{label}/rotate","href":"/api-reference/api-keys/rotate-an-api-key-admin"},{"title":"Capability catalog (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/keys/capabilities/catalog","href":"/api-reference/api-keys/capability-catalog-admin"},{"title":"Capability templates (admin)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/keys/templates","href":"/api-reference/api-keys/capability-templates-admin"}]},{"group":"Assistant","pages":[{"title":"Initialize the Assistant","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/assistant/init","href":"/api-reference/assistant/initialize-the-assistant"},{"title":"Assistant chat (SSE)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/assistant/chat","href":"/api-reference/assistant/assistant-chat-sse"},{"title":"Stage a chat attachment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/assistant/attachment","href":"/api-reference/assistant/stage-a-chat-attachment"}]},{"group":"Chat","pages":[{"title":"Ops chat (SSE)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/ops-chat/chat","href":"/api-reference/chat/ops-chat-sse"},{"title":"Search chat (SSE)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/search-chat/chat","href":"/api-reference/chat/search-chat-sse"},{"title":"Catalog chat (SSE)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/catalog-chat/chat","href":"/api-reference/chat/catalog-chat-sse"},{"title":"Configuration chat (SSE)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/config-chat/chat","href":"/api-reference/chat/configuration-chat-sse"}]},{"group":"MCP","pages":[{"title":"Get MCP server activity","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/mcp/activity","href":"/api-reference/mcp/get-mcp-server-activity"},{"title":"Clear MCP activity history","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/mcp/activity","href":"/api-reference/mcp/clear-mcp-activity-history"},{"title":"MCP tools the calling key may use","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/mcp/tools","href":"/api-reference/mcp/mcp-tools-the-calling-key-may-use"}]},{"group":"Tap Prompts","pages":[{"title":"List tap prompt fragments","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap-prompts","href":"/api-reference/tap-prompts/list-tap-prompt-fragments"},{"title":"Create or update a tap prompt fragment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap-prompts","href":"/api-reference/tap-prompts/create-or-update-a-tap-prompt-fragment"},{"title":"Get a tap prompt fragment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/tap-prompts/{key}","href":"/api-reference/tap-prompts/get-a-tap-prompt-fragment"},{"title":"Delete a tap prompt fragment","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /api/v1/tap-prompts/{key}","href":"/api-reference/tap-prompts/delete-a-tap-prompt-fragment"},{"title":"Suggest fragment content (AI)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/tap-prompts/suggest","href":"/api-reference/tap-prompts/suggest-fragment-content-ai"}]},{"group":"Provenance","pages":[{"title":"Resolve a stamped run id to its origin","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/provenance","href":"/api-reference/provenance/resolve-a-stamped-run-id-to-its-origin"},{"title":"The whole lineage graph","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/lineage","href":"/api-reference/provenance/the-whole-lineage-graph"},{"title":"One node's lineage neighborhood","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/lineage/{nodeType}/{name}","href":"/api-reference/provenance/one-nodes-lineage-neighborhood"},{"title":"Column-level lineage for one pipeline definition","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/lineage/columns/{pipeline}","href":"/api-reference/provenance/column-level-lineage-for-one-pipeline-definition"},{"title":"Find datasets by meaning (discovery, not execution)","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/catalog/find","href":"/api-reference/provenance/find-datasets-by-meaning-discovery-not-execution"},{"title":"Browse Unity Catalog with a Databricks Platform secret","description":"Read-only walk of what a Databricks Platform secret can see, one level per call: no `catalog` lists catalogs; `catalog` lists schemas; `catalog` + `schema` lists tables (tables tagged `datris_pipeline` carry `datrisPipeline`); adding `table` returns columns (name, type, comment) and tags. Catalog and schema listings are cached for 5 minutes per secret. Requires `metadata:read` plus read access to the named secret. Every call is audit-logged as `unity-catalog` / `browse`. The SQL warehouse is the `warehouse` param, else the secret's optional `warehouse` field (aliases `httpPath`, `http_path`, `DATABRICKS_WAREHOUSE`), else the warehouse of the first Databricks pipeline using the secret.","deprecated":null,"version":null,"openapi":"/openapi.yaml get /api/v1/unity-catalog/browse","href":"/api-reference/provenance/browse-unity-catalog-with-a-databricks-platform-secret"}]},{"group":"Internal callbacks","pages":[{"title":"Async REST endpoint callback (internal)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /api/v1/restendpoint/callback","href":"/api-reference/internal-callbacks/async-rest-endpoint-callback-internal"},{"title":"MinIO bucket notification webhook (internal)","description":"Internal callback, not a client API. MinIO's `notify_webhook` target posts an S3-style bucket event here when an object lands; Datris enqueues the event for the file notifier, which starts ingestion, and writes one collapsed `ingest-trigger` audit record per bucket per minute. The path is outside `/api/**`, so the API-key, capability and session interceptors do not apply; instead the request must carry `Authorization: Bearer \u003cMINIO_WEBHOOK_TOKEN>` (compared in constant time). When `MINIO_WEBHOOK_TOKEN` is unset the endpoint still accepts events but logs a warning on every call — set the token (and MinIO's matching `auth_token`) in any reachable deployment. Under `AUDIT_LOG_STRICT`, while the audit log is not accepting entries the event is refused with 503 + `Retry-After: 5` so MinIO redelivers it.","deprecated":null,"version":null,"openapi":"/openapi.yaml post /minio-events","href":"/api-reference/internal-callbacks/minio-bucket-notification-webhook-internal"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Async REST endpoint callback (internal) - Datris","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}