Webhooks, Virtual Tiers, and Recurring Events
Send real-time webhook notifications to your CRM or Zapier, offer virtual attendance tiers with automatic join link delivery, and duplicate events for recurring series.
Overview
Webhooks let CompleteEvent send real-time HTTP notifications to your own systems whenever something happens — a registration is confirmed, an attendee checks in, or an auction payment lands. Use webhooks to sync data with your CRM, trigger Zapier automations, update a spreadsheet, or post to Slack.
Webhook endpoints are configured at the organization level in Organization Settings → Webhooks.
Supported Event Types
- registration.confirmed — a registration is confirmed (free or after Stripe payment).
- registration.cancelled — a registration is cancelled.
- registration.updated — an attendee updates their registration details.
- registration.waitlisted — an attendee is added to the waitlist on an approval-gated event.
- registration.approved — a waitlisted registration is approved.
- checkin.completed — an attendee is checked in via QR scan or manual check-in.
- payment.received — a ticket payment is processed.
- refund.issued — a refund is processed for a registration.
- abstract.submitted — a speaker submits a CFP abstract.
- abstract.accepted — an abstract is accepted.
- abstract.rejected — an abstract is rejected.
- donation.received — a donation is made.
- auction.bid.placed — a bid is placed on a silent auction item.
- auction.item.paid — a silent auction winner completes payment.
- session.signup — an attendee adds a session to their personal schedule.
- event.published — an event is published and goes live.
- survey.submitted — an attendee submits a post-event survey.
Adding an Endpoint
- Go to Organization Settings → Webhooks.
- Enter your endpoint URL (must be HTTPS). Select which event types it should receive.
- Click Add endpoint. CompleteEvent displays a signing secret — copy this now, it is only shown once.
- Use the Send test button to send a
pingevent and confirm your server is reachable.
Request Format
Every webhook request is an HTTP POST with these headers:
Content-Type: application/jsonX-CompleteEvent-Event— the event type (e.g.registration.confirmed)X-CompleteEvent-Signature— HMAC-SHA256 of the request body, signed with your endpoint secret
The body looks like this:
{
"event": "registration.confirmed",
"timestamp": "2026-04-15T14:32:00Z",
"data": {
"registration_id": "reg_abc123",
"event_id": "evt_xyz789",
"email": "attendee@example.com",
"first_name": "Alex",
"last_name": "Smith"
}
}All field names inside data are snake_case (for example registration_id, first_name). The exact fields vary by event type.
Verifying Signatures
Validate every incoming request by computing HMAC-SHA256(secret, requestBody) and comparing it to the X-CompleteEvent-Signature header. Reject requests where the signatures do not match.
Delivery and Retries
Webhooks are delivered once. If your endpoint returns a non-2xx status, the delivery is logged as failed. Check the delivery log on the Webhooks settings page to see recent attempts and response codes.
Failed deliveries can be retried by hand: open the delivery log on the Webhooks settings page and click Retry next to the delivery. This re-sends the original payload with a fresh signature.
Need more help?
Contact us at support@completeevent.app and we'll get back to you within one business day.
← Back to Help Center