Overview
The integration platform supports 4 authentication strategies. Choose based on what the third-party service offers.Quick Comparison
OAuth 2.0
Best for: GitHub, Google, Linear, Vercel, most modern SaaSConfiguration
Key Options Explained
pkce (Proof Key for Code Exchange)
When to use: Some providers require it (GitHub does NOT, Auth0 does)
clientAuthMethod
How to send client credentials during token exchange:
-
'body'(default): Send as form fields -
'header': Send as Basic Auth header
header for: OAuth providers that require Basic Auth (some enterprise providers)
supportsRefreshToken
Controls token refresh behavior:
true(default): Platform auto-refreshes tokens before expiryfalse: Tokens are long-lived (e.g., GitHub Personal Access Tokens)
false if: Provider doesn’t support refresh tokens or tokens never expire
customSettings
For providers with non-standard OAuth requirements:
Example: Rippling needs app name in authorize URL:
app_name → Platform replaces {APP_NAME} in URL.
Access Token in Checks
API Key
Best for: Simple REST APIs with static API keys (e.g., Stripe, SendGrid)Configuration
Key Options
in - Where to send the API key
Header (recommended):
prefix - Add a prefix to the key
Credential Field
User will see a form field to enter the API key:Access in Checks
Basic Auth
Best for: APIs using username/password authentication (e.g., some internal tools)Configuration
Credential Fields
Users will see two fields:Custom Field Names
Access in Checks
Custom Auth
Best for: Complex authentication requiring multiple fields (AWS IAM Role, Azure Service Principal, GCP Service Account)Configuration
Field Types
Field Options
Access in Checks
Choosing an Auth Type
Decision Tree
Comparison: OAuth vs API Key
Recommendation: Use OAuth if the service supports it.
Comparison: Basic Auth vs Custom
Use Basic Auth for: Simple username/password APIs
Use Custom Auth for: Multi-field credentials, service accounts, IAM roles
Examples by Service Type
Cloud Providers (AWS, Azure, GCP)
Use: Custom Auth (service accounts, IAM roles) Why: These services use multi-field credentials that need custom authentication logic. OAuth is possible but service accounts are the recommended approach for programmatic access.SaaS Tools (GitHub, Linear, Notion)
Use: OAuth 2.0 Why: Best user experience, tokens auto-refresh, users can revoke access easily.Internal Tools / Legacy APIs
Use: Basic Auth or API Key Why: Simpler services often use these methods. Choose based on what the API supports.Advanced OAuth Options
PKCE (Proof Key for Code Exchange)
What it is: Extra security for OAuth (prevents authorization code interception) When to enable:code_verifier, hashes it to create code_challenge, sends challenge during authorization, sends verifier during token exchange.
Client Authentication Method
How platform authenticates itself to the provider: Body (default):header when: Provider documentation explicitly requires Basic Auth for client authentication.
Custom Authorization Parameters
Add extra params to the authorization URL:access_type: 'offline'- Google APIs (get refresh token)prompt: 'consent'- Always show consent screen (good for testing)- Custom provider-specific params
Security Best Practices
API Keys
- Use
type: 'password'for sensitive fields (hidden input) - Store in credential vault (auto-encrypted)
- Never log API keys
- Add help text explaining where to find/generate the key
OAuth
- Request minimum scopes needed
- Use
access_type: 'offline'for refresh tokens - Set
supportsRefreshToken: trueto auto-refresh - Explain scope requirements in setup instructions
Basic Auth
- Both username and password are required
- Password field is auto-hidden
- Credentials are auto-encoded to Base64
- Never log passwords
Custom Auth
- Mark sensitive fields as
type: 'password' - Validate all required fields in checks
- Handle missing fields gracefully
- Don’t expose credential values in logs/errors
Complete OAuth Example
Testing Your Auth
OAuth
- Configure platform credentials in
/admin/integrations - Go to
/integrationsand click Connect - Should redirect to provider OAuth screen
- Authorize → Should redirect back successfully
- Check connection is active
API Key / Basic / Custom
- Go to
/integrationsand click Connect - Form should show your credential fields
- Enter test credentials
- Connection should be created successfully
- Run a check to verify credentials work
Debug OAuth Issues
Check API logs for:OAuth completed for [provider]- SuccessOAuth callback error- Authorization failedToken exchange failed- Bad client credentialsInvalid state- State mismatch (check callback URL)
Summary
Choose your auth type:- Service has OAuth? → Use OAuth 2.0
- Single API key? → Use API Key
- Username/password? → Use Basic Auth
- Multiple fields or complex? → Use Custom Auth

