Skip to main content

Offboarding: which SaaS providers truly revoke

When the identity provider deactivates someone (SCIM), Ambit revokes each of their stored app grants at the provider and keeps a record of the provider's answer. By default it sends a standard RFC 7009 revocation request: POST <revocationURL> with the form fields token and token_type_hint, and the app's client ID and secret as HTTP Basic authentication. Where an app has no revocation URL, Ambit only deletes its own copy of the grant; a token the provider already issued keeps working until it expires.

Some providers use their own format. Ambit picks it from the revocation URL you enter for the app:

Revocation URL to enterFormat Ambit sends
https://api.github.com/applications/{client_id}/grant (GitHub Enterprise Server: https://<host>/api/v3/applications/{client_id}/grant)GitHub: DELETE, app credentials, {"access_token": ...}; removes the whole grant
https://slack.com/api/auth.revokeSlack: the user's token revokes itself; Ambit reads "ok" in the answer
https://api.notion.com/v1/oauth/revokeNotion: app credentials, {"token": ...}, header Notion-Version: 2026-03-11
https://api.hubapi.com/oauth/v1/refresh-tokensHubSpot: DELETE .../refresh-tokens/<refresh token>
anything elsestandard RFC 7009

For GitHub, Slack and Notion, which take the access token, Ambit first renews an expired token. These formats come from each provider's documentation (checked 2026-10-01) and are not tested against the real providers, which needs an account with each. Each provider's endpoint:

ProviderRevocation endpointWorks with a standard (RFC 7009) request?Tokens already issuedWhat is removed
Google (Workspace)POST https://oauth2.googleapis.com/revokeYes (likely: client authentication is not required, so Ambit's is extra)Revoked at once, including the paired tokenThe whole grant
SalesforcePOST https://<MyDomain>.my.salesforce.com/services/oauth2/revokeYes (likely: same reason)Revoking a refresh token revokes its access tokensThe token(s)
LinearPOST https://api.linear.app/oauth/revokeProbably (client authentication not documented)Access tokens expire after 24 hoursAs requested
ZoomPOST https://zoom.us/oauth/revokeProbably (token_type_hint support not documented)Access tokens expire after 1 hourNot documented
GitHub (OAuth App, GitHub App user tokens)DELETE https://api.github.com/applications/{client_id}/grantNo: needs DELETE with a JSON body {"access_token": ...}Removed with the grantThe whole grant (or one token with /token)
SlackGET or POST https://slack.com/api/auth.revokeNo: the token itself as bearerRevoked at onceThe token only
NotionPOST https://api.notion.com/v1/oauth/revokeNo: JSON body and a Notion-Version headerRevoked at onceThe token only
HubSpotDELETE https://api.hubapi.com/oauth/v1/refresh-tokens/{token}No: DELETE with the token in the pathAccess tokens stay valid up to 30 minutesThe refresh token only
Microsoft 365 / Entra ID (Graph)noneNo endpoint. Only admin actions: revokeSignInSessions (all of the user's apps) or deleting the app's consent grantStay valid until they expire (about 1 hour)—
Atlassian (Jira, Confluence Cloud)noneNo endpoint. Only the user can remove the app, in their account settingsStay valid until they expire—

Apps added from a preset show the same answer on the "Set up" screen, and the table of presets in presets.md has a "Revokes at vendor" column with one value per preset.

What this means today​

  • Ambit revokes at the provider for Google and Salesforce, very likely for Linear and Zoom (standard format), and for GitHub, Slack and Notion (their own formats).
  • For HubSpot, Ambit revokes the refresh token; the access token already issued works for up to 30 minutes more. HubSpot offers no way to end it sooner.
  • For Microsoft and Atlassian, no API can revoke a user's grant to a third-party app; deleting Ambit's copy is all that is possible, and existing access tokens expire on their own (about an hour).

Sources: Google, Salesforce, Linear, Zoom, GitHub, Slack, Notion, HubSpot, Microsoft revokeSignInSessions, Microsoft oauth2PermissionGrant delete, Atlassian.