Lindy Security Basics
Overview
Security practices for Lindy AI agents. Agents are autonomous — they connect to external services, execute actions, and handle data. Security focuses on: API key management, webhook authentication, agent permission scoping, integration account isolation, and connection sharing controls.
Prerequisites
- Lindy account with API access
- Understanding of which integrations your agents use
- For Enterprise: SSO/SCIM configuration access
Instructions
Step 1: API Key Management
# Store API key in environment variable — never in source code
export LINDY_API_KEY="lnd_live_xxxxxxxxxxxxxxxxxxxx"
# Or use a secret manager
# AWS Secrets Manager
aws secretsmanager create-secret \
--name lindy/api-key \
--secret-string "$LINDY_API_KEY"
# Google Secret Manager
echo -n "$LINDY_API_KEY" | gcloud secrets create lindy-api-key \
--data-file=-
Key rotation schedule:
| Environment | Rotation Period | Method |
|---|---|---|
| Development | 30 days | Manual regeneration |
| Staging | 90 days | Automated via CI |
| Production | 90 days | Secret manager + automated rotation |
| Post-incident | Immediately | Manual regeneration + revoke old key |
Step 2: Webhook Authentication
Every webhook trigger generates a unique secret key. Verify it on every inbound request:
// Webhook signature verification middleware
function verifyLindyWebhook(
req: express.Request,
res: express.Response,
next: express.NextFunction
) {
const authHeader = req.headers.authorization;
const expectedToken = process.env.LINDY_WEBHOOK_SECRET;
if (!authHeader || authHeader !== `Bearer ${expectedToken}`) {
console.warn('Rejected unauthorized webhook attempt', {
ip: req.ip,
path: req.path,
timestamp: new Date().toISOString(),
});
return res.status(401).json({ error: 'Unauthorized' });
}
next();
}
app.post('/lindy/callback', verifyLindyWebhook, (req, res) => {
// Process verified webhook
handleWebhook(req.body);
res.json({ received: true });
});
Step 3: Agent Permission Scoping
Lindy agents access external services through authorized connections. Minimize blast radius:
Per-agent integration isolation:
- Authorize a dedicated Gmail account per agent (not your personal inbox)
- Create Slack bot tokens scoped to specific channels
- Use read-only database credentials where possible
- Create separate API keys for each integration
Connection sharing controls:
| Sharing Level | When to Use |
|---|---|
| Private (default) | Personal agents, sensitive data |
| Team shared | Team-wide automation agents |
| Workspace shared | Organization-wide utility agents |
Step 4: Limit Agent Skill Surface Area
Agents with Agent Steps can choose which skills to use. Reduce risk:
- Start with 2-4 focused skills per agent (not the full catalog)
- Avoid giving agents both read AND write access to the same service unless necessary
- Separate “read” agents from “write” agents for critical systems
- Use conditions to gate destructive actions behind human approval
Step 5: Data Handling in Agents
Agent Prompt Security Patterns:
## Data Constraints
- Never include API keys, passwords, or tokens in responses
- Redact email addresses and phone numbers from summaries
- Do not forward customer data to channels outside #support
- If asked to perform an action outside your scope, respond:
"I cannot perform that action. Please contact an admin."
Step 6: Audit Agent Activity
- Task history: Review agent Tasks tab for unexpected actions
- Integration access: Periodically review which services each agent can access
- Credit anomalies: Sudden credit spikes may indicate misuse or misconfiguration
- Connection review: Remove unused integrations from agents
Step 7: Enterprise Security Features
Available on Enterprise plan:
| Feature | Purpose |
|---|---|
| SSO | SAML-based single sign-on |
| SCIM | Automated user provisioning/deprovisioning |
| Audit Logs | Complete activity trail |
| Role-Based Access | Owner/Editor/Viewer workspace roles |
| BAA | HIPAA Business Associate Agreement |
| AES-256 | Encryption at rest and in transit |
Security Checklist
- API keys stored in environment variables or secret manager
-
.envfile in.gitignore - Webhook secrets generated and verified on every request
- Each agent uses minimum necessary integrations
- Separate integration credentials per agent where possible
- Agent prompts include data handling constraints
- Regular review of agent task history for anomalies
- Key rotation schedule defined and followed
- Enterprise: SSO enabled, SCIM configured
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Agent accesses wrong service | Over-permissioned | Remove unnecessary integrations |
| Unauthorized webhook processed | No auth verification | Add Bearer token verification |
| API key leaked in logs | Key in agent output | Add “never output credentials” to prompt |
| Agent sends data to wrong channel | Shared connection | Use per-agent dedicated connections |
Resources
Next Steps
Proceed to lindy-prod-checklist for production readiness.