Reducto on-premise should run behind your private network boundary and should be called only by trusted services. Authentication protects access to the deployment, but Reducto does not provide per-end-user authorization inside a single on-premise tenant. Review the on-prem security model before exposing Reducto to additional services or networks.Reducto can read one or more tokens used for authenticating API calls from a file. On Kubernetes, a Secret can be mounted as a file in the http Pod - when this Secret is updated, Kubernetes automatically updates the mounted file using an eventually-consistent approach, allowing Reducto to reload the new value without requiring a restart.Multiple API keys can be specified by placing each key on a separate line. This enables progressive secret rotation: add the new key, roll your clients over, then remove the old key, all without downtime.
Enable API authentication for production on-premise deployments. If you need different permissions for different users, applications, or business units, enforce those permissions in your gateway or run separate Reducto deployments.
When enabled, Reducto reads the authentication secret from a mounted file specified by the AUTH_SECRET_PATH environment variable. This provides better security isolation and follows Kubernetes best practices for secret management.
Do not expose Reducto directly to the public internet. Put the API behind an internal load balancer, private ingress, service mesh, or API gateway that matches your organization’s access policy.Restrict access to:
Reducto API endpoints, including /job, /jobs, /upload, /cancel, /configure_webhook, and billing export endpoints
Metrics and Prometheus endpoints
PostgreSQL, Redis, object storage, model services, and observability UIs
If users or browser clients need to initiate work, route them through your own application backend. That backend should authenticate the user, authorize the workflow, and then call Reducto as a trusted service.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Reducto","colors":{"primary":"#5c0c5c","light":"#c77dba","dark":"#5c0c5c"},"logo":{"light":"https://cdn.reducto.ai/logo.svg","dark":"https://cdn.reducto.ai/logo-dark.svg"},"favicon":"https://mintcdn.com/reducto/7owl8-bq0hdh9XB8/favicon.ico?fit=max\u0026auto=format\u0026n=7owl8-bq0hdh9XB8\u0026q=85\u0026s=90372b27ca6d42c4f6192cbba673afb5","api":{"examples":{"languages":["python","javascript","go"]}},"appearance":{"default":"light"},"navbar":{"links":[{"href":"https://reducto.ai/?utm_source=docs\u0026utm_medium=referral\u0026utm_campaign=docs_product_bridge\u0026utm_content=navbar_product","label":"Product"},{"href":"https://reducto.ai/blog","label":"Blog"}],"primary":{"type":"button","label":"Log In","href":"https://studio.reducto.ai/"}},"footer":{"socials":{"x":"https://x.com/reductoai","linkedin":"https://www.linkedin.com/company/reducto-ai"},"links":[{"header":"Product","items":[{"label":"Homepage","href":"https://reducto.ai/"},{"label":"Pricing","href":"https://reducto.ai/pricing"},{"label":"Playground","href":"https://studio.reducto.ai/"}]},{"header":"Company","items":[{"label":"Careers","href":"https://reducto.ai/careers"},{"label":"Blog","href":"https://reducto.ai/blog"},{"label":"Support","href":"mailto:support@Reducto.ai"}]},{"header":"Legal","items":[{"label":"Privacy Policy","href":"https://reducto.ai/privacy"},{"label":"Terms of Service","href":"https://reducto.ai/terms"}]}]},"fonts":{"heading":{"family":"Reducto Sans Bold","source":"https://cdn.reducto.ai/fonts/ReductoSansBold.woff2","format":"woff2"},"body":{"family":"Reducto Sans","source":"https://cdn.reducto.ai/fonts/ReductoSans.woff2","format":"woff2"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Status","icon":"signal","href":"https://status.reducto.ai"},{"anchor":"Studio","icon":"browser","href":"https://studio.reducto.ai"},{"anchor":"Support","icon":"envelope","href":"mailto:support@reducto.ai"},{"anchor":"Model Versions","icon":"bell","href":"/reference/model-versions"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"/reference/changelog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"reducto","hasAudioNarration":false,"actualSubdomain":"reducto","customDomains":["docs.reducto.ai"],"gitSource":{"type":"github","owner":"reductoai","repo":"api","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae59938f146f7c5c1de1636","collectionId":"731526aa-4f41-4f42-9450-03d7fcdf0414","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae59938f146f7c5c1de1636"},"feedback":{"issues":false,"edits":false,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae59938f146f7c5c1de1636","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Documentation","count":82},{"language":"default","tag":"API Reference","count":36},{"language":"default","tag":"SDKs","count":30},{"language":"default","tag":"Document Processing","count":24},{"language":"default","tag":"Configurations","count":18},{"language":"default","tag":"Core Methods","count":18},{"language":"default","tag":"On-premise Resources","count":17},{"language":"default","tag":"Core Functions","count":15},{"language":"default","tag":"Reference","count":11},{"language":"default","tag":"Utilities","count":10}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@reducto.ai","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"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":"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":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"onprem/securing_reducto","slug":"/onprem/securing_reducto","pageMetadata":{"title":"Securing Reducto","description":"Learn how to secure on-premise Reducto deployments","href":"/onprem/securing_reducto"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to secure on-premise Reducto deployments\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,h5:`h5`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`Reducto on-premise should run behind your private network boundary and should be called only by trusted services. Authentication protects access to the deployment, but Reducto does not provide per-end-user authorization inside a single on-premise tenant. Review the `,_jsx(_components.a,{href:`/onprem/security_model`,children:`on-prem security model`}),` before exposing Reducto to additional services or networks.`]}),`\n`,_jsxs(_components.p,{children:[`Reducto can read one or more tokens used for authenticating API calls from a file. On Kubernetes, a Secret can be mounted as a file in the `,_jsx(_components.code,{children:`http`}),` Pod - when this Secret is updated, Kubernetes automatically updates the mounted file using an eventually-consistent approach, allowing Reducto to reload the new value without requiring a restart.`]}),`\n`,_jsx(_components.p,{children:`Multiple API keys can be specified by placing each key on a separate line. This enables progressive secret rotation: add the new key, roll your clients over, then remove the old key, all without downtime.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Enable API authentication for production on-premise deployments. If you need different permissions for different users, applications, or business units, enforce those permissions in your gateway or run separate Reducto deployments.`})}),`\n`,_jsx(Heading,{level:`3`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`When enabled, Reducto reads the authentication secret from a mounted file specified by the `,_jsx(_components.code,{children:`AUTH_SECRET_PATH`}),` environment variable. This provides better security isolation and follows Kubernetes best practices for secret management.`]}),`\n`,_jsx(Heading,{level:`3`,id:`setup-instructions`,children:`Setup instructions`}),`\n`,_jsx(_components.p,{children:`You can set up authentication using either manual secret creation or secret creation via Helm Chart.`}),`\n`,_jsx(Heading,{level:`4`,id:`option-1-manual-secret-creation`,children:`Option 1: Manual secret creation`}),`\n`,_jsx(_components.h5,{children:`1. Create a Kubernetes secret`}),`\n`,_jsx(_components.p,{children:`First, create a Kubernetes secret containing your API key(s). For a single key:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secret`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` generic`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto-auth-secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --from-literal=secret=your-api-key-here`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`For multiple keys (e.g., during rotation), separate them with newlines:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`kubectl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` secret`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` generic`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto-auth-secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --from-literal=secret=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`$'current-key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`new-key'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto`})]}),`\n`]})})}),`\n`,_jsx(_components.h5,{children:`2. Configure Helm values`}),`\n`,_jsx(_components.p,{children:`Add the following configuration to your Helm values file:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`auth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` secretPath`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` enabled`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` secretName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"reducto-auth-secret\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` mountPath`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/etc/auth\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` filename`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"secret\"`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`4`,id:`option-2-secret-creation-via-helm-chart`,children:`Option 2: Secret creation via Helm Chart`}),`\n`,_jsx(_components.h5,{children:`1. Configure values for creation via Helm Chart`}),`\n`,_jsx(_components.p,{children:`Add the following configuration to your Helm values file to let the Helm chart create the secret:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`yaml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`auth`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` secretPath`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` enabled`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` createSecret`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` apiKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"your-api-key-here\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Must specify when createSecret is true.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` secretName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"reducto-auth-secret\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` mountPath`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/etc/auth\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:` filename`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"secret\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note`}),`: With `,_jsx(_components.code,{children:`createSecret: true`}),` you must specify `,_jsx(_components.code,{children:`apiKey`})]}),`\n`,_jsx(Heading,{level:`4`,id:`2-deploy-reducto-for-both-options`,children:`2. Deploy Reducto (for both options)`}),`\n`,_jsx(_components.p,{children:`Deploy or upgrade your Reducto installation:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`helm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` upgrade`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oci://registry.reducto.ai/reducto-api/reducto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --namespace`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` reducto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --values`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` your-values.yaml`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`configuration-options`,children:`Configuration options`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Default`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.enabled`})}),_jsx(_components.td,{children:`Enable file-based authentication`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.createSecret`})}),_jsx(_components.td,{children:`Create the Kubernetes secret`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.apiKey`})}),_jsxs(_components.td,{children:[`API key, must be specified when `,_jsx(_components.code,{children:`createSecret: true`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`-`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.secretName`})}),_jsx(_components.td,{children:`Name of the Kubernetes secret`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"reducto-auth-secret\"`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.mountPath`})}),_jsx(_components.td,{children:`Mount path for the secret file`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"/etc/auth\"`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`auth.secretPath.filename`})}),_jsx(_components.td,{children:`Filename within the secret`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`\"secret\"`})})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`When `,_jsx(_components.code,{children:`auth.secretPath.enabled`}),` is `,_jsx(_components.code,{children:`true`}),`, the Helm chart mounts the specified secret as a volume`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`AUTH_SECRET_PATH`}),` environment variable is automatically set to the full file path`]}),`\n`,_jsx(_components.li,{children:`Reducto’s authentication middleware reads all keys from the file (one per line) and authenticates API requests against any of them`}),`\n`,_jsx(_components.li,{children:`The file is monitored for changes, supporting secret rotation without restarts`}),`\n`,_jsx(_components.li,{children:`If the provided API key doesn’t match any key in the file, a 401 error is returned`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`secret-rotation`,children:`Secret rotation`}),`\n`,_jsx(_components.p,{children:`To rotate keys without downtime:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Add the new key on a new line alongside the existing key`}),`\n`,_jsx(_components.li,{children:`Update the Kubernetes secret (Reducto picks up the change automatically)`}),`\n`,_jsx(_components.li,{children:`Migrate your clients to use the new key`}),`\n`,_jsx(_components.li,{children:`Remove the old key from the secret`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`network-access`,children:`Network access`}),`\n`,_jsx(_components.p,{children:`Do not expose Reducto directly to the public internet. Put the API behind an internal load balancer, private ingress, service mesh, or API gateway that matches your organization’s access policy.`}),`\n`,_jsx(_components.p,{children:`Restrict access to:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Reducto API endpoints, including `,_jsx(_components.code,{children:`/job`}),`, `,_jsx(_components.code,{children:`/jobs`}),`, `,_jsx(_components.code,{children:`/upload`}),`, `,_jsx(_components.code,{children:`/cancel`}),`, `,_jsx(_components.code,{children:`/configure_webhook`}),`, and billing export endpoints`]}),`\n`,_jsx(_components.li,{children:`Metrics and Prometheus endpoints`}),`\n`,_jsx(_components.li,{children:`PostgreSQL, Redis, object storage, model services, and observability UIs`}),`\n`]}),`\n`,_jsx(_components.p,{children:`If users or browser clients need to initiate work, route them through your own application backend. That backend should authenticate the user, authorize the workflow, and then call Reducto as a trusted service.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Securing Reducto","description":"Learn how to secure on-premise Reducto deployments","href":"/onprem/securing_reducto"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Authentication","slug":"authentication","depth":2,"children":[{"title":"Overview","slug":"overview","depth":3,"children":[]},{"title":"Setup instructions","slug":"setup-instructions","depth":3,"children":[]},{"title":"Option 1: Manual secret creation","slug":"option-1-manual-secret-creation","depth":4,"children":[]},{"title":"Option 2: Secret creation via Helm Chart","slug":"option-2-secret-creation-via-helm-chart","depth":4,"children":[]},{"title":"2. Deploy Reducto (for both options)","slug":"2-deploy-reducto-for-both-options","depth":4,"children":[]},{"title":"Configuration options","slug":"configuration-options","depth":3,"children":[]},{"title":"How it works","slug":"how-it-works","depth":3,"children":[]},{"title":"Secret rotation","slug":"secret-rotation","depth":3,"children":[]}]},{"title":"Network access","slug":"network-access","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"reducto","siteName":"Reducto","title":"Securing Reducto - Reducto","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-21T20:52:14.171Z","originalFileLocation":"onprem/securing_reducto.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=\"light\"}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=\"Learn how to secure on-premise Reducto deployments\">\u003cmeta data-mint-head name=\"application-name\" content=\"Reducto\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_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/reducto/riSUMTseceMg4CLB/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Securing Reducto - Reducto\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to secure on-premise Reducto deployments\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Reducto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.reducto.ai/onprem/securing_reducto\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://reducto.mintlify.app/_mintlify/api/og/v2?division=On-premise+Resources\u0026amp;title=Securing+Reducto\u0026amp;description=Learn+how+to+secure+on-premise+Reducto+deployments\u0026amp;theme=e351366ecfb2cc50f96edafd\u0026amp;signature=97ffd13a3ab3ca1ce92528eb401be2921f88d3efae66ab43b523661bb2f201df\">\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=\"Securing Reducto - Reducto\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to secure on-premise Reducto deployments\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://reducto.mintlify.app/_mintlify/api/og/v2?division=On-premise+Resources\u0026amp;title=Securing+Reducto\u0026amp;description=Learn+how+to+secure+on-premise+Reducto+deployments\u0026amp;theme=e351366ecfb2cc50f96edafd\u0026amp;signature=97ffd13a3ab3ca1ce92528eb401be2921f88d3efae66ab43b523661bb2f201df\">\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/reducto/riSUMTseceMg4CLB/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Reducto\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5c0c5c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.reducto.ai/onprem/securing_reducto\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/onprem/securing_reducto.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.reducto.ai/#organization\",\"name\":\"Reducto\",\"url\":\"https://docs.reducto.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://cdn.reducto.ai/logo.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.reducto.ai#website\",\"name\":\"Reducto\",\"url\":\"https://docs.reducto.ai\",\"publisher\":{\"@id\":\"https://docs.reducto.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.reducto.ai/onprem/securing_reducto#webpage\",\"url\":\"https://docs.reducto.ai/onprem/securing_reducto\",\"name\":\"Securing Reducto\",\"description\":\"Learn how to secure on-premise Reducto deployments\",\"dateModified\":\"2026-05-21T20:52:14.171Z\",\"isPartOf\":{\"@id\":\"https://docs.reducto.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.reducto.ai/onprem/securing_reducto#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.reducto.ai/onprem/securing_reducto#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"On-premise Resources\",\"item\":\"https://docs.reducto.ai/onprem/hybrid-vpc-deployment\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Securing Reducto\",\"item\":\"https://docs.reducto.ai/onprem/securing_reducto\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.reducto.ai/onprem/securing_reducto#article\",\"headline\":\"Securing Reducto\",\"name\":\"Securing Reducto\",\"description\":\"Learn how to secure on-premise Reducto deployments\",\"url\":\"https://docs.reducto.ai/onprem/securing_reducto\",\"mainEntityOfPage\":{\"@id\":\"https://docs.reducto.ai/onprem/securing_reducto#webpage\"},\"dateModified\":\"2026-05-21T20:52:14.171Z\",\"publisher\":{\"@id\":\"https://docs.reducto.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.reducto.ai#website\"}}]}\u003c/script>","siteName":"Reducto","nav":{"global":{"anchors":[{"anchor":"Status","icon":"signal","href":"https://status.reducto.ai"},{"anchor":"Studio","icon":"browser","href":"https://studio.reducto.ai"},{"anchor":"Support","icon":"envelope","href":"mailto:support@reducto.ai"},{"anchor":"Model Versions","icon":"bell","href":"/reference/model-versions"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"/reference/changelog"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","public":true,"pages":[{"title":"Overview","icon":"house","sidebarTitle":"Overview","href":"/overview"},{"title":"API Quickstart","icon":"rocket","href":"/quickstart"},{"title":"Studio Quickstart","icon":"crystal-ball","href":"/studio-quickstart"},{"title":"Reducto API Reference for Coding Agents","sidebarTitle":"Agent Guide","icon":"robot","href":"/agent-guide"}]},{"group":"Developer Tools","pages":[{"title":"Reducto CLI","icon":"code","iconType":"solid","href":"/cli"},{"title":"Reducto MCP Server","icon":"plug","iconType":"solid","href":"/mcp-server"}]},{"group":"Core Functions","public":true,"pages":[{"group":"Upload","pages":[{"title":"Upload","href":"/upload/overview"},{"title":"Uploading Large Files","href":"/upload/large-files"}]},{"group":"Parse","pages":[{"title":"Parse overview","sidebarTitle":"Overview","href":"/parse/overview"},{"title":"Parse r-1","sidebarTitle":"Parse r-1","href":"/parse/r-1"},{"title":"Parse Response Format","sidebarTitle":"Response Format","href":"/parse/response-format"},{"title":"Parse Best Practices","sidebarTitle":"Best Practices","href":"/parse/best-practices"}]},{"group":"Extract","pages":[{"title":"Extract","sidebarTitle":"Overview","href":"/extract/overview"},{"title":"Extract Response Format","sidebarTitle":"Response Format","href":"/extract/response-format"},{"title":"Schema Keyword Support","sidebarTitle":"Schema Keywords","href":"/extract/schema-keywords"},{"title":"Extract Best Practices","sidebarTitle":"Best Practices","href":"/extraction/best-practices-extract"}]},{"title":"Split","href":"/split"},{"group":"Classify","pages":[{"title":"Classify","sidebarTitle":"Overview","href":"/classify/overview"},{"title":"Classify Response Format","sidebarTitle":"Response Format","href":"/classify/response-format"},{"title":"Classify Best Practices","sidebarTitle":"Best Practices","href":"/classify/best-practices"}]},{"title":"Edit","href":"/editing/edit-overview"}]},{"group":"Workflows and Pipelines","public":true,"pages":[{"group":"Pipelines","pages":[{"title":"Pipeline Basics","href":"/workflows/pipeline-basics"},{"title":"Multi-document Pipelines","href":"/workflows/multi-document-pipelines"}]},{"title":"Chaining API Calls","href":"/workflows/chaining-endpoints"},{"group":"Async Processing \u0026 Webhooks","pages":[{"title":"Async Processing","href":"/workflows/async-overview"},{"title":"Svix Webhooks","href":"/workflows/svix-webhooks"},{"title":"Direct Webhooks","href":"/workflows/direct-webhooks"},{"title":"Batch Processing","href":"/workflows/batch-processing"},{"title":"Batch Queue","href":"/workflows/batch-queue"},{"title":"Deleting Jobs \u0026 Uploads","href":"/workflows/deletion"}]}]},{"group":"Configurations","public":true,"pages":[{"title":"Configuration Overview","href":"/configs/overview"},{"group":"Parse Configurations","pages":[{"title":"r-1 configuration compatibility","sidebarTitle":"r-1 compatibility","href":"/configs/parse/r-1-configuration-compatibility"},{"group":"Enhance","pages":[{"title":"Agentic Modes","href":"/configs/parse/agentic-modes"},{"title":"Chart Extraction","href":"/configs/parse/chart-extraction"}]},{"group":"Retrieval","pages":[{"title":"Chunking Methods","href":"/configs/parse/chunking-methods"}]},{"group":"Formatting","pages":[{"title":"Table Output Formats","href":"/configs/parse/table-output-formats"},{"title":"Additional Document Data","href":"/configs/parse/additional-document-data"}]},{"group":"Spreadsheet","pages":[{"title":"Spreadsheet Processing","href":"/configs/parse/spreadsheet"}]},{"group":"Settings","pages":[{"title":"Processing Settings","href":"/configs/parse/ocr-settings"},{"title":"Page Ranges","href":"/configs/parse/page-ranges"},{"title":"Word and Cell Citations","href":"/configs/parse/citations"}]}]},{"group":"Extract Configurations","pages":[{"title":"Deep Extract","href":"/configs/extract/deep-extract"},{"title":"Array Extraction","href":"/configs/extract/array-extraction"},{"title":"Citations","href":"/configs/extract/citations"}]},{"group":"Split Configurations","pages":[{"title":"Split Configuration","href":"/configs/split/configuration"},{"title":"Deep Split","href":"/configs/split/deep-split"}]},{"group":"Classify Configurations","pages":[{"title":"Classify Configuration","href":"/configs/classify/configuration"}]},{"group":"Edit Configurations","pages":[{"title":"Form Schema","href":"/configs/edit/form-schema"}]}]},{"group":"Reference","public":true,"pages":[{"title":"Version Pinning","href":"/reference/version-pinning"},{"title":"Error Codes","href":"/reference/error-codes"},{"title":"Rate Limits","href":"/reference/rate-limits"},{"title":"Checking API Health \u0026 Usage","href":"/reference/checking-api-health"},{"title":"Concurrency Throttle","href":"/reference/throttling"},{"title":"Usage and Pricing","href":"/reference/credit-usage"},{"title":"Pricing Migration Guide","href":"/reference/pricing-migration"},{"title":"Usage Export API","href":"/reference/usage-export-api"},{"title":"Per-Page Billing Breakdown","href":"/reference/page-billing-breakdown"},{"title":"Glossary","href":"/reference/glossary"},{"title":"Frequently Asked Questions","href":"/reference/faq"}]},{"group":"Hidden pages","public":true,"hidden":true,"pages":[{"title":"Legacy Credit Usage and Rates","href":"/faq/legacy-credit-usage-overview"},{"title":"Legacy Credit Usage","href":"/reference/legacy-credit-usage"},{"title":"OpenAPI Schema","href":"/api-reference/openapi.json"}]},{"group":"Components","public":true,"pages":[{"title":"SpreadsheetViewer","href":"/components/spreadsheet-viewer"}]},{"group":"Enterprise Resources","public":true,"pages":[{"title":"Enterprise Readiness","href":"/enterprise/enterprise-readiness"},{"title":"Deployment options (Cloud, On-prem, Hybrid)","href":"/onprem/enterprise_deployment_options"}]},{"group":"Security and privacy","public":true,"pages":[{"title":"Data policies \u0026 compliance","href":"/security/policies"},{"title":"Filing Complaints","href":"/security/filing-complaints"},{"title":"EU data residency \u0026 processing","href":"/security/eu-data-residency"},{"title":"Single sign-on (SSO) FAQ","href":"/security/sso-saml-faq"}]},{"group":"On-premise Resources","icon":"archway","pages":[{"group":"Hybrid VPC","pages":[{"title":"Hybrid VPC Deployment","href":"/onprem/hybrid-vpc-deployment"},{"title":"Hybrid VPC — AWS S3","href":"/onprem/hybrid-vpc-aws"},{"title":"Hybrid VPC — Azure Blob Storage","href":"/onprem/hybrid-vpc-azure"},{"title":"Hybrid VPC — Box","href":"/onprem/hybrid-vpc-box"},{"title":"Hybrid VPC — Google Cloud Storage","href":"/onprem/hybrid-vpc-gcs"}]},{"title":"On-prem security model","description":"Understand the shared security responsibilities and trust boundaries for Reducto on-premise deployments","href":"/onprem/security_model"},{"title":"Securing Reducto","href":"/onprem/securing_reducto"},{"title":"OCR provider configuration","description":"Configure cloud OCR providers for on-premise Reducto installations","href":"/onprem/ocr_options"},{"title":"LLM \u0026 service configuration options","href":"/onprem/llm_options"},{"title":"Database configuration","href":"/onprem/database_configuration"},{"title":"Azure Blob Storage authentication","href":"/onprem/azure_blob_storage"},{"title":"On-premise changelog","href":"/onprem/changelog"},{"title":"Observability \u0026 Monitoring","href":"/onprem/observability"},{"title":"Operations","href":"/onprem/operations"},{"title":"Self-hosted fair queueing with Reducto","href":"/onprem/fair_queueing"},{"title":"Automatic file cleanup","href":"/onprem/file_cleanup"},{"title":"Air-gapped usage for billing","href":"/onprem/usage_for_billing"}]}]},{"tab":"API Reference","versions":[{"version":"Current","groups":[{"group":"Document Processing","pages":[{"openapi":"openapi.json post /parse","title":"Parse","href":"/api-reference/parse"},{"title":"Parse Async","openapi":"openapi.json post /parse_async","href":"/api-reference/async-parse"},{"openapi":"openapi.json post /upload","title":"Upload","href":"/api-reference/upload"},{"openapi":"openapi.json post /extract","title":"Extract","href":"/api-reference/extract"},{"openapi":"openapi.json post /extract_async","title":"Extract Async","href":"/api-reference/extract-async"},{"openapi":"openapi.json post /split","title":"Split","href":"/api-reference/split"},{"openapi":"openapi.json post /split_async","title":"Split Async","href":"/api-reference/split-async"},{"openapi":"openapi.json post /classify","title":"Classify","href":"/api-reference/classify"},{"openapi":"openapi.json post /classify_async","title":"Classify Async","href":"/api-reference/classify-async"},{"openapi":"openapi.json post /edit","title":"Edit","href":"/api-reference/edit"},{"openapi":"openapi.json post /edit_async","title":"Edit Async","href":"/api-reference/edit-async"},{"openapi":"openapi.json post /pipeline","title":"Pipeline","href":"/api-reference/pipeline"},{"openapi":"openapi.json post /pipeline_async","title":"Pipeline Async","href":"/api-reference/pipeline-async"}]},{"group":"Job Management","pages":[{"title":"Retrieve Job","openapi":"openapi.json get /job/{job_id}","href":"/api-reference/retrieve-parse"},{"openapi":"openapi.json post /cancel/{job_id}","title":"Cancel Job","href":"/api-reference/cancel-job"},{"title":"Delete Job","openapi":"openapi.json delete /job/{job_id}","href":"/api-reference/delete-job"},{"openapi":"openapi.json get /jobs","title":"Get Jobs","href":"/api-reference/get-jobs"}]},{"group":"File Management","pages":[{"title":"Delete Upload","openapi":"openapi.json delete /upload/{file_id}","href":"/api-reference/delete-upload"}]},{"group":"Utilities","pages":[{"openapi":"openapi.json post /configure_webhook","title":"Webhook Portal","href":"/api-reference/webhook-portal"},{"openapi":"openapi.json get /version","title":"Get Version","href":"/api-reference/get-version"}]}]},{"version":"Legacy API","pages":[{"title":"Legacy API","href":"/api-reference/legacy/parse"}]}]},{"tab":"Cookbooks","pages":[{"title":"Cookbooks","href":"/cookbooks/overview"}]},{"tab":"SDKs","versions":[{"version":"Python","groups":[{"group":"Get Started","pages":[{"title":"Python SDK Overview","sidebarTitle":"Overview","href":"/sdk/python/overview"}]},{"group":"Core Methods","pages":[{"title":"Upload","sidebarTitle":"Upload","href":"/sdk/python/upload"},{"title":"Parse","sidebarTitle":"Parse","href":"/sdk/python/parse"},{"title":"Extract","sidebarTitle":"Extract","href":"/sdk/python/extract"},{"title":"Split","sidebarTitle":"Split","href":"/sdk/python/split"},{"title":"Edit","sidebarTitle":"Edit","href":"/sdk/python/edit"},{"title":"Pipeline","sidebarTitle":"Pipeline","href":"/sdk/python/pipeline"}]},{"group":"Async \u0026 Utilities","pages":[{"title":"Async Client","sidebarTitle":"Async Client","href":"/sdk/python/async"},{"title":"Job Management","sidebarTitle":"Job Management","href":"/sdk/python/job-management"},{"title":"Error Handling","sidebarTitle":"Error Handling","href":"/sdk/python/error-handling"}]}]},{"version":"JavaScript","pages":[{"title":"JavaScript","href":"/sdk/javascript/overview"}]},{"version":"Go","pages":[{"title":"Go","href":"/sdk/go/overview"}]}]},{"tab":"Studio","pages":[{"title":"Studio","href":"/studio-parse"}]}]},"basePath":"","title":"Securing Reducto - Reducto","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}