juicebox-security-basics
Best practices for managing Juicebox API keys and securing webhooks to protect sensitive people search data.
Install
mkdir -p .claude/skills/juicebox-security-basics && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/7843" && unzip -o skill.zip -d .claude/skills/juicebox-security-basics && rm skill.zipInstalls to .claude/skills/juicebox-security-basics
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Apply Juicebox security best practices.Key capabilities
- →Manage API keys via secrets managers
- →Verify webhook signatures using HMAC
- →Validate search query inputs with schemas
- →Redact PII from application logs
How it works
The security pattern implements input validation, cryptographic signature verification for webhooks, and field-level redaction to protect sensitive candidate data.
Inputs & outputs
When to use juicebox-security-basics
- →Securing Juicebox API keys
- →Verifying webhook signatures
- →Implementing audit logs for API calls
- →Managing PII data retention
About this skill
Juicebox Security Basics
Overview
Juicebox provides AI-powered people search and analysis, processing datasets containing professional profiles, contact enrichment data, and query results. Security concerns include API key protection, GDPR/CCPA compliance for candidate and contact data, data retention policy enforcement, and ensuring enriched contact information (emails, phone numbers) is not leaked through logs or unencrypted storage. A compromised API key grants access to people search and enrichment capabilities.
API Key Management
function createJuiceboxClient(): { apiKey: string; baseUrl: string } {
const apiKey = process.env.JUICEBOX_API_KEY;
if (!apiKey) {
throw new Error("Missing JUICEBOX_API_KEY — store in secrets manager, never in code");
}
// Juicebox keys access people data — treat as PII-adjacent
console.log("Juicebox client initialized (key suffix:", apiKey.slice(-4), ")");
return { apiKey, baseUrl: "https://api.juicebox.ai/v1" };
}
Webhook Signature Verification
import crypto from "crypto";
import { Request, Response, NextFunction } from "express";
function verifyJuiceboxWebhook(req: Request, res: Response, next: NextFunction): void {
const signature = req.headers["x-juicebox-signature"] as string;
const secret = process.env.JUICEBOX_WEBHOOK_SECRET!;
const expected = crypto.createHmac("sha256", secret).update(req.body).digest("hex");
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
res.status(401).send("Invalid signature");
return;
}
next();
}
Input Validation
import { z } from "zod";
const PeopleSearchSchema = z.object({
query: z.string().min(1).max(500),
filters: z.object({
location: z.string().optional(),
company: z.string().optional(),
title: z.string().optional(),
industry: z.string().optional(),
}).optional(),
max_results: z.number().int().min(1).max(100).default(25),
enrich_contacts: z.boolean().default(false),
});
function validateSearchQuery(data: unknown) {
return PeopleSearchSchema.parse(data);
}
Data Protection
const JUICEBOX_PII_FIELDS = ["personal_email", "phone_number", "social_profiles", "home_address", "enrichment_data"];
function redactJuiceboxLog(record: Record<string, unknown>): Record<string, unknown> {
const redacted = { ...record };
for (const field of JUICEBOX_PII_FIELDS) {
if (field in redacted) redacted[field] = "[REDACTED]";
}
return redacted;
}
Security Checklist
- API keys stored in secrets manager, separate keys per environment
- Enriched contact data encrypted at rest
- GDPR consent documented for EU candidate data
- CCPA opt-out mechanism implemented for California residents
- Data retention policy enforced (auto-delete after defined period)
- Contact enrichment results never logged in plaintext
- Search queries redacted in application logs
- Pre-commit hook blocks
jb_live_*credential patterns
Error Handling
| Vulnerability | Risk | Mitigation |
|---|---|---|
| Leaked API key | Unauthorized people search and enrichment | Secrets manager + key rotation |
| Contact data in logs | PII exposure violating GDPR/CCPA | Field-level redaction pipeline |
| Missing data retention | Stale candidate data accumulates | Automated retention enforcement |
| Enrichment without consent | Privacy regulation violation | Consent gate before enrichment calls |
| Unencrypted contact storage | Bulk PII breach from database leak | Encryption at rest + access controls |
Resources
- Juicebox Privacy
- OWASP API Security Top 10
Next Steps
See juicebox-prod-checklist.
When not to use it
- →When using hardcoded credentials in source code
Prerequisites
Limitations
- →Requires manual implementation of redaction logic
- →Does not replace organizational compliance audits
How it compares
This approach enforces security at the code level rather than relying on external infrastructure security alone.
Compared to similar skills
juicebox-security-basics side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| juicebox-security-basics (this skill) | 1 | 27d | Review | Intermediate |
| juicebox-prod-checklist | 1 | 27d | Caution | Beginner |
| vercel-rate-limits | 0 | 27d | Review | Intermediate |
| fix-dependabot-alerts | 18 | 6mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
juicebox-prod-checklist
jeremylongshore
Execute Juicebox production deployment checklist. Use when preparing for production launch, validating deployment readiness, or performing pre-launch reviews. Trigger with phrases like "juicebox production", "deploy juicebox prod", "juicebox launch checklist", "juicebox go-live".
vercel-rate-limits
jeremylongshore
Implement Vercel rate limiting, backoff, and idempotency patterns. Use when handling rate limit errors, implementing retry logic, or optimizing API request throughput for Vercel. Trigger with phrases like "vercel rate limit", "vercel throttling", "vercel 429", "vercel retry", "vercel backoff".
fix-dependabot-alerts
microsoft
Fix Dependabot security alerts by updating vulnerable npm dependencies. Use when the user mentions "dependabot", "security alerts", "vulnerability", "CVE", or wants to update packages with security issues.
security-best-practices
openai
Perform language and framework specific security best-practice reviews and suggest improvements. Trigger only when the user explicitly requests security best practices guidance, a security review/report, or secure-by-default coding help. Trigger only for supported languages (python, javascript/typescript, go). Do not trigger for general code review, debugging, or non-security tasks.
security-scan
redpanda-data
Resolve npm dependency vulnerabilities detected by security scans.
azure-keyvault-keys-ts
microsoft
Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys.