Skip to main content

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 SaaS

Configuration

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
Use header for: OAuth providers that require Basic Auth (some enterprise providers)

supportsRefreshToken

Controls token refresh behavior:
  • true (default): Platform auto-refreshes tokens before expiry
  • false: Tokens are long-lived (e.g., GitHub Personal Access Tokens)
Set to 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:
Platform admin enters 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):
Query parameter:
Use query for: APIs that don’t accept custom headers (rare)

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:
How it works: Platform generates a random 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 (Basic Auth):
Use header when: Provider documentation explicitly requires Basic Auth for client authentication.

Custom Authorization Parameters

Add extra params to the authorization URL:
Common use cases:
  • 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: true to 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

  1. Configure platform credentials in /admin/integrations
  2. Go to /integrations and click Connect
  3. Should redirect to provider OAuth screen
  4. Authorize → Should redirect back successfully
  5. Check connection is active

API Key / Basic / Custom

  1. Go to /integrations and click Connect
  2. Form should show your credential fields
  3. Enter test credentials
  4. Connection should be created successfully
  5. Run a check to verify credentials work

Debug OAuth Issues

Check API logs for:
  • OAuth completed for [provider] - Success
  • OAuth callback error - Authorization failed
  • Token exchange failed - Bad client credentials
  • Invalid 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
OAuth is best when available - better UX, security, and user control.