Overview
The integration platform supports 4 authentication strategies. Choose based on what the third-party service offers.Quick Comparison
| Type | When to Use | User Setup | Platform Setup | Token Refresh |
|---|---|---|---|---|
| OAuth 2.0 | Service has OAuth | 1-click connect | Admin configures OAuth app | Auto |
| API Key | Service uses API keys | User enters key | None | N/A (keys don’t expire) |
| Basic Auth | Service uses username/password | User enters creds | None | N/A |
| Custom | Complex multi-field auth | User enters multiple fields | None | N/A |
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
| Type | UI Component | When to Use | Example |
|---|---|---|---|
text | Text input | Single-line text | Project ID, Account ID |
password | Password input (hidden) | Secrets, tokens | API keys, passwords |
textarea | Multi-line textarea | Long text, JSON | Service account JSON key |
select | Dropdown (fixed options) | Choose from list | Environment (prod/dev) |
combobox | Dropdown + custom input | Choose or type | AWS region, timezone |
number | Number input | Numeric values | Port, timeout |
url | URL input (with validation) | Web addresses | Webhook URL, API endpoint |
Field Options
Access in Checks
Choosing an Auth Type
Decision Tree
Comparison: OAuth vs API Key
| Aspect | OAuth 2.0 | API Key |
|---|---|---|
| User Experience | Best (1-click) | OK (find & paste key) |
| Security | Tokens expire & refresh | Long-lived secrets |
| Platform Setup | Admin must configure | None needed |
| Revocation | User revokes in provider | User must regenerate key |
| Scope Control | Request specific permissions | Key has fixed permissions |
Comparison: Basic Auth vs Custom
| Aspect | Basic Auth | Custom Auth |
|---|---|---|
| Fields | 2 (username/password) | Any number |
| Encoding | Auto (Base64) | Manual in check code |
| Use Case | Simple APIs | Complex auth (AWS, Azure) |
| Setup | Minimal config | Define all fields |
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

