Apply Apollo.io API security best practices.
Use when securing Apollo integrations, managing API keys,
or implementing secure data handling.
Trigger with phrases like "apollo security", "secure apollo api",
"apollo api key security", "apollo data protection".
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Apply Apollo.io API security best practices.
Use when securing Apollo integrations, managing API keys,
or implementing secure data handling.
Trigger with phrases like "apollo security", "secure apollo api",
"apollo api key security", "apollo data protection".
allowed-tools
Read, Grep, Bash(curl:*)
version
1.0.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
Apollo Security Basics
Overview
Implement security best practices for Apollo.io API integrations including key management, data protection, and access controls.
API Key Security
Never Hardcode Keys
// BAD - Never do thisconst apiKey = 'sk_live_abc123...';
// GOOD - Use environment variablesconst apiKey = process..;
(!process..) {
();
}
// Force HTTPSconst apolloClient = axios.create({
baseURL: 'https://api.apollo.io/v1', // Always HTTPStimeout: 30000,
});
// Validate SSL certificates (default in production)// For development ONLY, you might need:// httpsAgent: new https.Agent({ rejectUnauthorized: false })
IP Allowlisting
// If using Apollo Enterprise with IP restrictions// Configure your server's outbound IP in Apollo settings// For cloud deployments, use static IPs:// - Google Cloud: Configure Cloud NAT with static IPs// - AWS: Use NAT Gateway with Elastic IP// - Azure: Configure NAT Gateway with public IP
Data Protection
PII Handling
// src/lib/apollo/pii-handler.tsconstPII_FIELDS = ['email', 'phone', 'personal_email', 'mobile_phone'];
functionredactPII(data: any, fields: string[] = PII_FIELDS): any {
if (!data) return data;
if (Array.isArray(data)) {
return data.map((item) =>redactPII(item, fields));
}
if (typeof data === 'object') {
constresult: any = {};
for (const [key, value] ofObject.entries(data)) {
if (fields.includes(key) && typeof value === 'string') {
result[key] = redactForLogging(value);
} else {
result[key] = redactPII(value, fields);
}
}
return result;
}
return data;
}
functionredactForLogging(value: string): string {
if (value.includes('@')) {
// Email: show first 2 chars and domainconst [local, domain] = value.split('@');
return`${local.substring(0, 2)}***@${domain}`;
}
// Phone: show last 4 digitsreturn`***-***-${value.slice(-4)}`;
}
// Usage in loggingconsole.log('Contact data:', redactPII(contactData));