Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.
OAuth Apps allow third-party applications to access the Essal API on behalf of users. Users grant permission to specific scopes, and your app receives short-lived access tokens scoped to exactly what was requested.
1. Generate code_verifier and code_challenge2. Redirect user to: https://access.essal.cloud/oauth/authorize ?client_id=YOUR_CLIENT_ID &redirect_uri=https://myapp.example.com/oauth/callback &response_type=code &scope=office:read project:write &code_challenge=BASE64URL(SHA256(verifier)) &code_challenge_method=S2563. User approves → redirect to your callback with ?code=AUTH_CODE4. Exchange for tokens: POST https://access.essal.cloud/oauth/token { "grant_type": "authorization_code", "code": "AUTH_CODE", "redirect_uri": "https://myapp.example.com/oauth/callback", "client_id": "YOUR_CLIENT_ID", "code_verifier": "VERIFIER" }
POST https://access.essal.cloud/oauth/token{ "grant_type": "refresh_token", "refresh_token": "YOUR_REFRESH_TOKEN", "client_id": "YOUR_CLIENT_ID"}
Refresh tokens are rotated on each use. Store the new refresh token from every token response. Using an old refresh token will invalidate the entire session.
Users can revoke your app’s access at any time from Settings → Connected Apps. Your app will receive a 401 on the next API request when access has been revoked.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Essal Developer Docs","colors":{"primary":"#0066FF","light":"#3D8BFF","dark":"#0050B4"},"logo":{"light":"https://mintcdn.com/essal/5qVV5p4Y6tAbM76k/logo/logo.svg?fit=max\u0026auto=format\u0026n=5qVV5p4Y6tAbM76k\u0026q=85\u0026s=706e0f6b7817c8a2af008f21830be42b","dark":"https://mintcdn.com/essal/5qVV5p4Y6tAbM76k/logo/logo.svg?fit=max\u0026auto=format\u0026n=5qVV5p4Y6tAbM76k\u0026q=85\u0026s=706e0f6b7817c8a2af008f21830be42b","href":"https://essal.cloud"},"favicon":"https://mintcdn.com/essal/McBxieepy9CPQ7G0/favicon.png?fit=max\u0026auto=format\u0026n=McBxieepy9CPQ7G0\u0026q=85\u0026s=10fba0b2f9e4f93957e9338d17ef82cb","api":{"playground":{}},"background":{},"footer":{"socials":{"github":"https://github.com/essal","facebook":"https://facebook.com/essal","linkedin":"https://www.linkedin.com/company/essal"},"links":[{"items":[{"label":"Office","href":"https://essal.cloud/products/office"},{"label":"Access","href":"https://essal.cloud/products/access"},{"label":"Sales","href":"https://essal.cloud/products/sales"},{"label":"Careers","href":"https://essal.cloud/products/careers"},{"label":"Project","href":"https://essal.cloud/products/project"},{"label":"Guard","href":"https://essal.cloud/products/guard"}]},{"items":[{"label":"Help Center","href":"https://support.essal.cloud"},{"label":"Training","href":"https://essal.cloud/training"},{"label":"Security Center","href":"https://essal.cloud/security"},{"label":"Legal Center","href":"https://legal.essal.cloud/"},{"label":"Certifications","href":"https://credentials.essal.cloud/"}]},{"items":[{"label":"About Us","href":"https://essal.cloud/about"},{"label":"Careers","href":"https://careers.essal.cloud/"},{"label":"Newsroom","href":"https://newsroom.essal.cloud/"},{"label":"Become a Partner","href":"https://essal.cloud/partners"},{"label":"Brand Assets","href":"https://brand.essal.cloud/"},{"label":"Contact","href":"https://essal.cloud/contact"}]},{"items":[{"label":"Privacy","href":"https://legal.essal.cloud/privacy"},{"label":"Terms of use","href":"https://legal.essal.cloud/terms"},{"label":"Leave Feedback","href":"https://review.essal.cloud/"},{"label":"Status Page","href":"https://status.essal.cloud/"}]}]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"essal","hasAudioNarration":false,"actualSubdomain":"essal","customDomains":["developers.essal.cloud"],"gitSource":{"type":"github","owner":"essalhq","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"4d503a57-591d-47e7-9d7d-1abd2ae897c8","liveDeploymentHistoryId":"6a5383090b5bb62de3ce1c58","schemaVersion":"v3"},"entitlements":{},"buildId":"6a5383090b5bb62de3ce1c58:success","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Documentation","count":38},{"language":"default","tag":"API Reference","count":23},{"language":"default","tag":"SDKs \u0026 Tools","count":8},{"language":"default","tag":"Platform Concepts","count":6},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Integrations","count":5},{"language":"default","tag":"Official SDKs","count":5},{"language":"default","tag":"Webhooks","count":4},{"language":"default","tag":"Changelog","count":4},{"language":"default","tag":"Changelog Updates","count":4}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"a[href*=\"mintlify.com?utm_campaign=poweredBy\"]{display:none!important}"}],"page":{"pagePath":"integrations/oauth-apps","slug":"/integrations/oauth-apps","pageMetadata":{"title":"OAuth Apps","description":"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.","href":"/integrations/oauth-apps"},"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: \"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\"\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={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`OAuth Apps`}),` allow third-party applications to access the Essal API on behalf of users. Users grant permission to specific scopes, and your app receives short-lived access tokens scoped to exactly what was requested.`]}),`\n`,_jsx(Heading,{level:`2`,id:`registering-an-oauth-app`,children:`Registering an OAuth App`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Settings → Developer → OAuth Apps`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Register New App`})]}),`\n`,_jsx(_components.li,{children:`Enter your app name, homepage URL, and redirect URIs`}),`\n`,_jsxs(_components.li,{children:[`Copy the `,_jsx(_components.code,{children:`client_id`}),` and `,_jsx(_components.code,{children:`client_secret`})]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Or register via API:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /v1/access/oauth-apps`})]}),`\n`,_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:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"MyIntegration\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"homepage_url\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://myapp.example.com\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"redirect_uris\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://myapp.example.com/oauth/callback\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"scopes\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"office:read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"project:read\",`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"project:write\"]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`authorization-flow-pkce`,children:`Authorization Flow (PKCE)`}),`\n`,_jsx(CodeBlock,{numberOfLines:`22`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`22`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`1. Generate code_verifier and code_challenge`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`2. Redirect user to:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` https://access.essal.cloud/oauth/authorize`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ?client_id=YOUR_CLIENT_ID`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \u0026redirect_uri=https://myapp.example.com/oauth/callback`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \u0026response_type=code`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \u0026scope=office:read project:write`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \u0026code_challenge=BASE64URL(SHA256(verifier))`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \u0026code_challenge_method=S256`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`3. User approves → redirect to your callback with ?code=AUTH_CODE`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`4. Exchange for tokens:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` POST https://access.essal.cloud/oauth/token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"grant_type\": \"authorization_code\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"code\": \"AUTH_CODE\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"redirect_uri\": \"https://myapp.example.com/oauth/callback\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"client_id\": \"YOUR_CLIENT_ID\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"code_verifier\": \"VERIFIER\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`token-lifetimes`,children:`Token Lifetimes`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Token`}),_jsx(_components.th,{children:`Lifetime`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Access Token`}),_jsx(_components.td,{children:`1 hour`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Refresh Token`}),_jsx(_components.td,{children:`30 days (rolling)`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`refreshing-tokens`,children:`Refreshing Tokens`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,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:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://access.essal.cloud/oauth/token`})]}),`\n`,_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:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"grant_type\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"refresh_token\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"refresh_token\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_REFRESH_TOKEN\",`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` \"client_id\"`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"YOUR_CLIENT_ID\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Refresh tokens are rotated on each use. Store the new refresh token from every token response. Using an old refresh token will invalidate the entire session.`})}),`\n`,_jsx(Heading,{level:`2`,id:`revoking-access`,children:`Revoking Access`}),`\n`,_jsxs(_components.p,{children:[`Users can revoke your app’s access at any time from `,_jsx(_components.strong,{children:`Settings → Connected Apps`}),`. Your app will receive a `,_jsx(_components.code,{children:`401`}),` on the next API request when access has been revoked.`]})]})}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":"OAuth Apps","description":"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.","href":"/integrations/oauth-apps"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Registering an OAuth App","slug":"registering-an-oauth-app","depth":2,"children":[]},{"title":"Authorization Flow (PKCE)","slug":"authorization-flow-pkce","depth":2,"children":[]},{"title":"Token Lifetimes","slug":"token-lifetimes","depth":2,"children":[]},{"title":"Refreshing Tokens","slug":"refreshing-tokens","depth":2,"children":[]},{"title":"Revoking Access","slug":"revoking-access","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"essal","siteName":"Essal Developer Docs","title":"OAuth Apps - Essal Developer Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-12T12:05:45.705Z","originalFileLocation":"integrations/oauth-apps.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Essal Developer Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_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/essal/hV1lHJlq_XIJhUPP/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"OAuth Apps - Essal Developer Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Essal Developer Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.essal.cloud/integrations/oauth-apps\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://essal.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=OAuth+Apps\u0026amp;description=Register+an+OAuth+app+to+build+integrations+that+act+on+behalf+of+Essal+users+with+scoped+access.\u0026amp;theme=d5c245af879c7f969a007e7d\u0026amp;signature=e3661050dd6e6ea00e9e98f228a27f63a2a47b7f4f91b0cfeeb41cfb446bf2c8\">\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=\"OAuth Apps - Essal Developer Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://essal.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=OAuth+Apps\u0026amp;description=Register+an+OAuth+app+to+build+integrations+that+act+on+behalf+of+Essal+users+with+scoped+access.\u0026amp;theme=d5c245af879c7f969a007e7d\u0026amp;signature=e3661050dd6e6ea00e9e98f228a27f63a2a47b7f4f91b0cfeeb41cfb446bf2c8\">\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/essal/hV1lHJlq_XIJhUPP/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Essal Developer Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0066FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.essal.cloud/integrations/oauth-apps\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/oauth-apps.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.essal.cloud/#organization\",\"name\":\"Essal Developer Docs\",\"url\":\"https://developers.essal.cloud\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/essal/5qVV5p4Y6tAbM76k/logo/logo.svg?fit=max\u0026auto=format\u0026n=5qVV5p4Y6tAbM76k\u0026q=85\u0026s=706e0f6b7817c8a2af008f21830be42b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.essal.cloud#website\",\"name\":\"Essal Developer Docs\",\"url\":\"https://developers.essal.cloud\",\"publisher\":{\"@id\":\"https://developers.essal.cloud/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.essal.cloud/integrations/oauth-apps#webpage\",\"url\":\"https://developers.essal.cloud/integrations/oauth-apps\",\"name\":\"OAuth Apps\",\"description\":\"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\",\"dateModified\":\"2026-07-12T12:05:45.705Z\",\"isPartOf\":{\"@id\":\"https://developers.essal.cloud#website\"},\"breadcrumb\":{\"@id\":\"https://developers.essal.cloud/integrations/oauth-apps#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.essal.cloud/integrations/oauth-apps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://developers.essal.cloud/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OAuth Apps\",\"item\":\"https://developers.essal.cloud/integrations/oauth-apps\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.essal.cloud/integrations/oauth-apps#article\",\"headline\":\"OAuth Apps\",\"name\":\"OAuth Apps\",\"description\":\"Register an OAuth app to build integrations that act on behalf of Essal users with scoped access.\",\"url\":\"https://developers.essal.cloud/integrations/oauth-apps\",\"mainEntityOfPage\":{\"@id\":\"https://developers.essal.cloud/integrations/oauth-apps#webpage\"},\"dateModified\":\"2026-07-12T12:05:45.705Z\",\"publisher\":{\"@id\":\"https://developers.essal.cloud/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.essal.cloud#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Essal Developer Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Essal Developer Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"Authentication","href":"/getting-started/authentication"},{"title":"Environments","href":"/getting-started/environments"},{"title":"Rate Limits","href":"/getting-started/rate-limits"}]},{"group":"Platform Concepts","pages":[{"title":"Workspaces","href":"/concepts/workspace"},{"title":"Apps","href":"/concepts/apps"},{"title":"Users \u0026 Roles","href":"/concepts/users-and-roles"},{"title":"Organizations","href":"/concepts/organizations"},{"title":"Data Model","href":"/concepts/data-model"},{"title":"Events","href":"/concepts/events"}]},{"group":"App Guides — Office","pages":[{"title":"Create a Document","href":"/guides/office/create-document"},{"title":"Collaborate in Real Time","href":"/guides/office/collaborate-in-real-time"},{"title":"Export Formats","href":"/guides/office/export-formats"}]},{"group":"App Guides — Access","pages":[{"title":"Set Up SSO","href":"/guides/access/setup-sso"},{"title":"Provision Users","href":"/guides/access/provision-users"},{"title":"Manage Directories","href":"/guides/access/manage-directories"}]},{"group":"App Guides — Sales","pages":[{"title":"Import Contacts","href":"/guides/sales/import-contacts"},{"title":"Manage Pipeline","href":"/guides/sales/manage-pipeline"},{"title":"Track Deals","href":"/guides/sales/track-deals"}]},{"group":"App Guides — Careers","pages":[{"title":"Post a Job","href":"/guides/careers/post-job"},{"title":"Review Applicants","href":"/guides/careers/review-applicants"},{"title":"Manage Hiring Pipeline","href":"/guides/careers/manage-pipeline"}]},{"group":"App Guides — Project","pages":[{"title":"Create a Project","href":"/guides/project/create-project"},{"title":"Manage Tasks","href":"/guides/project/manage-tasks"},{"title":"Track Time","href":"/guides/project/track-time"}]},{"group":"App Guides — Guard","pages":[{"title":"Configure Policies","href":"/guides/guard/configure-policies"},{"title":"View Audit Trail","href":"/guides/guard/view-audit-trail"},{"title":"Threat Alerts","href":"/guides/guard/threat-alerts"}]},{"group":"Integrations","pages":[{"title":"Integrations Overview","href":"/integrations/overview"},{"title":"Webhooks","description":"Set up and manage webhook subscriptions to receive real-time events from the Essal platform.","href":"/integrations/webhooks"},{"title":"OAuth Apps","href":"/integrations/oauth-apps"},{"title":"SSO / SAML","description":"Connect an identity provider to Essal Access using SAML 2.0 or OIDC for single sign-on.","href":"/integrations/sso-saml"},{"title":"Third-Party Integrations","href":"/integrations/third-party"}]},{"group":"Security \u0026 Compliance","pages":[{"title":"Data Privacy","href":"/security/data-privacy"},{"title":"Encryption","href":"/security/encryption"},{"title":"Audit Logs","href":"/security/audit-logs"},{"title":"IP Allowlisting","href":"/security/ip-allowlisting"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"tab":"SDKs \u0026 Tools","pages":[{"title":"SDKs \u0026 Tools","href":"/sdks/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/2026-07-01"}]},{"tab":"Support","pages":[{"title":"Support","href":"/support/status"}]}]},"basePath":"","title":"OAuth Apps - Essal Developer Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":[],"chunks":[]}