Webhooks

Receive real-time notifications when important events occur in your campaigns

Overview

Webhooks allow your application to receive real-time notifications when events occur in your campaigns. Configure a webhook URL in your campaign settings, and we'll send HTTP POST requests to your endpoint whenever important events happen.

Available Events

meeting_booked
Primary
Triggered when a prospect books a meeting through your campaign's calendar link

This is the main webhook event for campaign integrations. Use it to sync meeting bookings with your CRM, trigger follow-up workflows, or notify your sales team.

Webhook Payload

When a meeting is booked, we'll send a POST request to your webhook URL with the following payload:

{
  "event": "meeting_booked",
  "campaignId": "campaign_abc123",
  "prospect": {
    "id": "prospect_xyz789",
    "companyName": "Acme Corp",
    "contactName": "John Smith",
    "email": "john@acme.com",
    "title": "VP of Sales"
  },
  "meeting": {
    "id": "meeting_123",
    "scheduledAt": "2026-01-20T14:00:00Z",
    "duration": 30,
    "title": "Discovery Call with Acme Corp"
  },
  "timestamp": "2026-01-16T10:30:00Z"
}

Payload Fields

event
string

The event type. Always "meeting_booked" for this webhook.

campaignId
string

The ID of the campaign that generated this meeting.

prospect
object

Information about the prospect who booked the meeting, including their company name, contact name, email, and job title.

meeting
object

Meeting details including the scheduled time, duration in minutes, and meeting title.

timestamp
string (ISO 8601)

When the webhook was sent.

Handling Webhooks

Your webhook endpoint should:

  • Return a 200 OK response quickly (within 5 seconds)
  • Process the webhook asynchronously if needed
  • Be idempotent (handle duplicate deliveries gracefully)

Example webhook handler in Node.js:

app.post('/webhooks/magnetite', async (req, res) => {
  const { event, campaignId, prospect, meeting } = req.body;

  if (event === 'meeting_booked') {
    // Process the meeting booking
    console.log(`Meeting booked with ${prospect.contactName}`);
    console.log(`Scheduled for: ${meeting.scheduledAt}`);

    // Sync to your CRM, notify team, etc.
    await syncToCRM(prospect, meeting);
  }

  // Always return 200 quickly
  res.status(200).json({ received: true });
});

Retry Policy

If your webhook endpoint returns an error (non-2xx status code) or times out, we'll retry the delivery:

  • First retry: 1 minute after initial attempt
  • Second retry: 5 minutes after first retry
  • Third retry: 30 minutes after second retry
  • Final retry: 2 hours after third retry

After 4 failed attempts, the webhook will be marked as failed. You can view failed webhooks in your campaign dashboard.

Testing Webhooks

You can test your webhook endpoint by sending a test payload manually:

curl -X POST https://your-server.com/webhooks/magnetite \
  -H "Content-Type: application/json" \
  -d '{
    "event": "meeting_booked",
    "campaignId": "test_campaign",
    "prospect": {
      "id": "test_prospect",
      "companyName": "Test Company",
      "contactName": "Test User",
      "email": "test@example.com",
      "title": "CEO"
    },
    "meeting": {
      "id": "test_meeting",
      "scheduledAt": "2026-01-20T14:00:00Z",
      "duration": 30,
      "title": "Test Meeting"
    },
    "timestamp": "2026-01-16T10:30:00Z"
  }'