Creating Secrets
Learn how to create and manage encrypted secrets for API keys, passwords, and tokens.What You’ll Learn
- How to create string secrets (API keys, passwords)
- How to create OAuth2 secrets (auto-refreshing tokens)
- Naming conventions and best practices
- Secret versioning and rotation
Creating a String Secret
String secrets are the most common type - used for API keys, passwords, tokens, and any sensitive text value.Step 1: Navigate to Secrets
- Click Resources in the sidebar
- Select Secrets
- Click Add Secret button
Step 2: Choose Secret Type
Select String Secret For OAuth2 tokens, see OAuth2 Secrets below.Step 3: Enter Secret Details
Secret Name (Required)
The name you’ll use to reference this secret in routes. Format: lowercase with underscores Good examples:Secret Value (Required)
The actual sensitive value to encrypt and store. Examples:- Copy from source carefully (no extra spaces!)
- Value is encrypted immediately after saving
- You won’t be able to view plaintext again
Description (Optional but Recommended)
Document what this secret is for and when to rotate it. Good descriptions:- Remember what each secret is for
- Track rotation schedules
- Know where it’s used
- Easier team collaboration
Tags (Optional)
Add tags to organize secrets. Useful tags:Step 4: Save
Click Create Secret ✅ Done! Your secret is now:- Encrypted with AES-256-GCM
- Stored securely
- Ready to use in routes
Creating OAuth2 Secrets
OAuth2 secrets are special - they automatically refresh access tokens when they expire.When to Use OAuth2 Secrets
Use OAuth2 for services that require token refresh:- ✅ Google APIs (Gmail, Drive, Sheets)
- ✅ Microsoft Graph (Office 365, OneDrive)
- ✅ Shopify
- ✅ HubSpot
- ✅ Salesforce
- ✅ Slack
Step 1: Choose OAuth2 Secret Type
When creating secret, select OAuth2 SecretStep 2: Fill in OAuth2 Details
Secret Name
OAuth2 Configuration
Client ID:Step 3: Save
Click Create Secret ✅ Auto-refresh enabled! KnoxCall will:- Monitor token expiry
- Refresh before expiration
- Update access token automatically
- Log refresh events
Secret Naming Conventions
Pattern: {service}_{environment}_{type}
Examples:
By Service
By Environment
By Purpose
Multiple Secrets for Same Service
When you need different keys for different purposes:Environment-Specific Secrets
Create separate secrets for each environment:Production Secrets
Staging Secrets
Development Secrets
Best Practices
✅ Do
1. Use descriptive names❌ Don’t
1. Don’t commit secrets to gitSecret Security
How Secrets Are Stored
- Encryption: AES-256-GCM (military-grade)
- Envelope encryption: Each secret has unique encryption key
- Master key: Stored separately, never exposed
- Integrity: SHA-256 checksum verification
Who Can Access Secrets
View encrypted secrets:- All team members with access
- Nobody - not even admins!
- Plaintext only visible when:
- Initially created (one-time viewing)
- Decrypted server-side during requests
- Never shown in logs or UI
- Anyone with route edit permissions
Secret Transmission
When requests use secrets:- Client makes request to KnoxCall
- KnoxCall loads route config
- Sees
{{secret:stripe_key}}template - Decrypts secret server-side
- Injects into request to backend
- Client never sees plaintext!
Common Use Cases
1. Payment APIs
Stripe:2. Email Services
SendGrid:3. SMS Services
Twilio:4. Database Credentials
PostgreSQL:5. Webhook Secrets
GitHub:6. Printing Services
PrintNode:Secret Versioning
KnoxCall tracks secret versions for safe rotation.Creating a New Version
When rotating a secret:- Go to Secrets
- Click on secret name
- Click Add New Version
- Enter new value
- Save
- New version becomes active immediately
- Old version preserved (for rollback)
- All routes using secret now use new value
- Zero downtime!
Viewing Version History
- Click secret name
- Go to Version History tab
- See all versions with timestamps
- Can rollback if needed
Troubleshooting
Secret Not Found in Templates
Error:Secret 'stripe_key' not found
Causes:
- Typo in secret name
- Secret was deleted
- Wrong syntax in template
- Check secret exists: Resources → Secrets
- Verify spelling matches exactly
- Check template syntax:
{{secret:name}}
Cannot View Secret Value
Symptom: Want to see what the value is. Cause: Plaintext never shown after creation (security feature). Solution:- Get value from original source
- Or create new version with known value
Secret Not Injecting
Symptom: Backend receives literal{{secret:stripe_key}} text.
Causes:
- Template syntax error
- Secret doesn’t exist
- Injection disabled
- Check logs - what was actually sent?
- Verify template syntax is correct
- Test secret exists and name matches
- Verify inject headers is enabled on route
Quick Reference
| Task | Steps |
|---|---|
| Create string secret | Resources → Secrets → Add Secret → String |
| Create OAuth2 secret | Resources → Secrets → Add Secret → OAuth2 |
| Rotate secret | Click secret → Add New Version |
| View versions | Click secret → Version History |
| Delete secret | Click secret → Delete (⚠️ permanent) |
Next Steps
Using Secrets
How to inject secrets into routes
Secrets Overview
Complete secrets guide
OAuth2 Flow
Set up OAuth2 auto-refresh
Rotation Strategies
Best practices for rotating secrets