Docs Evenzo – Events Manager for WooCommerce

Webhooks

Webhooks#

Webhooks send notifications to external URLs when events happen in your system. Use them to integrate with other services, trigger automations, or sync data.

How webhooks work#

  1. You register a webhook URL for specific triggers
  2. When the trigger occurs, the plugin sends a POST request to your URL
  3. Your server processes the data and takes action

Setting up webhooks#

Add a webhook#

  1. Go to Events > Settings > Webhooks
  2. Click Add Webhook
  3. Enter a name for reference
  4. Enter the delivery URL
  5. Select triggers to listen for
  6. Save

Webhook fields#

FieldDescription
NameReference name for your use
Delivery URLWhere to send the webhook
StatusActive or Paused
TriggersWhich events fire this webhook
SecretFor signature verification

Available triggers#

Event triggers#

TriggerFires When
event.createdNew event is published
event.updatedEvent details change
event.deletedEvent is deleted
event.status_changedStatus changes (cancelled, etc.)

Registration triggers#

TriggerFires When
registration.completedTicket purchase completes
registration.cancelledOrder is cancelled/refunded

Attendee triggers#

TriggerFires When
attendee.checked_inAttendee checks in
attendee.checked_outAttendee checks out

Capacity triggers#

TriggerFires When
event.sold_outEvent reaches capacity
event.capacity_availableSpots open up

Webhook payload#

Payload structure#

{
  "id": "webhook_123456",
  "trigger": "registration.completed",
  "timestamp": "2025-01-15T10:30:00Z",
  "site_url": "https://yoursite.com",
  "data": {
    // Trigger-specific data
  }
}

Event created payload#

{
  "trigger": "event.created",
  "data": {
    "event_id": 123,
    "title": "Tech Conference",
    "start_date": "2025-03-15",
    "start_time": "09:00",
    "end_date": "2025-03-15",
    "end_time": "17:00",
    "status": "scheduled",
    "type": "in-person",
    "venue": "Convention Center",
    "capacity": 500,
    "link": "https://yoursite.com/events/tech-conference/"
  }
}

Registration completed payload#

{
  "trigger": "registration.completed",
  "data": {
    "attendee_id": 456,
    "event_id": 123,
    "event_name": "Tech Conference",
    "order_id": 789,
    "ticket_code": "EMWC-ABC123DEF",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john@example.com",
    "custom_fields": {
      "company": "Acme Inc"
    }
  }
}

Attendee checked in payload#

{
  "trigger": "attendee.checked_in",
  "data": {
    "attendee_id": 456,
    "event_id": 123,
    "event_name": "Tech Conference",
    "ticket_code": "EMWC-ABC123DEF",
    "name": "John Doe",
    "email": "john@example.com",
    "checked_in_at": "2025-03-15T09:15:00Z",
    "checked_in_by": "admin"
  }
}

Security#

Signature verification#

Each webhook includes a signature header for verification:

X-EMWC-Signature: sha256=abc123...

Verify in your code:

$payload = file_get_contents( 'php://input' );
$signature = $_SERVER['HTTP_X_EMWC_SIGNATURE'];

$expected = 'sha256=' . hash_hmac( 'sha256', $payload, $your_secret );

if ( hash_equals( $expected, $signature ) ) {
    // Valid webhook
}

Secret key#

Set a secret key when creating the webhook. Keep it secure and use it to verify incoming requests.

HTTPS#

Always use HTTPS URLs for webhook delivery to encrypt data in transit.

Delivery#

Retry logic#

If delivery fails:

  1. First retry: 1 minute after failure
  2. Second retry: 5 minutes after
  3. Third retry: 30 minutes after
  4. Final retry: 2 hours after

After 4 failures, the webhook is marked as failed.

Timeout#

Requests timeout after 15 seconds. If your server needs more time, return a 200 status immediately and process asynchronously.

Response handling#

ResponseResult
2xxSuccess, delivery logged
3xxFailure, will retry
4xxFailure, will retry
5xxFailure, will retry
TimeoutFailure, will retry

Managing webhooks#

Viewing webhooks#

Go to Events > Settings > Webhooks to see:

  • Webhook name and URL
  • Triggers
  • Status
  • Delivery history

Webhook history#

Click a webhook to see recent deliveries:

  • Timestamp
  • Trigger type
  • Response code
  • Payload sent
  • Response received

Testing webhooks#

  1. Edit a webhook
  2. Click Send Test
  3. A test payload is sent
  4. Check your endpoint received it

Pausing webhooks#

To temporarily stop deliveries:

  1. Edit the webhook
  2. Change status to Paused
  3. Save

Triggers queue but do not deliver until reactivated.

Deleting webhooks#

  1. Go to webhook list
  2. Hover over the webhook
  3. Click Delete
  4. Confirm deletion

Use cases#

Slack notifications#

Send event notifications to Slack:

  1. Create a Slack Incoming Webhook
  2. Add webhook with Slack URL
  3. Select registration.completed trigger
  4. New registrations post to Slack

Zapier integration#

Connect to thousands of apps:

  1. Create a Zapier webhook trigger
  2. Add the Zapier URL as a webhook
  3. Build Zaps with event data

Custom CRM sync#

Sync attendees to your CRM:

  1. Create endpoint in your CRM or middleware
  2. Add webhook for registration.completed
  3. Process payload to create CRM contacts

Analytics tracking#

Send event data to analytics:

  1. Create endpoint for your analytics
  2. Add webhooks for desired triggers
  3. Log events for reporting

Email marketing#

Add attendees to email lists:

  1. Set up endpoint connected to email service
  2. Use registration.completed trigger
  3. Add attendees to appropriate lists

Troubleshooting#

Webhook not firing#

  • Check webhook is Active status
  • Verify trigger is selected
  • Confirm action should trigger (published event, completed order)

Delivery failures#

  • Check URL is accessible
  • Verify HTTPS certificate is valid
  • Check server is responding within 15 seconds
  • Review error messages in delivery history

Wrong data received#

  • Verify trigger selection
  • Check payload format
  • Confirm endpoint is parsing JSON correctly

Signature validation failing#

  • Verify secret key matches
  • Check payload is not modified
  • Confirm hash algorithm (SHA-256)