How to configure SAML or OIDC single sign-on for your Reducto organization.
Reducto supports Enterprise SSO, letting your team log in with your identity provider (IdP) credentials. This page covers how setup works and answers common questions from IT and security teams.
Users sign in at accounts.reducto.ai. Enterprise SSO is configured per organization through a guided setup page. Once SSO is enabled for your organization, members can no longer log in with other methods such as email/password or magic link.To get started, contact your Reducto account team or support. We will send you a shareable setup link that should guide you through the setup process.
Contact your Reducto account team to enable Enterprise SSO for your organization. We can also generate a setup link for the person configuring your IdP, even if they do not have a Reducto account.
2
Follow the guided setup for your IdP
The setup page provides step-by-step guides for Entra ID (Azure AD), Okta, Google, OneLogin, JumpCloud, Duo, Rippling, and Ping Identity, plus a generic guide for any other SAML 2.0 or OIDC provider. It supplies the values to enter into your IdP, including the ACS URL and SP Entity ID.
3
Provide your IdP details
For SAML, you enter your IdP SSO URL, IdP Entity ID, and the token signing certificate. The guide then walks through mapping user attributes and, optionally, roles. See Mapping roles from your IdP below.
4
Finish and go live
After clicking Finish & Go Live, the setup page shows your organization’s login URL in the form https://auth.reducto.ai/saml/{org_slug}/login.
Reducto gives every user it creates through SSO the Member role. To assign Admin or Owner automatically, send the role from your IdP in the SAML response. Reducto reads it in one of two ways:
A role attribute whose value is exactly Owner, Admin, or Member.
Group membership: a group named role_{Role} or role_{label}_{Role}, sent in a groups attribute. role_Owner, role_Admin, and role_Member are the simplest form. A user in role_Owner gets the Owner role.
To tell the group apart from other applications’ groups in your IdP, insert one label between the prefix and the role, for example role_Reducto_Owner. The label cannot contain underscores. role_Reducto_Production_Owner does not match.Values must match the Reducto role names exactly. If the SAML response does not include a recognized role, the user gets the Member role.
Role mapping is available for SAML connections only. OIDC connections provision every user as a Member; change roles afterwards from the organization settings page.
The guided setup page repeats these instructions for your IdP. The provider-specific steps are summarized below.
Entra ID (Azure AD)
Okta
Google Workspace
Other IdPs
Send the role as a claim
In your Reducto enterprise application, open Single sign-on and edit Attributes & Claims.
Add a new claim with Namerole, Namespacehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims, SourceAttribute, and Source attributeuser.assignedroles.
Define the app roles
Go to App registrations, select the Reducto app, and open App roles.
Click Create app role once for each of Owner, Admin, and Member. Set both Display name and Value to the role name.
Set Allowed member types to Users/Groups, add a description, leave the role enabled, and save.
When you assign a user or group to the enterprise application, pick the app role to grant. Assigning a group gives every member of that group the selected Reducto role.
Go to Directory > Profile Editor and open the profile for the Reducto SAML app.
Click Add Attribute. Set Display name and Variable name to role. Set Attribute type to Group so the value can be set per group. Alternatively, choose Personal and enable Enum with Owner, Admin, and Member as both display name and value.
In the Reducto SAML app, open General > SAML Settings > Attribute Statements and add an attribute with Namerole and Valueappuser.role.
When assigning a group (or user) to the app, set role to Owner, Admin, or Member.
Google sends group membership rather than a role attribute.
In Google Admin, create groups named role_Owner, role_Admin, and role_Member (or with a suffix such as role_Reducto_Admin) and add users to them.
In the Reducto SAML app, open Attribute mapping and under Group membership (optional) select those groups and set App attribute to groups.
Any SAML 2.0 IdP works with either method:
Add an attribute statement named role whose value is Owner, Admin, or Member, populated from a user or group property in your directory.
Or create groups named role_Owner, role_Admin, and role_Member and include the user’s groups in the SAML response as a groups attribute.
The guided setup page lists the exact steps for OneLogin, JumpCloud, Duo, Rippling, and Ping Identity.
Yes. Reducto supports SAML 2.0, with both SP-initiated and IdP-initiated logins. OIDC is also supported.
Which identity providers are supported?
Guided setup is available for Entra ID (Azure AD), Okta, Google, OneLogin, JumpCloud, Duo, Rippling, and Ping Identity. Any other IdP that supports SAML 2.0 works through the generic SAML integration.
What are the ACS URL and Entity ID?
Both values are shown in the guided setup page for your organization. Enter them into your IdP when creating the application (in Entra ID, these are the Reply URL and Identifier fields in Basic SAML Configuration).
Is the Sign on URL required? (Entra ID)
No. In Entra ID’s Basic SAML Configuration, only the Identifier (Entity ID) and Reply URL (ACS URL) are required. The Sign on URL is only used when starting login from a bookmark or the My Apps portal tile. You may leave it blank, or set it to your organization’s login URL: https://auth.reducto.ai/saml/{org_slug}/login.
Can you provide a Service Provider metadata file?
Yes. After completing the setup guide and clicking Finish & Go Live, take your organization’s login URL (https://auth.reducto.ai/saml/{org_slug}/login) and replace /login with /metadata. Navigating to that URL downloads the SP metadata XML, which can be used for a Relying Party Trust configuration.
Do you support automatic token signing certificate rollover?
No. The IdP signing certificate is provided during setup. When your IdP rotates its token signing certificate, update the SAML connection with the new certificate by revisiting the setup page. We recommend configuring certificate expiry notifications in your IdP.
Yes, for SAML connections. Send a role attribute with the value Owner, Admin, or Member, or put users in groups named role_Owner, role_Admin, or role_Member and include group membership in the SAML response. Users without a recognized role become Members. See Mapping roles from your IdP for per-IdP steps.
Can we map roles over OIDC?
Not yet. OIDC connections provision every user as a Member. An Owner or Admin can change roles afterwards from the organization settings page. If role mapping matters for your rollout, configure SAML instead of OIDC.
Do you support Just-In-Time (JIT) provisioning?
Yes. Users are provisioned automatically on their first SSO login.
Do you support SCIM provisioning?
SCIM is available for Okta, Entra ID, OneLogin, JumpCloud, and Ping Identity. Contact your Reducto account team to confirm availability for your organization.
Can members still log in with a password after SSO is enabled?
No. Once Enterprise SSO is enabled for your organization, members (and users sharing your organization’s email domain) can only log in through your IdP.
Do you support IdP-initiated login?
Yes. Both SP-initiated and IdP-initiated logins are supported.
Who can configure SSO for our organization?
Users with a role that includes the Enterprise SSO permission can configure it from the organization settings page.
Contact support@reducto.ai or your Reducto account team for SSO setup assistance.
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":"6ae4a3c14ebd7542833e1720","collectionId":"0e6821fc-13f8-4fb7-a831-1cf14653bf54","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4a3c14ebd7542833e1720"},"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":"6ae4ffb759486018a11c19a8","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"Documentation","count":81},{"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":16},{"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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"security/sso-saml-faq","slug":"/security/sso-saml-faq","pageMetadata":{"public":true,"title":"Single sign-on (SSO) FAQ","description":"How to configure SAML or OIDC single sign-on for your Reducto organization.","href":"/security/sso-saml-faq"},"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: \"How to configure SAML or OIDC single sign-on for your Reducto organization.\"\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`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Heading,Note,Step,Steps,Tab,Table,Tabs}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Reducto supports Enterprise SSO, letting your team log in with your identity provider (IdP) credentials. This page covers how setup works and answers common questions from IT and security teams.`}),`\n`,_jsx(Heading,{level:`2`,id:`how-sso-works-at-reducto`,children:`How SSO works at Reducto`}),`\n`,_jsxs(_components.p,{children:[`Users sign in at `,_jsx(_components.a,{href:`https://accounts.reducto.ai`,children:`accounts.reducto.ai`}),`. Enterprise SSO is configured per organization through a guided setup page. Once SSO is enabled for your organization, members can no longer log in with other methods such as email/password or magic link.`]}),`\n`,_jsx(_components.p,{children:`To get started, contact your Reducto account team or support. We will send you a shareable setup link that should guide you through the setup process.`}),`\n`,_jsx(Heading,{level:`2`,id:`setup-process`,children:`Setup process`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Request SSO for your organization`,children:_jsx(_components.p,{children:`Contact your Reducto account team to enable Enterprise SSO for your organization. We can also generate a setup link for the person configuring your IdP, even if they do not have a Reducto account.`})}),_jsx(Step,{title:`Follow the guided setup for your IdP`,children:_jsx(_components.p,{children:`The setup page provides step-by-step guides for Entra ID (Azure AD), Okta, Google, OneLogin, JumpCloud, Duo, Rippling, and Ping Identity, plus a generic guide for any other SAML 2.0 or OIDC provider. It supplies the values to enter into your IdP, including the ACS URL and SP Entity ID.`})}),_jsx(Step,{title:`Provide your IdP details`,children:_jsxs(_components.p,{children:[`For SAML, you enter your IdP SSO URL, IdP Entity ID, and the token signing certificate. The guide then walks through mapping user attributes and, optionally, roles. See `,_jsx(_components.a,{href:`#mapping-roles-from-your-idp`,children:`Mapping roles from your IdP`}),` below.`]})}),_jsx(Step,{title:`Finish and go live`,children:_jsxs(_components.p,{children:[`After clicking Finish \u0026 Go Live, the setup page shows your organization’s login URL in the form `,_jsx(_components.code,{children:`https://auth.reducto.ai/saml/{org_slug}/login`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`mapping-roles-from-your-idp`,children:`Mapping roles from your IdP`}),`\n`,_jsxs(_components.p,{children:[`Reducto gives every user it creates through SSO the `,_jsx(_components.strong,{children:`Member`}),` role. To assign `,_jsx(_components.strong,{children:`Admin`}),` or `,_jsx(_components.strong,{children:`Owner`}),` automatically, send the role from your IdP in the SAML response. Reducto reads it in one of two ways:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.code,{children:`role`}),` attribute whose value is exactly `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, or `,_jsx(_components.code,{children:`Member`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Group membership: a group named `,_jsx(_components.code,{children:`role_{Role}`}),` or `,_jsx(_components.code,{children:`role_{label}_{Role}`}),`, sent in a `,_jsx(_components.code,{children:`groups`}),` attribute. `,_jsx(_components.code,{children:`role_Owner`}),`, `,_jsx(_components.code,{children:`role_Admin`}),`, and `,_jsx(_components.code,{children:`role_Member`}),` are the simplest form. A user in `,_jsx(_components.code,{children:`role_Owner`}),` gets the Owner role.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To tell the group apart from other applications’ groups in your IdP, insert one label between the prefix and the role, for example `,_jsx(_components.code,{children:`role_Reducto_Owner`}),`. The label cannot contain underscores. `,_jsx(_components.code,{children:`role_Reducto_Production_Owner`}),` does not match.`]}),`\n`,_jsxs(_components.p,{children:[`Values must match the `,_jsx(_components.a,{href:`/studio-roles-permissions`,children:`Reducto role names`}),` exactly. If the SAML response does not include a recognized role, the user gets the Member role.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Role mapping is available for SAML connections only. OIDC connections provision every user as a Member; change roles afterwards from the organization settings page.`})}),`\n`,_jsx(_components.p,{children:`The guided setup page repeats these instructions for your IdP. The provider-specific steps are summarized below.`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Entra ID (Azure AD)`,id:`entra-id-azure-ad`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Send the role as a claim`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In your Reducto enterprise application, open `,_jsx(_components.strong,{children:`Single sign-on`}),` and edit `,_jsx(_components.strong,{children:`Attributes \u0026 Claims`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Add a new claim with `,_jsx(_components.strong,{children:`Name`}),` `,_jsx(_components.code,{children:`role`}),`, `,_jsx(_components.strong,{children:`Namespace`}),` `,_jsx(_components.code,{children:`http://schemas.xmlsoap.org/ws/2005/05/identity/claims`}),`, `,_jsx(_components.strong,{children:`Source`}),` `,_jsx(_components.code,{children:`Attribute`}),`, and `,_jsx(_components.strong,{children:`Source attribute`}),` `,_jsx(_components.code,{children:`user.assignedroles`}),`.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Define the app roles`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`App registrations`}),`, select the Reducto app, and open `,_jsx(_components.strong,{children:`App roles`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create app role`}),` once for each of `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, and `,_jsx(_components.code,{children:`Member`}),`. Set both `,_jsx(_components.strong,{children:`Display name`}),` and `,_jsx(_components.strong,{children:`Value`}),` to the role name.`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Allowed member types`}),` to `,_jsx(_components.strong,{children:`Users/Groups`}),`, add a description, leave the role enabled, and save.`]}),`\n`]}),_jsx(_components.p,{children:`When you assign a user or group to the enterprise application, pick the app role to grant. Assigning a group gives every member of that group the selected Reducto role.`})]}),_jsx(Tab,{title:`Okta`,id:`okta`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Directory > Profile Editor`}),` and open the profile for the Reducto SAML app.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add Attribute`}),`. Set `,_jsx(_components.strong,{children:`Display name`}),` and `,_jsx(_components.strong,{children:`Variable name`}),` to `,_jsx(_components.code,{children:`role`}),`. Set `,_jsx(_components.strong,{children:`Attribute type`}),` to `,_jsx(_components.strong,{children:`Group`}),` so the value can be set per group. Alternatively, choose `,_jsx(_components.strong,{children:`Personal`}),` and enable `,_jsx(_components.strong,{children:`Enum`}),` with `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, and `,_jsx(_components.code,{children:`Member`}),` as both display name and value.`]}),`\n`,_jsxs(_components.li,{children:[`In the Reducto SAML app, open `,_jsx(_components.strong,{children:`General > SAML Settings > Attribute Statements`}),` and add an attribute with `,_jsx(_components.strong,{children:`Name`}),` `,_jsx(_components.code,{children:`role`}),` and `,_jsx(_components.strong,{children:`Value`}),` `,_jsx(_components.code,{children:`appuser.role`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`When assigning a group (or user) to the app, set `,_jsx(_components.code,{children:`role`}),` to `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, or `,_jsx(_components.code,{children:`Member`}),`.`]}),`\n`]})}),_jsxs(Tab,{title:`Google Workspace`,id:`google-workspace`,children:[_jsx(_components.p,{children:`Google sends group membership rather than a role attribute.`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In Google Admin, create groups named `,_jsx(_components.code,{children:`role_Owner`}),`, `,_jsx(_components.code,{children:`role_Admin`}),`, and `,_jsx(_components.code,{children:`role_Member`}),` (or with a suffix such as `,_jsx(_components.code,{children:`role_Reducto_Admin`}),`) and add users to them.`]}),`\n`,_jsxs(_components.li,{children:[`In the Reducto SAML app, open `,_jsx(_components.strong,{children:`Attribute mapping`}),` and under `,_jsx(_components.strong,{children:`Group membership (optional)`}),` select those groups and set `,_jsx(_components.strong,{children:`App attribute`}),` to `,_jsx(_components.code,{children:`groups`}),`.`]}),`\n`]})]}),_jsxs(Tab,{title:`Other IdPs`,id:`other-idps`,children:[_jsx(_components.p,{children:`Any SAML 2.0 IdP works with either method:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Add an attribute statement named `,_jsx(_components.code,{children:`role`}),` whose value is `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, or `,_jsx(_components.code,{children:`Member`}),`, populated from a user or group property in your directory.`]}),`\n`,_jsxs(_components.li,{children:[`Or create groups named `,_jsx(_components.code,{children:`role_Owner`}),`, `,_jsx(_components.code,{children:`role_Admin`}),`, and `,_jsx(_components.code,{children:`role_Member`}),` and include the user’s groups in the SAML response as a `,_jsx(_components.code,{children:`groups`}),` attribute.`]}),`\n`]}),_jsx(_components.p,{children:`The guided setup page lists the exact steps for OneLogin, JumpCloud, Duo, Rippling, and Ping Identity.`})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked-questions`,children:`Frequently asked questions`}),`\n`,_jsx(Heading,{level:`3`,id:`saml-support`,children:`SAML support`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Do you support SAML 2.0?`,id:`do-you-support-saml-2-0`,children:_jsx(_components.p,{children:`Yes. Reducto supports SAML 2.0, with both SP-initiated and IdP-initiated logins. OIDC is also supported.`})}),_jsx(Accordion,{title:`Which identity providers are supported?`,id:`which-identity-providers-are-supported`,children:_jsx(_components.p,{children:`Guided setup is available for Entra ID (Azure AD), Okta, Google, OneLogin, JumpCloud, Duo, Rippling, and Ping Identity. Any other IdP that supports SAML 2.0 works through the generic SAML integration.`})}),_jsx(Accordion,{title:`What are the ACS URL and Entity ID?`,id:`what-are-the-acs-url-and-entity-id`,children:_jsx(_components.p,{children:`Both values are shown in the guided setup page for your organization. Enter them into your IdP when creating the application (in Entra ID, these are the Reply URL and Identifier fields in Basic SAML Configuration).`})}),_jsx(Accordion,{title:`Is the Sign on URL required? (Entra ID)`,id:`is-the-sign-on-url-required-entra-id`,children:_jsxs(_components.p,{children:[`No. In Entra ID’s Basic SAML Configuration, only the Identifier (Entity ID) and Reply URL (ACS URL) are required. The Sign on URL is only used when starting login from a bookmark or the My Apps portal tile. You may leave it blank, or set it to your organization’s login URL: `,_jsx(_components.code,{children:`https://auth.reducto.ai/saml/{org_slug}/login`}),`.`]})}),_jsx(Accordion,{title:`Can you provide a Service Provider metadata file?`,id:`can-you-provide-a-service-provider-metadata-file`,children:_jsxs(_components.p,{children:[`Yes. After completing the setup guide and clicking Finish \u0026 Go Live, take your organization’s login URL (`,_jsx(_components.code,{children:`https://auth.reducto.ai/saml/{org_slug}/login`}),`) and replace `,_jsx(_components.code,{children:`/login`}),` with `,_jsx(_components.code,{children:`/metadata`}),`. Navigating to that URL downloads the SP metadata XML, which can be used for a Relying Party Trust configuration.`]})}),_jsx(Accordion,{title:`Do you support automatic token signing certificate rollover?`,id:`do-you-support-automatic-token-signing-certificate-rollover`,children:_jsx(_components.p,{children:`No. The IdP signing certificate is provided during setup. When your IdP rotates its token signing certificate, update the SAML connection with the new certificate by revisiting the setup page. We recommend configuring certificate expiry notifications in your IdP.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`attributes-and-provisioning`,children:`Attributes and provisioning`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Which attributes should the SAML response include?`,id:`which-attributes-should-the-saml-response-include`,children:[_jsx(_components.p,{children:`The SAML response should include:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Attribute`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Email`}),_jsx(_components.td,{children:`Yes`}),_jsx(_components.td,{children:`Also used as the NameID / subject`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`First name`}),_jsx(_components.td,{children:`Recommended`}),_jsx(_components.td,{children:`Mapped in the setup guide`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Last name`}),_jsx(_components.td,{children:`Recommended`}),_jsx(_components.td,{children:`Mapped in the setup guide`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Role`}),_jsx(_components.td,{children:`Optional`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`role`}),` attribute or `,_jsx(_components.code,{children:`role_{Role}`}),` group, see `,_jsx(_components.a,{href:`#mapping-roles-from-your-idp`,children:`Mapping roles from your IdP`})]})]})]})]})]}),_jsx(Accordion,{title:`Do you support mapping roles from our IdP?`,id:`do-you-support-mapping-roles-from-our-idp`,children:_jsxs(_components.p,{children:[`Yes, for SAML connections. Send a `,_jsx(_components.code,{children:`role`}),` attribute with the value `,_jsx(_components.code,{children:`Owner`}),`, `,_jsx(_components.code,{children:`Admin`}),`, or `,_jsx(_components.code,{children:`Member`}),`, or put users in groups named `,_jsx(_components.code,{children:`role_Owner`}),`, `,_jsx(_components.code,{children:`role_Admin`}),`, or `,_jsx(_components.code,{children:`role_Member`}),` and include group membership in the SAML response. Users without a recognized role become Members. See `,_jsx(_components.a,{href:`#mapping-roles-from-your-idp`,children:`Mapping roles from your IdP`}),` for per-IdP steps.`]})}),_jsx(Accordion,{title:`Can we map roles over OIDC?`,id:`can-we-map-roles-over-oidc`,children:_jsx(_components.p,{children:`Not yet. OIDC connections provision every user as a Member. An Owner or Admin can change roles afterwards from the organization settings page. If role mapping matters for your rollout, configure SAML instead of OIDC.`})}),_jsx(Accordion,{title:`Do you support Just-In-Time (JIT) provisioning?`,id:`do-you-support-just-in-time-jit-provisioning`,children:_jsx(_components.p,{children:`Yes. Users are provisioned automatically on their first SSO login.`})}),_jsx(Accordion,{title:`Do you support SCIM provisioning?`,id:`do-you-support-scim-provisioning`,children:_jsx(_components.p,{children:`SCIM is available for Okta, Entra ID, OneLogin, JumpCloud, and Ping Identity. Contact your Reducto account team to confirm availability for your organization.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`login-behavior`,children:`Login behavior`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Can members still log in with a password after SSO is enabled?`,id:`can-members-still-log-in-with-a-password-after-sso-is-enabled`,children:_jsx(_components.p,{children:`No. Once Enterprise SSO is enabled for your organization, members (and users sharing your organization’s email domain) can only log in through your IdP.`})}),_jsx(Accordion,{title:`Do you support IdP-initiated login?`,id:`do-you-support-idp-initiated-login`,children:_jsx(_components.p,{children:`Yes. Both SP-initiated and IdP-initiated logins are supported.`})}),_jsx(Accordion,{title:`Who can configure SSO for our organization?`,id:`who-can-configure-sso-for-our-organization`,children:_jsx(_components.p,{children:`Users with a role that includes the Enterprise SSO permission can configure it from the organization settings page.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`need-help`,children:`Need help?`}),`\n`,_jsxs(_components.p,{children:[`Contact `,_jsx(_components.a,{href:`mailto:support@reducto.ai`,children:`support@reducto.ai`}),` or your Reducto account team for SSO setup assistance.`]})]})}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":{"public":true,"title":"Single sign-on (SSO) FAQ","description":"How to configure SAML or OIDC single sign-on for your Reducto organization.","href":"/security/sso-saml-faq"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How SSO works at Reducto","slug":"how-sso-works-at-reducto","depth":2,"children":[]},{"title":"Setup process","slug":"setup-process","depth":2,"children":[]},{"title":"Mapping roles from your IdP","slug":"mapping-roles-from-your-idp","depth":2,"children":[]},{"title":"Frequently asked questions","slug":"frequently-asked-questions","depth":2,"children":[{"title":"SAML support","slug":"saml-support","depth":3,"children":[]},{"title":"Attributes and provisioning","slug":"attributes-and-provisioning","depth":3,"children":[]},{"title":"Login behavior","slug":"login-behavior","depth":3,"children":[]}]},{"title":"Need help?","slug":"need-help","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"reducto","siteName":"Reducto","title":"Single sign-on (SSO) FAQ - Reducto","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T23:35:02.124Z","originalFileLocation":"security/sso-saml-faq.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=\"How to configure SAML or OIDC single sign-on for your Reducto organization.\">\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=\"Single sign-on (SSO) FAQ - Reducto\">\u003cmeta data-mint-head property=\"og:description\" content=\"How to configure SAML or OIDC single sign-on for your Reducto organization.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Reducto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.reducto.ai/security/sso-saml-faq\">\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=Security+and+privacy\u0026amp;title=Single+sign-on+%28SSO%29+FAQ\u0026amp;description=How+to+configure+SAML+or+OIDC+single+sign-on+for+your+Reducto+organization.\u0026amp;theme=e351366ecfb2cc50f96edafd\u0026amp;signature=a6960c5f5cf046434062904f3f063f3320535d9af34deebf4e59b569aa420489\">\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=\"Single sign-on (SSO) FAQ - Reducto\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How to configure SAML or OIDC single sign-on for your Reducto organization.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://reducto.mintlify.app/_mintlify/api/og/v2?division=Security+and+privacy\u0026amp;title=Single+sign-on+%28SSO%29+FAQ\u0026amp;description=How+to+configure+SAML+or+OIDC+single+sign-on+for+your+Reducto+organization.\u0026amp;theme=e351366ecfb2cc50f96edafd\u0026amp;signature=a6960c5f5cf046434062904f3f063f3320535d9af34deebf4e59b569aa420489\">\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/security/sso-saml-faq\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/security/sso-saml-faq.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/security/sso-saml-faq#webpage\",\"url\":\"https://docs.reducto.ai/security/sso-saml-faq\",\"name\":\"Single sign-on (SSO) FAQ\",\"description\":\"How to configure SAML or OIDC single sign-on for your Reducto organization.\",\"dateModified\":\"2026-09-28T23:35:02.124Z\",\"isPartOf\":{\"@id\":\"https://docs.reducto.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.reducto.ai/security/sso-saml-faq#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.reducto.ai/security/sso-saml-faq#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Security and privacy\",\"item\":\"https://docs.reducto.ai/security/policies\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Single sign-on (SSO) FAQ\",\"item\":\"https://docs.reducto.ai/security/sso-saml-faq\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.reducto.ai/security/sso-saml-faq#article\",\"headline\":\"Single sign-on (SSO) FAQ\",\"name\":\"Single sign-on (SSO) FAQ\",\"description\":\"How to configure SAML or OIDC single sign-on for your Reducto organization.\",\"url\":\"https://docs.reducto.ai/security/sso-saml-faq\",\"mainEntityOfPage\":{\"@id\":\"https://docs.reducto.ai/security/sso-saml-faq#webpage\"},\"dateModified\":\"2026-09-28T23:35:02.124Z\",\"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","description":"For customers requiring that all document data stays strictly within EU","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","description":"Deploy Reducto with your data in your own cloud account and compute managed by Reducto","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","href":"/onprem/security_model"},{"title":"Securing Reducto","href":"/onprem/securing_reducto"},{"title":"OCR provider configuration","href":"/onprem/ocr_options"},{"title":"LLM \u0026 service configuration options","href":"/onprem/llm_options"},{"title":"Database configuration","href":"/onprem/database_configuration"},{"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":"Single sign-on (SSO) FAQ - Reducto","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":[],"chunks":[]}