Skip to content
lindy-webhooks-events logo

Lindy Webhooks & Events

lindy-webhooks-events

Configure Lindy AI webhook triggers, callback patterns, and event handling.

SKILL.md

Full skill instructions

Lindy Webhooks & Events

Overview

Lindy supports webhooks in two directions: Inbound (Webhook Received trigger wakes an agent) and Outbound (HTTP Request action calls your API). This skill covers both patterns, plus the callback pattern for async two-way communication.

Prerequisites

  • Lindy account with active agents
  • HTTPS endpoint for receiving callbacks (if using outbound/​callback patterns)
  • Completed lindy-install-auth setup

Webhook Architecture

INBOUND (your system triggers Lindy):
[Your App] --POST--> https://public.lindy.ai/​api/​v1/​webhooks/<id>
                         ↓
                    [Lindy Agent Wakes Up]
                         ↓
                    [Processes with LLM]
                         ↓
                    [Executes Actions]

OUTBOUND (Lindy calls your system):
[Lindy Agent] --HTTP Request action--> https://your-api.com/​endpoint
                                            ↓
                                       [Your Handler]

CALLBACK (two-way async):
[Your App] --POST with callbackUrl--> [Lindy Agent]
                                          ↓
[Your App] <--POST to callbackUrl-- [Lindy: Send POST to Callback]

Instructions

Step 1: Create Webhook Received Trigger

  1. In your agent, click the trigger node

  2. Select Webhook Received

  3. Lindy generates a unique URL:

    https://public.lindy.ai/​api/​v1/​webhooks/<unique-id>
    
  4. Click Generate Secret — copy immediately (shown only once)

  5. Configure follow-up processing mode:

    • Process in workflow: Handle in current workflow
    • Spawn separate task: Each webhook creates a new task
    • Discard follow-ups: Ignore subsequent requests while processing

Step 2: Access Webhook Data in Workflow

Reference incoming webhook data in any subsequent action field:

VariableDescriptionExample
{{webhook_received.request.body}}Full JSON payload{"event": "order.created", ...}
{{webhook_received.request.body.event}}Specific field"order.created"
{{webhook_received.request.headers}}All HTTP headers{"content-type": "application/​json"}
{{webhook_received.request.query}}URL query params{"source": "stripe"}

Step 3: Implement Webhook Sender

// webhook-sender.ts — Trigger Lindy agents from your application
interface LindyWebhookPayload {
  event: string;
  data: Record<string, unknown>;
  callbackUrl?: string;
  metadata?: Record<string, unknown>;
}

async function triggerLindy(payload: LindyWebhookPayload): Promise<void> {
  const response = await fetch(process.env.LINDY_WEBHOOK_URL!, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.LINDY_WEBHOOK_SECRET}`,
      'Content-Type': 'application/​json',
    },
    body: JSON.stringify(payload),
  });

  if (!response.ok) {
    throw new Error(`Lindy webhook failed: ${response.status}`);
  }
}

// Usage examples:
await triggerLindy({
  event: 'customer.support_request',
  data: { email: '[email protected]', subject: 'Billing question', body: '...' },
});

await triggerLindy({
  event: 'lead.qualified',
  data: { name: 'Jane Doe', company: 'Acme', score: 85 },
  callbackUrl: 'https://api.yourapp.com/​lindy/​callback',
});

Step 4: Implement Callback Receiver

When you include a callbackUrl in your webhook payload, the agent can respond using the Send POST Request to Callback action:

// callback-receiver.ts
import express from 'express';

const app = express();
app.use(express.json());

// Receive Lindy agent results
app.post('/​lindy/​callback', (req, res) => {
  // Verify authenticity
  const auth = req.headers.authorization;
  if (auth !== `Bearer ${process.env.LINDY_WEBHOOK_SECRET}`) {
    return res.status(401).json({ error: 'Unauthorized' });
  }

  // Respond immediately (Lindy expects a quick response)
  res.json({ received: true });

  // Process async
  handleCallback(req.body);
});

async function handleCallback(data: any) {
  console.log('Lindy callback:', data);

  // Example: Agent analyzed a support ticket
  const { classification, sentiment, draft_response, confidence } = data;

  if (confidence > 0.9) {
    await sendAutoResponse(draft_response);
  } else {
    await escalateToHuman(data);
  }
}

Step 5: Configure HTTP Request Action (Outbound)

For Lindy agents that call your API as an action step:

  1. Add action: HTTP Request
  2. Configure:
    • Method: POST (or GET, PUT, DELETE)

    • URL: https://api.yourapp.com/​endpoint

    • Headers (Set Manually):

      Content-Type: application/​json
      Authorization: Bearer {{your_api_key}}
      
    • Body (AI Prompt mode):

      Send the analysis result as JSON with fields:
      classification, sentiment, summary
      Based on: {{previous_step.result}}
      

Step 6: Add Trigger Filters

Prevent unnecessary agent triggers:

Filter: body.event equals "order.created"
  AND body.data.amount greater_than 100

This ensures the agent only processes high-value orders, saving credits.

Event Patterns

Pattern: Webhook + Slack Notification

Webhook Received → Condition (classify event type)
  → "billing" → Search KB → Draft Reply → Send Email + Slack Alert
  → "technical" → Agent Step (investigate) → Create Ticket → Slack Alert
  → "other" → Forward to team inbox

Pattern: Webhook + Callback

Webhook Received (with callbackUrl) → Process Data → Run Code
  → Send POST Request to Callback (returns results to caller)

Pattern: Webhook + Multi-Agent

Webhook Received → Agent Send Message (to Research Lindy)
  → Research Lindy completes → Agent Send Message (to Writer Lindy)
  → Writer Lindy completes → Send Email with final output

Monitoring Triggers

Lindy provides built-in monitoring triggers:

  • Task Completed: Fires when an agent completes a task
  • Use this to build observability pipelines: Agent completes → log to sheet → alert on failures

Error Handling

IssueCauseSolution
401 on webhook sendWrong or missing Bearer tokenVerify secret matches Generate Secret value
Webhook URL returns 404Agent deleted or URL changedRe-copy URL from agent trigger settings
Callback not receivedcallbackUrl unreachableEnsure HTTPS, public endpoint, no firewall
Duplicate processingWebhook retriedImplement idempotency with event IDs
Payload too largeBody exceeds limitReduce payload size, send references not data

Security

  • Always use HTTPS for webhook URLs
  • Generate and verify webhook secrets on every request
  • Rotate secrets every 90 days
  • Log all webhook attempts (including rejected ones)
  • Rate limit your webhook sender to prevent flooding

Resources

Next Steps

Proceed to lindy-performance-tuning for agent optimization.

More skills from jeremylongshore

openrouter-compliance-review logo
jeremylongshore/claude-code-plugins-plus-skills

openrouter-compliance-review

Review OpenRouter integration for regulatory compliance (SOC2, GDPR,

2.8K 0
View
maintainx-data-handling logo
jeremylongshore/claude-code-plugins-plus-skills

maintainx-data-handling

Data synchronization, ETL patterns, and data management for MaintainX.

2.8K 0
View
groq-core-workflow-a logo
jeremylongshore/claude-code-plugins-plus-skills

groq-core-workflow-a

Execute Groq primary workflow: chat completions with tool use and JSON

2.8K 0
View
validating-csrf-protection logo
jeremylongshore/claude-code-plugins-plus-skills

validating-csrf-protection

Validate CSRF protection implementations for security gaps. Use when

2.8K 0
View
api-contract logo
jeremylongshore/claude-code-plugins-plus-skills

api-contract

Configure this skill should be used when the user asks about "API contract",

2.8K 0
View
ideogram-incident-runbook logo
jeremylongshore/claude-code-plugins-plus-skills

ideogram-incident-runbook

Execute Ideogram incident response with triage, mitigation, and postmortem.

2.8K 0
View
gamma-sdk-patterns logo
jeremylongshore/claude-code-plugins-plus-skills

gamma-sdk-patterns

Reusable patterns for the Gamma REST API (no SDK exists).

2.8K 0
View
deepgram-sdk-patterns logo
jeremylongshore/claude-code-plugins-plus-skills

deepgram-sdk-patterns

Apply production-ready Deepgram SDK patterns for TypeScript and Python.

2.8K 0
View
openrouter-upgrade-migration logo
jeremylongshore/claude-code-plugins-plus-skills

openrouter-upgrade-migration

Migrate to OpenRouter from direct provider APIs or upgrade between SDK/model

2.8K 0
View
openrouter-common-errors logo
jeremylongshore/claude-code-plugins-plus-skills

openrouter-common-errors

Diagnose and fix common OpenRouter API errors. Use when encountering

2.8K 0
View
linear-cost-tuning logo
jeremylongshore/claude-code-plugins-plus-skills

linear-cost-tuning

Optimize Linear API usage, reduce unnecessary calls, and maximize

2.8K 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View