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

# Create Webhook

> Create a new webhook for receiving real-time event notifications

This endpoint creates a new webhook for receiving real-time event notifications.

## Body Parameters

<ParamField body="url" type="string" required>
  The webhook listener URL where events will be sent
</ParamField>

<ParamField body="events" type="array" required>
  A list of event types to listen for. Supported events: `action_log.completed`,
  `action_log.failed`, `document.received`, `document.extracted`, `lead.created`,
  `lead.updated`, `lead.completed`
</ParamField>

<ParamField body="isEnabled" type="boolean">
  Whether the webhook should be enabled immediately (default: `true`)
</ParamField>

<ParamField body="description" type="string">
  Optional description for the webhook
</ParamField>

## Response

<ResponseField name="id" type="string">
  Unique identifier for the webhook
</ResponseField>

<ResponseField name="url" type="string">
  The webhook URL where events will be sent
</ResponseField>

<ResponseField name="events" type="array">
  Array of event types this webhook is subscribed to
</ResponseField>

<ResponseField name="isEnabled" type="boolean">
  Whether the webhook is currently enabled
</ResponseField>

<ResponseField name="description" type="string" nullable>
  Optional description for the webhook
</ResponseField>

<ResponseField name="createdAt" type="string">
  ISO 8601 timestamp when the webhook was created
</ResponseField>

<Note>
  Your webhook endpoint should return a 200 status code within 5 seconds. If it
  doesn't, OmniAI will retry the delivery.
</Note>

<RequestExample>
  ```javascript Node.js theme={null}
  const options = {
    method: 'POST',
    headers: {
      'x-api-key': '<your-api-key>',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      url: 'https://your-app.com/webhook/omniai',
      events: ['action_log.completed', 'action_log.failed'],
      isEnabled: true,
      description: 'Production webhook for CRM sync',
    }),
  };

  fetch('https://api-v2.getomni.ai/api/v1/webhooks', options)
    .then((response) => response.json())
    .then((response) => console.log(response))
    .catch((err) => console.error(err));
  ```

  ```python Python theme={null}
  import requests

  url = "https://api-v2.getomni.ai/api/v1/webhooks"
  headers = {
      "x-api-key": "<your-api-key>",
      "Content-Type": "application/json"
  }
  payload = {
      "url": "https://your-app.com/webhook/omniai",
      "events": ["action_log.completed", "action_log.failed"],
      "isEnabled": True,
      "description": "Production webhook for CRM sync"
  }

  response = requests.request("POST", url, json=payload, headers=headers)
  print(response.json())
  ```

  ```bash cURL theme={null}
  curl --request POST \
    --url https://api-v2.getomni.ai/api/v1/webhooks \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: <your-api-key>' \
    --data '{
    "url": "https://your-app.com/webhook/omniai",
    "events": ["action_log.completed", "action_log.failed"],
    "isEnabled": true,
    "description": "Production webhook for CRM sync"
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "id": "06e4b90b-86dd-41c7-9a1e-73a592963682",
    "workspaceId": "6048d78a-584a-4f1e-9e39-e011ca4cc48c",
    "url": "https://c4b3632a95ef.ngrok-free.app/webhook/test-receiver",
    "secret": null,
    "events": ["action_log.completed", "action_log.failed"],
    "isEnabled": false,
    "description": null,
    "createdAt": "2025-10-30T19:49:46.581Z",
    "updatedAt": "2025-10-30T20:07:31.930Z"
  }
  ```

  ```json 400 theme={null}
  {
    "error": "Invalid request"
  }
  ```
</ResponseExample>
