API Key Configuration Examples¶
This document shows various API key configurations and their validation results.
Example 1: Valid Configuration with Files¶
config/settings.json¶
config/api_keys.txt¶
# Production API keys
Xk9mP2vN4wQ8rL6hJ5fD1sA7yU0bC3eK
yU0bC3eK9nM3pR2tXk9mP2vN4wQ8rL6h
qW3eR5tY7uI9oP1aS2dF4gH6jK8lZ0xC
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
INFO: settings.api_keys: File 'config/api_keys.txt' contains 3 key(s)
INFO: ✅ All API key configurations are valid
✅ Configuration is valid
✅ Result: Valid - All keys loaded successfully
Example 2: Misspelled Filename (Error Caught!)¶
config/settings.json¶
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
ERROR: settings.api_keys: File 'config/api_keyz.txt' does not exist. If this is meant to be an API key, it looks like a file path.
ERROR: ❌ API key configuration validation failed
❌ Configuration has errors (see above)
❌ Result: Error - Typo detected! Should be api_keys.txt, not api_keyz.txt
Example 3: Valid Inline Keys¶
config/settings.json¶
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
INFO: settings.api_keys: Contains 2 inline key(s)
INFO: ✅ All API key configurations are valid
✅ Configuration is valid
✅ Result: Valid - Inline keys are properly formatted
Example 4: Weak Key Warning¶
config/settings.json¶
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
WARNING: settings.api_keys: Key 'test123' is very short (less than 8 characters). Consider using stronger keys.
WARNING: settings.api_keys: Key 'abc' is very short (less than 8 characters). Consider using stronger keys.
INFO: ✅ All API key configurations are valid
✅ Configuration is valid
⚠️ Result: Valid with Warnings - Works but keys are weak
Example 5: Endpoint-Specific Keys¶
config/endpoints.json¶
{
"endpoints": [
{
"path": "/api/public",
"method": "GET",
"service": "public",
"enabled": true,
"requires_auth": false
},
{
"path": "/api/users",
"method": "GET",
"service": "users",
"enabled": true,
"requires_auth": true
},
{
"path": "/api/admin",
"method": "GET",
"service": "admin",
"enabled": true,
"requires_auth": true,
"api_keys": "config/admin_keys.txt"
}
]
}
config/admin_keys.txt¶
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
INFO: settings.api_keys: Contains 2 inline key(s)
INFO: endpoints[/api/admin].api_keys: File 'config/admin_keys.txt' contains 2 key(s)
INFO: ✅ All API key configurations are valid
✅ Configuration is valid
✅ Result: Valid
/api/public- No authentication required/api/users- Uses global keys from settings.json/api/admin- Uses specific keys from admin_keys.txt
Example 6: Empty Key File¶
config/api_keys.txt¶
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
WARNING: settings.api_keys: File 'config/api_keys.txt' contains no valid API keys
ERROR: settings.api_keys: No valid keys found in string
ERROR: ❌ API key configuration validation failed
❌ Configuration has errors (see above)
❌ Result: Error - File exists but has no valid keys
Example 7: Mixed Configuration (File + Inline)¶
config/settings.json¶
config/endpoints.json¶
{
"endpoints": [
{
"path": "/api/premium",
"method": "GET",
"service": "premium",
"enabled": true,
"requires_auth": true,
"api_keys": "premium-key-1,premium-key-2"
}
]
}
Validation Result¶
$ uv run apiary validate-config
🔍 Validating API key configurations...
INFO: Validating API key configurations...
INFO: settings.api_keys: File 'config/global_keys.txt' contains 5 key(s)
INFO: endpoints[/api/premium].api_keys: Contains 2 inline key(s)
INFO: ✅ All API key configurations are valid
✅ Configuration is valid
✅ Result: Valid - Can mix file and inline configurations
Best Practices¶
✅ DO¶
// Use files for production
{
"api_keys": "config/api_keys.txt"
}
// Use strong keys
{
"api_keys": "Xk9mP2vN4wQ8rL6hJ5fD1sA7yU0bC3eK"
}
// Endpoint-specific keys for admin endpoints
{
"path": "/api/admin",
"api_keys": "config/admin_keys.txt"
}
❌ DON'T¶
// Don't use weak keys
{
"api_keys": "test,abc123"
}
// Don't typo file paths
{
"api_keys": "config/api_keyz.txt"
}
// Don't use directories
{
"api_keys": "config/"
}
Generating Secure Keys¶
# Generate a single strong key
python -c "import secrets; print(secrets.token_urlsafe(32))"
# Generate multiple keys
python -c "import secrets; print('\n'.join(secrets.token_urlsafe(32) for _ in range(5)))"
Output: