| name | elevenlabs-security-basics |
| description | Apply ElevenLabs security best practices for API keys, webhook HMAC
validation, and voice data protection.
Use when securing API keys, validating webhook signatures, or auditing
ElevenLabs security configuration.
Trigger with "elevenlabs security", "elevenlabs secrets", "secure elevenlabs",
"elevenlabs API key security", "elevenlabs webhook signature",
"elevenlabs HMAC".
|
| allowed-tools | Read, Write, Grep |
| version | 1.6.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","voice","ai","elevenlabs","security","webhooks"] |
| compatibility | Designed for Claude Code |
ElevenLabs Security Basics
Overview
Security best practices for ElevenLabs API key management, webhook HMAC
signature verification, and protecting cloned voice data. ElevenLabs uses a
single API key (xi-api-key) and HMAC webhook authentication.
This SKILL.md carries the workflow at a high level with the essential
skeletons. Full production code for each step lives in
references/implementation.md, and end-to-end
scenarios live in references/examples.md.
Prerequisites
- ElevenLabs SDK installed
- Understanding of environment variables
- Access to ElevenLabs dashboard (Settings > API Keys)
Instructions
Step 1: API Key Management
Keep keys out of source, and add a hook that blocks accidental commits:
ELEVENLABS_API_KEY=sk_your_key_here
.env
.env.local
.env.*.local
#!/bin/bash
if git diff --cached | grep -qE 'sk_[a-zA-Z0-9]{20,}'; then
echo "ERROR: ElevenLabs API key detected in staged changes!"
echo "Remove the key and use environment variables instead."
exit 1
fi
Step 2: Environment-Specific Keys
Load the key at startup, fail fast when it is missing, and warn if a production
key leaks into development. Full getSecurityConfig() implementation:
references/implementation.md.
Step 3: Webhook HMAC Signature Verification
ElevenLabs webhooks carry an ElevenLabs-Signature header formatted as
t=TIMESTAMP,v1=SIGNATURE. Verify it with HMAC-SHA256, reject timestamps older
than 5 minutes (replay protection), and use a timing-safe comparison. Full
verifyWebhookSignature() implementation:
references/implementation.md.