Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Apply AssemblyAI security best practices for API keys, PII, and access control. Use when securing API keys, implementing PII redaction, or configuring temporary tokens for browser-side streaming. Trigger with phrases like "assemblyai security", "assemblyai secrets", "secure assemblyai", "assemblyai API key security", "assemblyai PII".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 173% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 155% | 0% |
Security best practices for AssemblyAI: API key management, temporary tokens for browser clients, PII redaction, and data retention policies.
assemblyai package installedbash# .env (NEVER commit) ASSEMBLYAI_API_KEY=your-api-key-here # .gitignore .env .env.local .env.*.local
typescript// Never hardcode API keys // BAD: const client = new AssemblyAI({ apiKey: 'sk_abc123...' }); // GOOD: import { AssemblyAI } from 'assemblyai'; const client = new AssemblyAI({ apiKey: process.env.ASSEMBLYAI_API_KEY!, });
Never expose your API key in frontend code. Use temporary tokens for browser-side streaming:
typescript// Server-side: /api/assemblyai-token.ts import { AssemblyAI } from 'assemblyai'; const client = new AssemblyAI({ apiKey: process.env.ASSEMBLYAI_API_KEY!, }); export async function GET() { // Token expires after 5 minutes const token = await client.streaming.createTemporaryToken({ expires_in_seconds: 300, }); return Response.json({ token }); } // Client-side: use the temporary token // const { token } = await fetch('/api/assemblyai-token').then(r => r.json()); // const transcriber = new StreamingTranscriber({ token });
typescriptconst transcript = await client.transcripts.transcribe({ audio: audioUrl, redact_pii: true, redact_pii_policies: [ 'email_address', 'phone_number', 'person_name', 'credit_card_number', 'social_security_number', 'date_of_birth', 'medical_condition', 'banking_information', 'us_social_security_number', ], redact_pii_sub: 'entity_name', // or 'hash' // 'entity_name': "My name is [PERSON_NAME]" // 'hash': "My name is ####" }); // Also redact the audio itself const transcriptWithRedactedAudio = await client.transcripts.transcribe({ audio: audioUrl, redact_pii: true, redact_pii_policies: ['person_name', 'phone_number'], redact_pii_audio: true, // Generates audio with PII beeped out });
typescript// Delete transcript data for GDPR/privacy compliance await client.transcripts.delete(transcriptId); // This permanently removes the transcript text and metadata // The audio file at your source URL is NOT deleted (you manage that) // List and bulk-delete old transcripts const page = await client.transcripts.list({ limit: 100 }); for (const t of page.transcripts) { const createdDate = new Date(t.created); const daysOld = (Date.now() - createdDate.getTime()) / (1000 * 60 * 60 * 24); if (daysOld > 30) { await client.transcripts.delete(t.id); console.log(`Deleted transcript ${t.id} (${daysOld.toFixed(0)} days old)`); } }
typescript// Detect sensitive content before it reaches your users const transcript = await client.transcripts.transcribe({ audio: audioUrl, content_safety: true, }); const safetyResults = transcript.content_safety_labels?.results ?? []; for (const result of safetyResults) { for (const label of result.labels) { if (label.confidence > 0.8) { console.warn(`Content safety flag: ${label.label} (${(label.confidence * 100).toFixed(0)}%)`); // Labels include: hate_speech, violence, profanity, etc. } } } // Get overall severity summary const summary = transcript.content_safety_labels?.summary ?? {}; for (const [category, severity] of Object.entries(summary)) { console.log(`${category}: severity ${severity}`); }
.env files listed in .gitignore| Security Issue | Detection | Mitigation | |----------------|-----------|------------| | API key in source code | Git scanning / secrets detection | Rotate key immediately at dashboard | | API key in browser JS | Network tab inspection | Use temporary tokens | | PII in transcripts | Manual review or automated scan | Enable redact_pii | | Old transcripts retained | Audit transcript list | Automate deletion schedule |
For production deployment, see assemblyai-prod-checklist.
Other measured skills in the registry, with their headline benchmark lift.