SAML SSO lets your team sign in to Convoy using your organisation’s identity provider (IdP). Supported providers include Google, Okta, Entra ID (Azure AD), Auth0, ADP, CAS, ClassLink, Cloudflare, and any custom SAML 2.0 or OIDC-compatible provider.
Add your license key and enable SSO in convoy.json:
convoy.json
{ "license_key": "your-license-key", "auth": { "sso": { "enabled": true, // [optional] Override the callback URL Convoy gives to your IdP. // Defaults to the incoming request origin. Set this if Convoy is // behind a reverse proxy or load balancer. "redirect_url": "https://convoy.yourcompany.com/saml" } }}
Alternatively, use environment variables:
export CONVOY_LICENSE_KEY="your-license-key"export CONVOY_SSO_ENABLED=true# Optional — same as redirect_url aboveexport CONVOY_SSO_REDIRECT_URL="https://convoy.yourcompany.com/saml"
2
Restart Convoy
Restart your instance to apply the new config.
3
Configure your SAML connection
In the Convoy dashboard, go to Organisation Settings and click Configure SSO.
Organisation Settings — Configure SSO
This opens the SSO admin portal where you select your identity provider and complete the SAML setup.
SSO portal — select your identity provider
The portal provides the ACS URL and SP Entity ID you’ll need to enter in your IdP. Configure exactly one SAML connection.
If you need multiple SAML connections, reach out to us at [email protected].
4
Login with SSO
On the login page, click Login with SSO. You’ll be redirected to your IdP, and after authentication you’ll land back in Convoy signed in.
Convoy couldn’t determine where to redirect after authentication. Set the host field in your config to your Convoy instance’s public URL:
{ "host": "https://convoy.yourcompany.com"}
Or set auth.sso.redirect_url explicitly.Use the UI callback path (/saml) rather than API-prefixed paths (/ui/...). If you deploy with a root_path, include it (for example, https://convoy.yourcompany.com/convoy/saml).
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Convoy","colors":{"primary":"#2780F1","light":"#739FEA","dark":"#477BD3"},"logo":{"light":"https://mintcdn.com/convoy/ZDnFuM112cm76jYI/logo/light.svg?fit=max\u0026auto=format\u0026n=ZDnFuM112cm76jYI\u0026q=85\u0026s=3d933080cf301678d7fafe5f50d4ec12","dark":"https://mintcdn.com/convoy/vmJyPsa9GtTKdw-a/logo/dark.svg?fit=max\u0026auto=format\u0026n=vmJyPsa9GtTKdw-a\u0026q=85\u0026s=7d0ea6ef778d7ed00854dc455e9b12ea"},"favicon":"https://mintcdn.com/convoy/Ckv6F6QCAG1QB-UF/favicon.png?fit=max\u0026auto=format\u0026n=Ckv6F6QCAG1QB-UF\u0026q=85\u0026s=cc975351cd155c7828899933dca4f999","background":{"image":"https://mintcdn.com/convoy/Ckv6F6QCAG1QB-UF/background.png?fit=max\u0026auto=format\u0026n=Ckv6F6QCAG1QB-UF\u0026q=85\u0026s=165fcf2460dff22b7e1c8d84d0741646"},"navbar":{"primary":{"type":"github","label":"GitHub","href":"https://github.com/frain-dev/convoy"}},"footer":{"socials":{"twitter":"https://twitter.com/getconvoy?lang=en","linkedin":"https://www.linkedin.com/company/convoy-webhooks"}},"seo":{"metatags":{"canonical":"https://www.getconvoy.io/docs"}},"integrations":{"posthog":{"apiKey":"phc_X7uV1sRNzjoTmWp8uXYrzrfrdUtGdMRTEEklRNt04eb","apiHost":"https://us.i.posthog.com"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://convoy-community.slack.com/join/shared_invite/zt-xiuuoj0m-yPp~ylfYMCV9s038QL0IUQ#/shared-invite/email"},{"anchor":"GitHub","icon":"github","href":"https://github.com/frain-dev/convoy"},{"anchor":"Status","icon":"signal","href":"https://status.getconvoy.io"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"convoy","hasAudioNarration":false,"actualSubdomain":"convoy","customDomains":["getconvoy.io"],"gitSource":{"type":"github","owner":"frain-dev","repo":"convoy-website","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae50032dbe71608b89029e5","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"API Reference","count":70},{"language":"default","tag":"Documentation","count":68},{"language":"default","tag":"Product Manual","count":28},{"language":"default","tag":"Glossary","count":13},{"language":"default","tag":"Endpoints","count":9},{"language":"default","tag":"Events","count":8},{"language":"default","tag":"Subscription Filters","count":8},{"language":"default","tag":"Deployment","count":8},{"language":"default","tag":"Subscriptions","count":7},{"language":"default","tag":"Portal Links","count":6}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"business-and-enterprise/single-sign-on","slug":"/business-and-enterprise/single-sign-on","pageMetadata":{"title":"Single Sign-On (SAML)","og:title":"Single Sign-On (SAML) for Self-Hosted Convoy","og:description":"Set up SAML-based SSO on your self-hosted Convoy instance","description":null,"href":"/business-and-enterprise/single-sign-on"},"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`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,Note,OptimizedImage,Step,Steps}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`SAML SSO lets your team sign in to Convoy using your organisation’s identity provider (IdP). Supported providers include Google, Okta, Entra ID (Azure AD), Auth0, ADP, CAS, ClassLink, Cloudflare, and any custom SAML 2.0 or OIDC-compatible provider.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`A Premium license with the SSO feature.`}),`\n`,_jsx(_components.li,{children:`A SAML 2.0-compatible identity provider.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Enable SSO in your config`,children:[_jsxs(_components.p,{children:[`Add your license key and enable SSO in `,_jsx(_components.code,{children:`convoy.json`}),`:`]}),_jsx(CodeBlock,{filename:`convoy.json`,numberOfLines:`13`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_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\":`#9CDCFE`},children:` \"license_key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"your-license-key\"`}),_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\":`#9CDCFE`},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\":`#9CDCFE`},children:` \"sso\"`}),_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\":`#9CDCFE`},children:` \"enabled\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // [optional] Override the callback URL Convoy gives to your IdP.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Defaults to the incoming request origin. Set this if Convoy is`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // behind a reverse proxy or load balancer.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"redirect_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://convoy.yourcompany.com/saml\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:`Alternatively, use environment variables:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CONVOY_LICENSE_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"your-license-key\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CONVOY_SSO_ENABLED`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`true`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Optional — same as redirect_url above`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CONVOY_SSO_REDIRECT_URL`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://convoy.yourcompany.com/saml\"`})]}),`\n`]})})})]}),_jsx(Step,{title:`Restart Convoy`,children:_jsx(_components.p,{children:`Restart your instance to apply the new config.`})}),_jsxs(Step,{title:`Configure your SAML connection`,children:[_jsxs(_components.p,{children:[`In the Convoy dashboard, go to `,_jsx(_components.strong,{children:`Organisation Settings`}),` and click `,_jsx(_components.strong,{children:`Configure SSO`}),`.`]}),_jsx(Frame,{caption:`Organisation Settings — Configure SSO`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=cd8a7a5acc05bfcb6c952607a7a40924`,\"data-og-width\":`3360`,width:`3360`,\"data-og-height\":`1924`,height:`1924`,\"data-path\":`images/sso-settings.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=280\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=9f0eab8cff84893a95d2773c2dd9137a 280w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=560\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=391ab728cb0c44a690fe656f809a606d 560w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=840\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=e338bd3e543daf4d1e6d9028aff2276d 840w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=1100\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=74be5e4d5bd680db1d3b15f58bb0573b 1100w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=1650\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=37b06ae49948bb6de72a28c62e8f4758 1650w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-settings.png?w=2500\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=915e81472ecc08e6e24bbb82d2d592e7 2500w`})}),_jsx(_components.p,{children:`This opens the SSO admin portal where you select your identity provider and complete the SAML setup.`}),_jsx(Frame,{caption:`SSO portal — select your identity provider`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=f838905fb3ed9302a7260e8d3dc87075`,\"data-og-width\":`3360`,width:`3360`,\"data-og-height\":`1924`,height:`1924`,\"data-path\":`images/sso-portal.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=280\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=7f64b62bd5be2e0622ebf1fef5c5eac6 280w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=560\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=87e86bb91f068c3c6eb7ed344d5764e1 560w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=840\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=8f2109b3c65a338944e1956ff928b996 840w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=1100\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=2ec412e883ed867b712b5e7a1f4a6f0a 1100w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=1650\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=46e518160afd988b92daffad1bc9172a 1650w, https://mintcdn.com/convoy/sGNZVuduEBi1ltRX/images/sso-portal.png?w=2500\u0026fit=max\u0026auto=format\u0026n=sGNZVuduEBi1ltRX\u0026q=85\u0026s=a9b626f4da0d0b99ed2ba169d0325bc4 2500w`})}),_jsxs(_components.p,{children:[`The portal provides the `,_jsx(_components.strong,{children:`ACS URL`}),` and `,_jsx(_components.strong,{children:`SP Entity ID`}),` you’ll need to enter in your IdP. Configure exactly one SAML connection.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`If you need multiple SAML connections, reach out to us at `,_jsx(_components.a,{href:`mailto:[email protected]`,children:`[email protected]`}),`.`]})})]}),_jsxs(Step,{title:`Login with SSO`,children:[_jsxs(_components.p,{children:[`On the login page, click `,_jsx(_components.strong,{children:`Login with SSO`}),`. You’ll be redirected to your IdP, and after authentication you’ll land back in Convoy signed in.`]}),_jsx(Frame,{caption:`Login page with SSO option`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=974ee5082b3e5bbd2045e691e473eccd`,\"data-og-width\":`3360`,width:`3360`,\"data-og-height\":`1924`,height:`1924`,\"data-path\":`images/login-with-sso.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=280\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=7c2f9affa09d23e208d7b2040fdbeba5 280w, https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=560\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=586f4e475c8717e6f2bb974bca503f48 560w, https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=840\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=89bdf3b92671ffaa8e063c697c4cdb9d 840w, https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=1100\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=041d26487c31e637a3b719868427ef0a 1100w, https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=1650\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=81e70927af586fc53397d20767251336 1650w, https://mintcdn.com/convoy/te5h9t5NdaGaVydd/images/login-with-sso.png?w=2500\u0026fit=max\u0026auto=format\u0026n=te5h9t5NdaGaVydd\u0026q=85\u0026s=a16ce22377380fc291eefb2fc79c0b93 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How It Works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`You click `,_jsx(_components.strong,{children:`Login with SSO`}),` on the login page.`]}),`\n`,_jsx(_components.li,{children:`Convoy redirects you to your IdP for authentication.`}),`\n`,_jsx(_components.li,{children:`You authenticate with your IdP.`}),`\n`,_jsx(_components.li,{children:`The IdP sends a SAML assertion back to Convoy.`}),`\n`,_jsx(_components.li,{children:`Convoy validates the assertion and issues a short-lived token.`}),`\n`,_jsxs(_components.li,{children:[`Your browser lands on Convoy’s `,_jsx(_components.code,{children:`/saml`}),` callback with this token.`]}),`\n`,_jsx(_components.li,{children:`Convoy exchanges the token for a session and logs you in.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsx(Heading,{level:`3`,id:`”auth-sso-redirect_url-is-required-for-sso-login”`,children:`”auth.sso.redirect_url is required for SSO login”`}),`\n`,_jsxs(_components.p,{children:[`Convoy couldn’t determine where to redirect after authentication. Set the `,_jsx(_components.code,{children:`host`}),` field in your config to your Convoy instance’s public URL:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,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:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_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\":`#9CDCFE`},children:` \"host\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://convoy.yourcompany.com\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Or set `,_jsx(_components.code,{children:`auth.sso.redirect_url`}),` explicitly.`]}),`\n`,_jsxs(_components.p,{children:[`Use the UI callback path (`,_jsx(_components.code,{children:`/saml`}),`) rather than API-prefixed paths (`,_jsx(_components.code,{children:`/ui/...`}),`). If you deploy with a `,_jsx(_components.code,{children:`root_path`}),`, include it (for example, `,_jsx(_components.code,{children:`https://convoy.yourcompany.com/convoy/saml`}),`).`]}),`\n`,_jsx(Heading,{level:`3`,id:`sso-button-doesn’t-appear-on-the-login-page`,children:`SSO button doesn’t appear on the login page`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Check that your license includes the SSO feature.`}),`\n`,_jsxs(_components.li,{children:[`Verify `,_jsx(_components.code,{children:`auth.sso.enabled`}),` is `,_jsx(_components.code,{children:`true`}),`.`]}),`\n`,_jsx(_components.li,{children:`Restart Convoy after config changes.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`”authentication-failed”-after-idp-redirect`,children:`”Authentication failed” after IdP redirect`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Check that the SAML connection in the SSO portal is configured correctly.`}),`\n`,_jsx(_components.li,{children:`Ensure the ACS URL and SP Entity ID in your IdP match the values shown in the SSO portal.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`blank-page-or-errors-after-callback`,children:`Blank page or errors after callback`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Make sure you’re running the latest version of Convoy.`}),`\n`,_jsx(_components.li,{children:`Clear your browser cache and try again.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related`,children:`Related`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/business-and-enterprise/licensing`,children:`Licensing`}),` — Get and configure a Premium license`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/product-manual/google-sso`,children:`Google SSO`}),` — Sign in with Google OAuth`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/product-manual/rbac`,children:`RBAC`}),` — Manage permissions after sign-in`]}),`\n`]})]})}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":"Single Sign-On (SAML)","og:title":"Single Sign-On (SAML) for Self-Hosted Convoy","og:description":"Set up SAML-based SSO on your self-hosted Convoy instance","description":null,"href":"/business-and-enterprise/single-sign-on"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"How It Works","slug":"how-it-works","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[{"title":"”auth.sso.redirect_url is required for SSO login”","slug":"”auth-sso-redirect_url-is-required-for-sso-login”","depth":3,"children":[]},{"title":"SSO button doesn’t appear on the login page","slug":"sso-button-doesn’t-appear-on-the-login-page","depth":3,"children":[]},{"title":"”Authentication failed” after IdP redirect","slug":"”authentication-failed”-after-idp-redirect","depth":3,"children":[]},{"title":"Blank page or errors after callback","slug":"blank-page-or-errors-after-callback","depth":3,"children":[]}]},{"title":"Related","slug":"related","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"convoy","siteName":"Convoy","title":"Single Sign-On (SAML) for Self-Hosted Convoy","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-21T21:37:03.996Z","originalFileLocation":"business-and-enterprise/single-sign-on.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Convoy\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_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=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Single Sign-On (SAML) for Self-Hosted Convoy\">\u003cmeta data-mint-head property=\"og:description\" content=\"Set up SAML-based SSO on your self-hosted Convoy instance\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Convoy\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://convoy.mintlify.site/docs/_mintlify/api/og/v2?division=Business+%26+Enterprise\u0026amp;title=Single+Sign-On+%28SAML%29\u0026amp;theme=5b5fb8baedd2f29a9049f592\u0026amp;signature=3aba0c568f7eef070d9edd7793fad0f37a59460b49aad9319dc28c67fa4f47ee\">\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 (SAML) for Self-Hosted Convoy\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Set up SAML-based SSO on your self-hosted Convoy instance\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://convoy.mintlify.site/docs/_mintlify/api/og/v2?division=Business+%26+Enterprise\u0026amp;title=Single+Sign-On+%28SAML%29\u0026amp;theme=5b5fb8baedd2f29a9049f592\u0026amp;signature=3aba0c568f7eef070d9edd7793fad0f37a59460b49aad9319dc28c67fa4f47ee\">\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=\"/docs/mintlify-assets/_mintlify/favicons/convoy/kEzgHUgYWKvNq-_s/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Convoy\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2780F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/business-and-enterprise/single-sign-on.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.getconvoy.io/#organization\",\"name\":\"Convoy\",\"url\":\"https://www.getconvoy.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/convoy/ZDnFuM112cm76jYI/logo/light.svg?fit=max\u0026auto=format\u0026n=ZDnFuM112cm76jYI\u0026q=85\u0026s=3d933080cf301678d7fafe5f50d4ec12\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.getconvoy.io/docs#website\",\"name\":\"Convoy\",\"url\":\"https://www.getconvoy.io/docs\",\"publisher\":{\"@id\":\"https://www.getconvoy.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on#webpage\",\"url\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on\",\"name\":\"Single Sign-On (SAML)\",\"dateModified\":\"2026-08-21T21:37:03.996Z\",\"isPartOf\":{\"@id\":\"https://www.getconvoy.io/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Business \u0026 Enterprise\",\"item\":\"https://www.getconvoy.io/docs/business-and-enterprise/licensing\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Single Sign-On (SAML)\",\"item\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on#article\",\"headline\":\"Single Sign-On (SAML)\",\"name\":\"Single Sign-On (SAML)\",\"url\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on\",\"mainEntityOfPage\":{\"@id\":\"https://www.getconvoy.io/docs/business-and-enterprise/single-sign-on#webpage\"},\"dateModified\":\"2026-08-21T21:37:03.996Z\",\"publisher\":{\"@id\":\"https://www.getconvoy.io/#organization\"},\"isPartOf\":{\"@id\":\"https://www.getconvoy.io/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Convoy\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Convoy\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/business-and-enterprise/single-sign-on.md","siteName":"Convoy","nav":{"global":{"anchors":[{"anchor":"Community","icon":"slack","href":"https://convoy-community.slack.com/join/shared_invite/zt-xiuuoj0m-yPp~ylfYMCV9s038QL0IUQ#/shared-invite/email"},{"anchor":"GitHub","icon":"github","href":"https://github.com/frain-dev/convoy"},{"anchor":"Status","icon":"signal","href":"https://status.getconvoy.io"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Home","pages":[{"title":"Quickstart","mode":"wide","href":"/home/quickstart"},{"title":"Introduction","href":"/home/introduction"}]},{"group":"Guides","pages":[{"title":"Send Your First Webhook Event","sidebarTitle":"Send Event","href":"/guides/sending-webhook-example"},{"title":"Receive Your First Webhook Event","sidebarTitle":"Receive Event","href":"/guides/receiving-webhook-example"},{"title":"Best practices for generating webhook events","sidebarTitle":"Best practices for generating webhook events","href":"/guides/best-practices-for-generating-webhook-events"},{"title":"API-driven onboarding","href":"/guides/api-onboarding"}]},{"group":"Deployment","pages":[{"title":"Architecture","href":"/deployment/architecture"},{"title":"Configuration","href":"/deployment/configuration"},{"title":"PostgreSQL \u0026 PGBouncer","sidebarTitle":"PostgreSQL \u0026 PGBouncer","href":"/deployment/postgres-and-pgbouncer"},{"title":"Redis \u0026 Redis Sentinel","sidebarTitle":"Redis \u0026 Redis Sentinel","href":"/deployment/redis-and-sentinel"},{"group":"Install Convoy","pages":[{"title":"Docker","href":"/deployment/install-convoy/docker"},{"title":"Kubernetes","href":"/deployment/install-convoy/kubernetes"},{"title":"AKS (Azure Kubernetes Service)","href":"/deployment/install-convoy/aks"},{"title":"Troubleshooting","href":"/deployment/install-convoy/troubleshooting"}]}]},{"group":"Product Manual","pages":[{"title":"Organizations and Projects","href":"/product-manual/organizations-and-projects"},{"title":"Role-Based Access Control (RBAC)","href":"/product-manual/rbac"},{"title":"Google Single Sign-On (SSO)","href":"/product-manual/google-sso"},{"title":"Endpoints","href":"/product-manual/endpoints"},{"title":"Endpoint verification and outbound connections","href":"/product-manual/endpoint-verification"},{"title":"Signatures","href":"/product-manual/signatures"},{"title":"Sources","href":"/product-manual/sources"},{"title":"Subscriptions","href":"/product-manual/subscriptions"},{"title":"Events and Event Deliveries","href":"/product-manual/events-and-event-deliveries"},{"title":"Portal Links","href":"/product-manual/portal-links"},{"title":"Meta Events","href":"/product-manual/meta-events"},{"title":"Idempotency","href":"/product-manual/idempotency"},{"title":"Webhooks Documentation","href":"/product-manual/webhooks-documentation"},{"group":"Forward Proxies","pages":[{"title":null,"href":"/product-manual/forward-proxies/nginx"},{"title":null,"href":"/product-manual/forward-proxies/smokescreen"}]},{"group":"Message Brokers","pages":[{"title":"Apache Kafka","href":"/product-manual/message-brokers/kafka"},{"title":"Amazon SQS","href":"/product-manual/message-brokers/sqs"},{"title":"Google PubSub","href":"/product-manual/message-brokers/pub-sub"},{"title":"RabbitMQ","href":"/product-manual/message-brokers/rabbitmq"}]},{"title":"Rate Limits","href":"/product-manual/rate-limits"},{"title":"Filters","href":"/product-manual/filters"},{"title":"Functions","href":"/product-manual/functions"},{"title":"Metrics","href":"/product-manual/metrics"},{"title":"Read Replicas","href":"/product-manual/read-replicas"},{"title":"Circuit Breaker","href":"/product-manual/circuit-breaker"},{"title":"Postgres Queue","href":"/product-manual/postgres-queue"},{"title":"Retention Policy","href":"/product-manual/retention-policy"},{"title":"Custom Certificate Authority","href":"/product-manual/custom-certificate-authority"}]},{"group":"Command Line","pages":[{"title":"CLI","sidebarTitle":"Convoy","href":"/cli-file/convoy"},{"title":"Convoy CLI","href":"/cli-file/convoy-cli"}]},{"group":"SDK","pages":[{"title":"SDK","sidebarTitle":"Overview","href":"/sdk/sdk"}]},{"group":"Cloud","pages":[{"title":"Convoy Cloud Upgrade Policy","sidebarTitle":"Cloud Upgrade Policy","href":"/cloud/cloud-upgrade-policy"},{"title":"Convoy Cloud Subscription and Access Policy","sidebarTitle":"Convoy Cloud Subscription and Access Policy","href":"/cloud/cloud-subscription-policy"}]},{"group":"Legal","pages":[{"title":"Support Policy","href":"/legal/support-policy"},{"title":"Software License Agreement","href":"/legal/software-license-agreement"}]},{"group":"Business \u0026 Enterprise","pages":[{"title":"Licensing","href":"/business-and-enterprise/licensing"},{"title":"Paid Features","description":null,"href":"/business-and-enterprise/paid-features"},{"title":"Single Sign-On (SAML)","href":"/business-and-enterprise/single-sign-on"}]},{"group":"Glossary","pages":[{"title":"Glossary","description":"Brief definitions of the technical terms used throughout the Convoy documentation.","href":"/glossary/overview"},{"title":"Projects","href":"/glossary/projects"},{"title":"Endpoints","href":"/glossary/endpoints"},{"title":"Events","href":"/glossary/events"},{"title":"Event delivery","href":"/glossary/event-delivery"},{"title":"Event Types","href":"/glossary/event-types"},{"title":"Delivery Attempts","href":"/glossary/delivery-attempts"},{"title":"Dead Endpoints","href":"/glossary/dead-endpoints"},{"title":"Secrets","href":"/glossary/secrets"},{"title":"Hash Functions","href":"/glossary/hash-functions"},{"title":"Replay Attacks","href":"/glossary/replay-attacks"},{"title":"Rate Limiting Endpoints","href":"/glossary/rate-limiting-endpoints"},{"title":"Retry Schedule","href":"/glossary/retry-schedule"}]},{"group":"Resources","pages":[{"title":"Telemetry","href":"/resources/telemetry"},{"title":"Feature Flags","href":"/resources/feature-flags"}]},{"group":"FAQ","pages":[{"title":"FAQ","sidebarTitle":"Overview","href":"/faq/faq"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/welcome"}]},{"tab":"Webhook Guides","pages":[{"title":"Webhook Guides","href":"/webhook-guides/webhook-retries"}]}]},"basePath":"","title":"Single Sign-On (SAML) for Self-Hosted Convoy","buildId":"dpl_2AK98Hxhwu4fUXpx9atbv41cC328","deploymentId":"dpl_2AK98Hxhwu4fUXpx9atbv41cC328","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-Buk2KjK6.js","DynamicMarkdown-DYYZTGpa.js","zoom-image-lightbox-T84NdC3b.js","lightbox-handle-r17bVUz3.js"]}