Overview
Proliferate uses two different authentication patterns depending on the endpoint:- API Key in Payload - For SDK data ingestion (errors, logs, replays)
- Bearer Token in Header - For source map uploads and dashboard API access
API Key in Payload
Used by SDKs to ingest data (errors, logs, session replays). The API key is included in the request body.Format
API keys follow the pattern:pk_<random_string>
Example: pk_abc123def456ghi789
Usage
Why in Payload?
Including the API key in the payload allows SDKs to send data viasendBeacon in browsers, which has restrictions on custom headers. This ensures reliable delivery even when the page is unloading.
Security Considerations
- HTTPS Only: Always use HTTPS in production to protect API keys
- No Client-Side Exposure: API keys are exposed in client-side code (browser, mobile apps) - this is expected and safe for ingestion-only operations
- Key Rotation: Rotate keys if you suspect compromise
- Separate Keys per Environment: Use different keys for development, staging, and production
Bearer Token in Header
Used for source map uploads, release management, and dashboard API access. The API key is passed in theAuthorization header.
Format
Usage
Why in Header?
Bearer tokens in headers are the standard for API authentication and work well for:- Build tool integrations (webpack, vite, etc.)
- CI/CD pipelines
- Server-to-server communication
Security Considerations
- Keep Keys Secret: Never commit API keys to version control
- Use Environment Variables: Store keys in CI/CD secrets or environment variables
- Limit Exposure: Only use Bearer authentication in server-side or build-time contexts
Session-Based Authentication (Dashboard)
For dashboard API access (listing projects, viewing issues, etc.), use session-based authentication with cookies.Getting a Session
Users authenticate via WorkOS OAuth:1
User Logs In
User visits
/login and is redirected to WorkOS2
WorkOS Callback
After authentication, WorkOS redirects to
/api/v1/auth/callback3
Session Created
Backend sets secure, HTTP-only cookies
4
Access Dashboard API
All dashboard API calls include session cookies automatically
Usage
Getting API Keys
Via Dashboard
1
Navigate to Project Settings
Go to your project in the dashboard
2
API Keys Section
Click on “API Keys” in the sidebar
3
Create New Key
Click “Create API Key” and give it a descriptive name
4
Copy Key
Copy the key immediately - it’s only shown once!
Via API
Create an API key programmatically:Error Responses
401 Unauthorized
Invalid, missing, or revoked API key:- API key not provided
- API key format incorrect
- API key has been revoked
- API key doesn’t exist
403 Forbidden
Valid API key but insufficient permissions:- API key belongs to a different project
- User doesn’t have access to the organization
Best Practices
Environment-Specific Keys
Use different API keys for each environment:.env.production
.env.staging
.env.development
Naming Conventions
Use descriptive names when creating keys:Production Web AppStaging API ServerDevelopment - John's MachineCI/CD Pipeline
Rotation Strategy
Rotate API keys periodically or when:- A team member with access leaves
- A key may have been exposed (committed to git, shared in chat, etc.)
- As part of regular security hygiene (every 90-180 days)
- Create a new API key
- Update your application/CI with the new key
- Deploy the change
- Revoke the old key
Storage
DO:- Store keys in environment variables
- Use secret management services (AWS Secrets Manager, HashiCorp Vault, etc.)
- Use CI/CD platform secret storage (GitHub Secrets, GitLab CI Variables, etc.)
- Commit keys to version control
- Share keys in chat or email
- Store keys in plain text files
- Hardcode keys in source code
Monitoring
Track API key usage:- Check
last_used_attimestamp in the API keys list - Revoke unused keys to reduce attack surface
- Set up alerts for unusual usage patterns
Rate Limits
Current rate limits:- Error ingestion: 1000 events/second per project
- Log ingestion: 5000 logs/second per project
- Source map uploads: 100 uploads/hour per project
- Dashboard API: 1000 requests/hour per user
Rate limits are subject to change. Contact support if you need higher limits for production use.

