Events

Overview

Deel provides a comprehensive set of webhook events across all services. Each event represents a specific action or state change in your Deel account, allowing you to build real-time integrations.

  • 100+ Events: Events for contracts, payments, workers, and more
  • Detailed Payloads: Each event includes relevant resource data
  • Easy Discovery: Browse events via API or Developer Center

Discovering Available Events

There are two ways to explore all available webhook events:

Via API

Use the webhook events endpoint to retrieve the complete list programmatically:

$curl 'https://api.letsdeel.com/rest/v2/webhooks/events' \
> -H 'Authorization: Bearer YOUR_API_TOKEN'

Response format:

1{
2 "data": [
3 {
4 "id": "7459da2b-9caf-4b51-bd84-251ce2bec485",
5 "module_name": "payslips",
6 "module_label": "Payslips",
7 "name": "eor.payslips.available",
8 "description": "Triggered when EOR payslips are available",
9 "payload_example": {...},
10 "created_at": "2023-11-10T11:08:20.194Z",
11 "updated_at": "2025-02-07T11:47:35.635Z"
12 }
13 ]
14}

Via Developer Center

For a visual experience, use the Deel Developer Center:

2

Go to Webhooks tab

Click on the Webhooks tab

3

View available events

When creating or editing a webhook, you’ll see a searchable list of all available events with:

  • Event name
  • Description
  • Category
  • Example payload
4

Preview event payloads

Click on any event to see its complete payload structure and example data

Pro tip: The Developer Center lets you search and filter events by category, making it easy to find exactly what you need.

Event Payload Structure

All webhook events follow a consistent structure:

1{
2 "data": {
3 "meta": {
4 "event_type": "contract.created",
5 "organization_id": "org_abc123",
6 "event_id": "evt_xyz789",
7 "occurred_at": "2025-02-05T15:39:38.070Z"
8 },
9 "resource": [
10 {
11 // Event-specific data
12 "contract_id": "ctr_123456",
13 "worker_email": "worker@example.com",
14 "status": "pending",
15 "type": "eor",
16 "country": "US"
17 // ... more fields specific to the event
18 }
19 ]
20 },
21 "timestamp": "2025-02-05T15:39:38.070Z"
22}

Payload Components

Contains metadata about the event:

  • event_type: The event that occurred
  • organization_id: Your organization ID
  • event_id: Unique identifier for this event
  • occurred_at: When the event happened

Contains the resource that changed:

  • Structure varies by event type
  • Always includes IDs for lookups
  • May contain nested objects
  • Includes all relevant resource fields

When the webhook was sent:

  • ISO 8601 formatted timestamp
  • When webhook was delivered (not when event occurred)
  • Use for logging and debugging
  • May differ slightly from occurred_at

Important HTTP headers included with every webhook:

  • x-deel-signature: HMAC-SHA256 signature to verify authenticity
  • x-deel-webhook-version: API version used for serialization
  • x-deel-hmac-label: Identifies which signing key was used

Viewing Event Payloads

In Developer Center

The Developer Center provides a visual way to explore event payloads:

1

Open webhook details

Navigate to a webhook in the Developer Center

2

Click 'View Events'

Browse the list of available events for your webhook

3

Select an event

Click on any event to see:

  • Full payload structure
  • Field descriptions
  • Example values
  • Data types
4

Copy for testing

Use the example payload to test your integration

Via API Response

When you retrieve events from the API, each event includes a payload_example field showing the exact structure you’ll receive:

1const axios = require('axios');
2
3async function getEventPayload() {
4 const response = await axios.get(
5 'https://api.letsdeel.com/rest/v2/webhooks/events',
6 {
7 headers: {
8 'Authorization': `Bearer ${process.env.DEEL_API_TOKEN}`
9 }
10 }
11 );
12
13 // Access the payload_example for any event
14 const events = response.data.data;
15 const contractCreatedEvent = events.find(
16 event => event.name === 'contract.created'
17 );
18
19 console.log('Event payload structure:', contractCreatedEvent.payload_example);
20}

The payload_example field contains the complete webhook structure including meta, resource, and timestamp fields, allowing you to understand exactly what data you’ll receive when subscribing to that event.

Filtering Events

When creating a webhook subscription, you can filter which events you receive:

Subscribe to Specific Events

1// Subscribe only to contract events
2const webhook = await createWebhook({
3 url: 'https://yourapp.com/webhooks/deel',
4 events: [
5 'contract.created',
6 'contract.signed',
7 'contract.terminated'
8 ]
9});

Next Steps