Weezly Outreach
|Developer Docs

Webhooks API

Register webhook endpoints to receive real-time HTTP callbacks when events occur in your account.

For the full list of webhook events and payload examples, see the Webhooks Guide.

List Webhooks

GET/api/webhooks/manage

List all registered webhook endpoints for the authenticated user.

Request — cURLcURL
curl --location --request GET 'http://outreach.weezly.com/api/webhooks/manage' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY'
Response — 200 OKJSON
{
  "webhooks": [
    {
      "id": "wh_001",
      "url": "https://your-app.com/webhooks/outreach",
      "secret": "whsec_a1b2c3d4e5f6...",
      "events": ["lead.replied", "connection.accepted", "campaign.completed"],
      "active": true,
      "failureCount": 0,
      "lastSentAt": "2026-06-07T08:30:00.000Z",
      "lastFailedAt": null,
      "createdAt": "2026-05-20T10:00:00.000Z"
    }
  ]
}

Create Webhook

POST/api/webhooks/manage

Register a new webhook endpoint. URL must use HTTPS. A signing secret is generated automatically.

Request Body

ParameterTypeDescription
urlrequiredstringHTTPS endpoint URL to receive events
eventsrequiredstring[]Array of event types to subscribe to

Available Event Types

lead.repliedA lead replied to a message
connection.acceptedA connection request was accepted
campaign.completedAll leads in a campaign have finished
campaign.launchedA campaign was launched
campaign.step.completedA campaign step was executed successfully
campaign.step.failedA campaign step failed
account.status_changedA LinkedIn account status changed
lead.createdA new lead was added to a list
Request — cURLcURL
curl --location --request POST 'http://outreach.weezly.com/api/webhooks/manage' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "url": "https://your-app.com/webhooks/outreach",
  "events": [
    "lead.replied",
    "connection.accepted"
  ]
}'
Response — 201 CreatedJSON
{
  "webhook": {
    "id": "wh_new002",
    "url": "https://your-app.com/webhooks/outreach",
    "secret": "whsec_9f8e7d6c5b4a...",
    "events": ["lead.replied", "connection.accepted"],
    "active": true,
    "failureCount": 0,
    "createdAt": "2026-06-07T10:00:00.000Z"
  }
}

Response Codes

201Webhook created
400URL must use HTTPS / events array required
409Webhook with this URL already exists

Update Webhook

PATCH/api/webhooks/manage/:id

Update a webhook's events or active state.

Request Body

ParameterTypeDescription
eventsstring[]New event subscriptions
activebooleanEnable/disable the webhook
Request — cURLcURL
curl --location --request PATCH 'http://outreach.weezly.com/api/webhooks/manage/:id' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
  "events": [
    "lead.replied",
    "connection.accepted",
    "campaign.completed"
  ],
  "active": true
}'
Response — 200 OKJSON
{
  "webhook": {
    "id": "wh_001",
    "events": ["lead.replied", "connection.accepted", "campaign.completed"],
    "active": true
  }
}

Delete Webhook

DELETE/api/webhooks/manage/:id

Remove a webhook endpoint. Pending deliveries are cancelled.

Request — cURLcURL
curl --location --request DELETE 'http://outreach.weezly.com/api/webhooks/manage/:id' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY'
Response — 200 OKJSON
{ "ok": true }

Response Codes

200Webhook deleted
404Webhook not found

Test Webhook

POST/api/webhooks/manage/:id/test

Send a test event to the webhook endpoint. Uses a test.ping event with sample data.

Request — cURLcURL
curl --location --request POST 'http://outreach.weezly.com/api/webhooks/manage/:id/test' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY'
Response — 200 OKJSON
{
  "success": true,
  "statusCode": 200,
  "duration": 342,
  "response": "OK"
}
Response — 200 (delivery failed)JSON
{
  "success": false,
  "statusCode": 502,
  "duration": 5012,
  "error": "Connection timed out"
}

Response Codes

200Test sent (check success field for delivery result)
404Webhook not found

Delivery History

GET/api/webhooks/manage/:id/deliveries

Get the last 50 delivery attempts for a webhook endpoint.

Request — cURLcURL
curl --location --request GET 'http://outreach.weezly.com/api/webhooks/manage/:id/deliveries' \
  --header 'X-API-KEY: sk_live_YOUR_API_KEY'
Response — 200 OKJSON
{
  "deliveries": [
    {
      "id": "wd_001",
      "event": "lead.replied",
      "payload": {
        "event": "lead.replied",
        "data": {
          "leadId": "cm3lead_001",
          "leadName": "Sarah Chen",
          "campaignId": "cm3camp456",
          "campaignName": "Q1 SaaS Outreach",
          "chatId": "chat_abc123def456",
          "replyPreview": "Thanks for reaching out! I'd love to..."
        },
        "timestamp": "2026-06-07T08:30:00.000Z"
      },
      "statusCode": 200,
      "response": "OK",
      "success": true,
      "duration": 145,
      "createdAt": "2026-06-07T08:30:00.500Z"
    },
    {
      "id": "wd_002",
      "event": "connection.accepted",
      "payload": { "..." : "..." },
      "statusCode": 500,
      "response": "Internal Server Error",
      "success": false,
      "duration": 2034,
      "createdAt": "2026-06-07T07:15:00.200Z"
    }
  ]
}

Delivery Format

Each webhook delivery is an HTTP POST to your endpoint with a JSON body and a signature header for verification.

HTTP HeadersHTTP
POST /webhooks/outreach HTTP/1.1
Content-Type: application/json
X-Webhook-Signature: t=1717747800,v1=5af3c09e2b8a7d...
Payload structureJSON
{
  "event": "lead.replied",
  "data": {
    "leadId": "cm3lead_001",
    "leadName": "Sarah Chen",
    "campaignId": "cm3camp456",
    "campaignName": "Q1 SaaS Outreach",
    "chatId": "chat_abc123def456",
    "replyPreview": "Thanks for reaching out!"
  },
  "timestamp": "2026-06-07T08:30:00.000Z"
}

Signature verification: Compute HMAC-SHA256 of timestamp.payload using your webhook secret. Compare with the v1 value in the signature header. See the Getting Started guide for full verification code in Node.js and Python.