Skip to content

Document OAuth2 partner authentication and authToken usage - #63

Open
marcaaron wants to merge 5 commits into
masterfrom
marcaaron-oauth-authtoken-docs
Open

Document OAuth2 partner authentication and authToken usage#63
marcaaron wants to merge 5 commits into
masterfrom
marcaaron-oauth-authtoken-docs

Conversation

@marcaaron

@marcaaron marcaaron commented Aug 18, 2026

Copy link
Copy Markdown

Make sure you've checked off all these things before submitting:

  • This pull request isn't for a company's fork, it's intended for the upstream Slate shared by everybody.
  • This pull request is submitted to the dev branch.
  • If it makes frontend changes, this pull request has been tested in the latest version of Firefox, Chrome, IE, and Safari.

Summary

Linked issue: https://github.com/Expensify/Expensify/issues/662652

Adds a new OAuth2 partner authentication section to the Authentication docs, covering:

  • The full authorization code flow (redirect → code exchange → tokens)
  • How to use the returned access_token as credentials.authToken in Integration Server requests
  • How to refresh an expired access token
  • A comparison table of both auth methods (partner credentials vs. OAuth2 token)

Also replaces a dead link to oauth_partner_guide.html (404 since the page never existed) with a reference to the new inline section.

Additionally updates nokogiri to >= 1.11.0 and .ruby-version to 2.7.8 so the docs build cleanly on Apple Silicon (arm64).

Add a new section to the Authentication docs covering the full OAuth2
authorization code flow, including how to exchange a code for tokens,
use the access_token as credentials.authToken in IS requests, and
refresh tokens when they expire. Replace a dead link to
oauth_partner_guide.html with this inline content.

Also update nokogiri to >= 1.11.0 and .ruby-version to 2.7.8 so the
docs build on Apple Silicon.
@marcaaron
marcaaron requested a review from trjExpensify August 18, 2026 21:55

@trjExpensify trjExpensify left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coupla' comments!

Comment thread source/index.html.md

To act on behalf of individual Expensify users, use the OAuth2 authorization code flow to obtain a short-lived access token. Pass that token as `credentials.authToken` in your requests.

**Access:** OAuth2 partner authentication is currently in private beta. To request access, contact [concierge@expensify.com](mailto:concierge@expensify.com).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Access:** OAuth2 partner authentication is currently in private beta. To request access, contact [concierge@expensify.com](mailto:concierge@expensify.com).
**Access:** OAuth2 partner authentication is currently in private beta. To request access, contact [partners@expensify.com](mailto:partners@expensify.com).

@NickTooker while we have this in private beta, I think we have any kenny keano email partners@ instead of Conci. You cool with that?

Comment thread source/index.html.md
Keep your <code>client_secret</code> on the server only. Never expose it in client-side code, browser requests, or mobile apps. Any code a user can read or intercept must not contain it.
</aside>

**Client secret:** Your `client_secret` is only shown once when first generated. If you lose it, go to <https://www.expensify.com/tools/integrations/> and click **"Generate new client secret."** This immediately invalidates your old secret — update all systems using it before regenerating.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Client secret:** Your `client_secret` is only shown once when first generated. If you lose it, go to <https://www.expensify.com/tools/integrations/> and click **"Generate new client secret."** This immediately invalidates your old secret — update all systems using it before regenerating.
**Client secret:** Your `client_secret` is only shown once when first generated. If you lose it, go to <https://www.expensify.com/tools/integrations/partners> and click **"Generate new client secret."** This immediately invalidates your old secret — update all systems using it before regenerating.

Isn't this URL missing /partners else it goes to the page that exists now for the existing authentication method?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants