> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lindy.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks

> Trigger agent workflows with custom API calls from any external system

## Overview

While Lindy supports over 5,000 integrations out of the box, webhooks provide the ultimate flexibility for custom integrations. Use webhooks to trigger agent workflows from any system that can make HTTP requests — your own applications, third-party services, or custom scripts.

<Note>
  Webhooks are ideal when you need real-time event processing or when working with systems that don't have native Lindy integrations.
</Note>

## Adding a Webhook Trigger

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-add-trigger.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=876a03dbd039e673840a38dc64bfbd7d" alt="Add Trigger menu showing Webhook option in popular triggers and other triggers sections" width="1414" height="1652" data-path="lindy-brand-assets/lindy-webhook-add-trigger.png" />
</Frame>

To get started:

1. Click **Add Trigger** in your workflow
2. Search for "Webhook"
3. Select **Webhook Received** trigger

The webhook trigger appears in both the "Popular" section and under "Other Triggers" for easy access.

## Configuration Options

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-show-fields-to-fill.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=9eb9b93a3c5f5a000cc350a61039abba" alt="Webhook configuration interface showing webhook selection and follow-up behavior options" width="3324" height="1662" data-path="lindy-brand-assets/lindy-webhook-show-fields-to-fill.png" />
</Frame>

### Webhook Selection

Choose an existing webhook or create a new one. Each webhook has its own unique URL and security settings.

### Follow-up Behavior

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-follow-up-behavior.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=115cae76e5c7f1717a2735af5a009522" alt="Follow-up behavior dropdown showing Handle in same task, Create new task, and Ignore options" width="3326" height="1446" data-path="lindy-brand-assets/lindy-webhook-follow-up-behavior.png" />
</Frame>

Configure how your agent processes webhook requests:

| Option                  | Description                                      |
| ----------------------- | ------------------------------------------------ |
| **Handle in same task** | Process follow-up requests in the same workflow  |
| **Create new task**     | Spawn a new task for each follow-up webhook call |
| **Ignore**              | Ignore follow-up webhook requests                |

## Creating a New Webhook

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-create-webhook.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=636b879b466c0722b76974a5bde2289f" alt="Create new webhook interface with name field and webhook list" width="3316" height="1616" data-path="lindy-brand-assets/lindy-webhook-create-webhook.png" />
</Frame>

1. Click **"Select an option"** → **"Create new"**
2. Enter a descriptive name for your webhook
3. Press Enter to save and select the webhook

Each webhook gets a unique URL in the format:

```plaintext theme={null}
https://public.lindy.ai/api/v1/webhooks/[unique-id]
```

## Security with Secret Keys

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhok-generate-secret.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=511a98784f784122a9f1782b36345671" alt="Generate Secret button and copy to clipboard option for webhook security" width="3320" height="1506" data-path="lindy-brand-assets/lindy-webhok-generate-secret.png" />
</Frame>

Protect your webhooks from unauthorized access:

1. Click **Generate Secret** to create a secure token
2. Copy the secret key immediately

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-secret-generated.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=6714f621548c72fd936e3f8b39321762" alt="Secret key display with warning that it's only shown once" width="976" height="478" data-path="lindy-brand-assets/lindy-webhook-secret-generated.png" />
</Frame>

<Warning>
  The secret key is only shown once! Copy it now and store it securely. You'll need to include this in the Authorization header of all webhook requests.
</Warning>

### Using the Secret Key

Include the secret in your webhook requests:

```http theme={null}
Authorization: Bearer [your-secret-key]
```

## Webhook + AI Agent Pattern

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-ai-agent.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=5866058a1b8a1fd7071dbcefc32875dc" alt="Webhook trigger followed by AI Agent node in workflow" width="3340" height="1698" data-path="lindy-brand-assets/lindy-webhook-ai-agent.png" />
</Frame>

The most powerful webhook pattern combines the trigger with an AI Agent that can intelligently process incoming data:

### AI Agent Configuration

After your webhook trigger, add an AI Agent to:

* Analyze incoming webhook data
* Make decisions based on content
* Execute multiple actions conditionally
* Handle complex business logic

<Frame>
  <img src="https://mintcdn.com/lindyai/6m-Rdk3yJVAHqZQC/lindy-brand-assets/lindy-webhook-ai-agent-skills.png?fit=max&auto=format&n=6m-Rdk3yJVAHqZQC&q=85&s=1bb10d0d7759ca034df9c30604b51471" alt="AI Agent skills panel showing Send POST Request to Callback as a suggested skill" width="1498" height="794" data-path="lindy-brand-assets/lindy-webhook-ai-agent-skills.png" />
</Frame>

### Essential AI Agent Skills

**Suggested skill for webhooks:**

* **Send POST Request to Callback** - Respond back to the original request sender

**Additional powerful skills to add:**

* **HTTP Request** - Call other APIs based on webhook data
* **Update Spreadsheet** - Log webhook data
* **Send Email/Slack** - Notify teams
* **Search Knowledge Base** - Enrich with context
* **Create Calendar Event** - Schedule based on webhooks
* **Run Code** - Custom data transformations

## Working with Webhook Data

Access webhook data from the trigger in any subsequent step using the following variables:

| Data Source      | Variable Reference                     | Description                             |
| ---------------- | -------------------------------------- | --------------------------------------- |
| **Request Body** | `{{webhook_received.request.body}}`    | The full JSON payload from the request. |
| **Headers**      | `{{webhook_received.request.headers}}` | All request headers.                    |
| **Query Params** | `{{webhook_received.request.query}}`   | Any parameters from the webhook URL.    |

<Tip>
  Use AI Prompt mode in action fields to intelligently extract and use specific fields from your webhook payload.
</Tip>

## Callback Responses

<AccordionGroup>
  <Accordion title="Send POST Request to Callback">
    When you need to respond to the webhook sender:

    1. Include a `callbackUrl` field in your webhook request body
    2. Add the "Send POST Request to Callback" action
    3. Configure your response data

    This enables two-way communication between your external system and Lindy.
  </Accordion>

  <Accordion title="Response Patterns">
    Common callback scenarios:

    * Acknowledge receipt with status
    * Return processed results
    * Send error messages
    * Provide async job IDs
  </Accordion>
</AccordionGroup>

## Best Practices

<AccordionGroup>
  <Accordion title="Secure Your Webhooks">
    Always use secret keys and validate incoming requests to protect your workflows from unauthorized access.
  </Accordion>

  <Accordion title="Handle Errors Gracefully">
    Add error handling conditions after webhook processing to manage unexpected issues and ensure reliability.
  </Accordion>

  <Accordion title="Test Thoroughly">
    Use tools like Postman to test your webhook endpoints with different scenarios before deploying to production.
  </Accordion>
</AccordionGroup>

## Related Resources

<CardGroup cols={2}>
  <Card title="HTTP Request" href="/skills/by-lindy/http-request" icon="globe">
    Make outbound API calls from Lindy
  </Card>

  <Card title="Agent Steps" href="/fundamentals/lindy-101/ai-agents" icon="brain-circuit">
    Build intelligent webhook processors
  </Card>

  <Card title="Conditions" href="/fundamentals/lindy-101/conditions" icon="network-wired">
    Route webhook data conditionally
  </Card>

  <Card title="Knowledge Base" href="/fundamentals/lindy-101/knowledge-base" icon="database">
    Enrich webhook data with context
  </Card>
</CardGroup>
