Skip to main content
Webhooks are a great way to get real-time notifications on events that happen in your Dub workspace. Webhooks on Dub follow the following format:
webhook-payload.json
{
  "id": "evt_KleiO4HBwZFbO1vZLWIPZ2AtX", // The event ID
  "event": "link.created", // The event type
  "createdAt": "2024-08-26T16:41:52.346Z", // The timestamp of when the event was created
  "data": {
    // Event payload
  }
}
There are two types of webhook events you can listen to:

Workspace-level events

These events are triggered in the context of your entire workspace: This event is triggered when a new link is created in your Dub workspace. The event payload contains the created link’s details. Here’s an example payload:
link.created
{
  "id": "evt_KleiO4HBwZFbO1vZLWIPZ2AtX",
  "event": "link.created",
  "createdAt": "2024-08-26T16:41:52.346Z",
  "data": {
    "id": "cm0b87844000dismqhkviju54",
    "domain": "dub.sh",
    "key": "sOvvXDT",
    "externalId": null,
    "url": "https://github.com/stack-auth/stack",
    "trackConversion": false,
    "archived": false,
    "expiresAt": null,
    "expiredUrl": null,
    "password": null,
    "proxy": false,
    "title": null,
    "description": null,
    "image": null,
    "video": null,
    "rewrite": false,
    "doIndex": false,
    "ios": null,
    "android": null,
    "geo": null,
    "publicStats": false,
    "tagId": null,
    "tags": [],
    "comments": null,
    "shortLink": "https://dub.sh/sOvvXDT",
    "qrCode": "https://api.dub.co/qr?url=https://dub.sh/sOvvXDT?qr=1",
    "utm_source": null,
    "utm_medium": null,
    "utm_campaign": null,
    "utm_term": null,
    "utm_content": null,
    "userId": "cm022rkcw0000ikt14mscg9sg",
    "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
    "clicks": 0,
    "lastClicked": null,
    "leads": 0,
    "sales": 0,
    "saleAmount": 0,
    "createdAt": "2024-08-26T16:41:52.084Z",
    "updatedAt": "2024-08-26T16:41:52.084Z",
    "testCompletedAt": null,
    "testStartedAt": null,
    "projectId": "cm022sis60003ikt1syy7kfhl"
  }
}
This event is triggered when a link is updated in your Dub workspace. The event payload contains the updated link’s details. Here’s an example payload:
link.updated
{
  "id": "event_KleiO4HBwZFbO1vZLWIPZ2AtX",
  "event": "link.updated",
  "createdAt": "2024-08-26T16:41:52.346Z",
  "data": {
    "id": "cm0b87844000dismqhkviju54",
    "domain": "dub.sh",
    "key": "sOvvXDT",
    "externalId": null,
    "url": "https://github.com/stack-auth/stack",
    "trackConversion": false,
    "archived": false,
    "expiresAt": null,
    "expiredUrl": null,
    "password": null,
    "proxy": false,
    "title": null,
    "description": null,
    "image": null,
    "video": null,
    "rewrite": false,
    "doIndex": false,
    "ios": null,
    "android": null,
    "geo": null,
    "publicStats": false,
    "tagId": null,
    "tags": [],
    "comments": null,
    "shortLink": "https://dub.sh/sOvvXDT",
    "qrCode": "https://api.dub.co/qr?url=https://dub.sh/sOvvXDT?qr=1",
    "utm_source": null,
    "utm_medium": null,
    "utm_campaign": null,
    "utm_term": null,
    "utm_content": null,
    "userId": "cm022rkcw0000ikt14mscg9sg",
    "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
    "clicks": 0,
    "lastClicked": null,
    "leads": 0,
    "sales": 0,
    "saleAmount": 0,
    "createdAt": "2024-08-26T16:41:52.084Z",
    "updatedAt": "2024-08-26T16:41:52.084Z",
    "testCompletedAt": null,
    "testStartedAt": null,
    "projectId": "cm022sis60003ikt1syy7kfhl"
  }
}
This event is triggered when a link is deleted in your Dub workspace. The event payload contains the deleted link’s details. Here’s an example payload:
link.deleted
{
  "id": "evt_KleiO4HBwZFbO1vZLWIPZ2AtX",
  "event": "link.deleted",
  "createdAt": "2024-08-26T16:41:52.346Z",
  "data": {
    "id": "cm0b87844000dismqhkviju54",
    "domain": "dub.sh",
    "key": "sOvvXDT",
    "externalId": null,
    "url": "https://github.com/stack-auth/stack",
    "trackConversion": false,
    "archived": false,
    "expiresAt": null,
    "expiredUrl": null,
    "password": null,
    "proxy": false,
    "title": null,
    "description": null,
    "image": null,
    "video": null,
    "rewrite": false,
    "doIndex": false,
    "ios": null,
    "android": null,
    "geo": null,
    "publicStats": false,
    "tagId": null,
    "tags": [],
    "comments": null,
    "shortLink": "https://dub.sh/sOvvXDT",
    "qrCode": "https://api.dub.co/qr?url=https://dub.sh/sOvvXDT?qr=1",
    "utm_source": null,
    "utm_medium": null,
    "utm_campaign": null,
    "utm_term": null,
    "utm_content": null,
    "userId": "cm022rkcw0000ikt14mscg9sg",
    "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
    "clicks": 0,
    "lastClicked": null,
    "leads": 0,
    "sales": 0,
    "saleAmount": 0,
    "createdAt": "2024-08-26T16:41:52.084Z",
    "updatedAt": "2024-08-26T16:41:52.084Z",
    "testCompletedAt": null,
    "testStartedAt": null,
    "projectId": "cm022sis60003ikt1syy7kfhl"
  }
}

lead.created

This event is triggered when a new lead is created via Dub Conversions. The event payload contains the following:
  • eventName: The name of the event that was tracked.
  • customer: Details about the customer that signed up.
  • click: Details about the click event that led to the lead event.
  • link: Details about the referral link that the lead event is associated with.
  • partner: Details about the partner associated with the lead event (only present for partner links).
  • metadata: Additional metadata associated with the lead event (optional).
Here’s an example payload:
lead.created
{
  "id": "evt_P343bmyae40ALQYr5HT4vRXRd",
  "event": "lead.created",
  "createdAt": "2024-08-30T09:53:50.343Z",
  "data": {
    "eventName": "Sign up",
    "customer": {
      "id": "oU5P0SqI8fpwx5bxw1",
      "name": "John",
      "email": "john@example.com",
      "avatar": "https://example.com/john.jpeg"
    },
    "click": {
      "id": "d0UtZqE0BZuBPrJS",
      "url": "https://github.com/dubinc/dub",
      "ip": "63.141.57.109",
      "continent": "NA",
      "country": "US",
      "city": "San Francisco",
      "device": "Desktop",
      "browser": "Chrome",
      "os": "Mac OS",
      "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
      "bot": false,
      "qr": false,
      "referer": "(direct)"
    },
    "link": {
      "id": "cm0faqkyn0001txvfwjfeq7gl",
      "domain": "dub.sh",
      "key": "79ys3WA",
      "externalId": null,
      "url": "https://github.com/dubinc/dub",
      "trackConversion": true,
      "archived": false,
      "expiresAt": null,
      "expiredUrl": null,
      "password": null,
      "proxy": false,
      "title": null,
      "description": null,
      "image": null,
      "video": null,
      "rewrite": false,
      "doIndex": false,
      "ios": null,
      "android": null,
      "geo": null,
      "publicStats": false,
      "comments": null,
      "shortLink": "https://dub.sh/79ys3WA",
      "qrCode": "https://api.dub.co/qr?url=https://dub.sh/79ys3WA?qr=1",
      "utm_source": null,
      "utm_medium": null,
      "utm_campaign": null,
      "utm_term": null,
      "utm_content": null,
      "userId": "cm022rkcw0000ikt14mscg9sg",
      "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
      "clicks": 10,
      "lastClicked": "2024-08-30T07:45:09.000Z",
      "leads": 5,
      "sales": 0,
      "saleAmount": 0,
      "createdAt": "2024-08-29T13:03:59.098Z",
      "updatedAt": "2024-08-30T09:53:49.505Z",
      "testCompletedAt": null,
      "testStartedAt": null
    },
    "partner": {
      "id": "pn_1JRB6678XHGBZE95R5PH5QVGS",
      "name": "John Smith",
      "email": "john@partner.com",
      "image": "https://example.com/avatar.jpg",
      "payoutsEnabledAt": null,
      "country": "US",
      "totalClicks": 150,
      "totalLeads": 25,
      "totalConversions": 15,
      "totalSales": 10,
      "totalSaleAmount": 50000,
      "totalCommissions": 5000
    },
    "metadata": null
  }
}

sale.created

This event is triggered when a new sale is tracked via Dub Conversions. The event payload contains the following:
  • eventName: The name of the event that was tracked.
  • customer: Details about the customer that made the purchase.
  • click: Details about the click event that led to the sale event.
  • link: Details about the referral link that the sale event is associated with.
  • partner: Details about the partner associated with the sale event (only present for partner links).
  • sale: Details about the recorded sale event.
  • metadata: Additional metadata associated with the sale event (optional).
Here’s an example payload:
sale.created
{
  "id": "evt_WHjyHhqsfYOrlJOOVJSoHXysD",
  "event": "sale.created",
  "createdAt": "2024-08-30T09:57:51.245Z",
  "data": {
    "eventName": "Purchased",
    "customer": {
      "id": "cm0gjdvr20001dkbha2n9gt2b",
      "name": "John",
      "email": "john@example.com",
      "avatar": "https://example.com/john.jpeg"
    },
    "click": {
      "id": "d0UtZqE0BZuBPrJS",
      "url": "https://github.com/dubinc/dub",
      "ip": "63.141.57.109",
      "continent": "NA",
      "country": "US",
      "city": "San Francisco",
      "device": "Desktop",
      "browser": "Chrome",
      "os": "Mac OS",
      "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
      "bot": false,
      "qr": false,
      "referer": "(direct)"
    },
    "link": {
      "id": "cm0faqkyn0001txvfwjfeq7gl",
      "domain": "dub.sh",
      "key": "79ys3WA",
      "externalId": null,
      "url": "https://github.com/dubinc/dub",
      "trackConversion": true,
      "archived": false,
      "expiresAt": null,
      "expiredUrl": null,
      "password": null,
      "proxy": false,
      "title": null,
      "description": null,
      "image": null,
      "video": null,
      "rewrite": false,
      "doIndex": false,
      "ios": null,
      "android": null,
      "geo": null,
      "publicStats": false,
      "comments": null,
      "shortLink": "https://dub.sh/79ys3WA",
      "qrCode": "https://api.dub.co/qr?url=https://dub.sh/79ys3WA?qr=1",
      "utm_source": null,
      "utm_medium": null,
      "utm_campaign": null,
      "utm_term": null,
      "utm_content": null,
      "userId": "cm022rkcw0000ikt14mscg9sg",
      "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
      "clicks": 10,
      "lastClicked": "2024-08-30T07:45:09.000Z",
      "leads": 5,
      "sales": 1,
      "saleAmount": 20000,
      "createdAt": "2024-08-29T13:03:59.098Z",
      "updatedAt": "2024-08-30T09:57:50.891Z",
      "testCompletedAt": null,
      "testStartedAt": null
    },
    "partner": {
      "id": "pn_1JRB6678XHGBZE95R5PH5QVGS",
      "name": "Sarah Johnson",
      "email": "sarah@partner.com",
      "image": "https://example.com/sarah-avatar.jpg",
      "payoutsEnabledAt": null,
      "country": "US",
      "totalClicks": 200,
      "totalLeads": 30,
      "totalConversions": 20,
      "totalSales": 15,
      "totalSaleAmount": 75000,
      "totalCommissions": 7500
    },
    "sale": {
      "amount": 4500,
      "currency": "usd",
      "paymentProcessor": "stripe",
      "invoiceId": null
    },
    "metadata": null
  }
}

partner.enrolled

This event is triggered when a new partner is enrolled in your partner program. The event payload contains the following:
  • partner: Details about the partner that was enrolled.
  • links: An array of the partner’s referral links.
Here’s an example payload:
partner.enrolled
{
  "id": "evt_ovabfqva8oqZzmLPN1JnwIfdt",
  "event": "partner.enrolled",
  "createdAt": "2025-04-08T17:11:56.492Z",
  "data": {
    "id": "pn_1JRB6678XHGBZE95R5PH5QVGS",
    "name": "Asleep Pink Mammal",
    "email": "chosen.blush.barracuda@dub-internal-test.com",
    "image": "https://api.dub.co/og/avatar?seed=Asleep Pink Mammal",
    "description": null,
    "country": "US",
    "payoutsEnabledAt": null,
    "paypalEmail": null,
    "stripeConnectId": null,
    "createdAt": "2025-04-08T17:11:56.446Z",
    "status": "approved",
    "programId": "prog_CYCu7IMAapjkRpTnr8F1azjN",
    "tenantId": null,
    "clicks": 0,
    "leads": 0,
    "sales": 0,
    "saleAmount": 0,
    "earnings": 0,
    "applicationId": null,
    "website": "https://example.com",
    "youtube": null,
    "twitter": null,
    "linkedin": null,
    "instagram": null,
    "tiktok": null,
    "links": [
      {
        "id": "link_1JRB6677YXQB49RC1HKH7TPJE",
        "domain": "getacme.link",
        "key": "uvYO5pMIpctKdUVJlL3jIL4o",
        "shortLink": "https://getacme.link/uvYO5pMIpctKdUVJlL3jIL4o",
        "url": "https://acme.com",
        "clicks": 0,
        "leads": 0,
        "sales": 0,
        "saleAmount": 0
      }
    ]
  }
}

commission.created

This event is triggered whenever a new commission is generated in your partner program — either automatically through a tracked conversion or manually via your dashboard. The event payload contains the following:
  • partner: Details about the partner that earned the commission.
  • customer: Details about the customer that made the purchase.
  • userId: The ID of the user who created the manual commission. You can use this field to distinguish manual commissions from other types of commissions.
Here’s an example payload:
commission.created
{
  "id": "evt_64dv6vxYVgltzJBKc9ujJ1ghL",
  "event": "commission.created",
  "createdAt": "2025-07-16T10:48:15.468Z",
  "data": {
    "id": "cm_1K09DJTBCRT24P6BRD515CK29",
    "type": "sale",
    "amount": 50000,
    "earnings": 10000,
    "currency": "usd",
    "status": "pending",
    "invoiceId": null,
    "description": null,
    "quantity": 1,
    "userId": "cludszk1h0000wmd2e0ea2b0p",
    "createdAt": "2025-07-16T10:48:14.722Z",
    "updatedAt": "2025-07-16T10:48:14.960Z",
    "partner": {
      "id": "pn_1K06X6FX2GRB31NCM2VVCGJ72",
      "name": "Matthew Hayden",
      "email": "matthew@example.com",
      "image": null,
      "payoutsEnabledAt": null,
      "country": "US",
      "totalClicks": 50,
      "totalLeads": 15,
      "totalConversions": 10,
      "totalSales": 10,
      "totalSaleAmount": 100000,
      "totalCommissions": 50000
    },
    "customer": {
      "id": "cus_1K09DJDEACR47NPYC93RM43WF",
      "externalId": "TaMD05AnuyqeI",
      "name": "David",
      "email": "david@example.com",
      "avatar": null,
      "country": "US",
      "sales": 1,
      "saleAmount": 50000,
      "createdAt": "2025-07-16T10:48:01.739Z"
    }
  }
}
Due to the high volume nature of these events, these events are scoped to a specific link. This means that you need to specify the link when creating a webhook – though you can select multiple links for the same webhook if you’d like. This event is triggered when a user clicks on a link. The event payload contains all the details about the click event. Here’s an example payload:
link.clicked
{
  "id": "evt_b9ywgxWqai2glUpCQjclB17kM",
  "event": "link.clicked",
  "createdAt": "2024-08-30T10:16:13.149Z",
  "data": {
    "click": {
      "id": "d0UtZqE0BZuBPrJS",
      "timestamp": "2024-08-30T10:16:12.124Z",
      "url": "https://github.com/dubinc/dub",
      "ip": "63.141.57.109",
      "continent": "NA",
      "country": "US",
      "city": "San Francisco",
      "device": "Desktop",
      "browser": "Chrome",
      "os": "Mac OS",
      "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
      "bot": false,
      "qr": false,
      "referer": "(direct)"
    },
    "link": {
      "id": "cm0faqkyn0001txvfwjfeq7gl",
      "domain": "dub.sh",
      "key": "79ys3WA",
      "externalId": null,
      "url": "https://github.com/dubinc/dub",
      "trackConversion": true,
      "archived": false,
      "expiresAt": null,
      "expiredUrl": null,
      "password": null,
      "proxy": false,
      "title": null,
      "description": null,
      "image": null,
      "video": null,
      "rewrite": false,
      "doIndex": false,
      "ios": null,
      "android": null,
      "geo": null,
      "publicStats": false,
      "comments": null,
      "shortLink": "https://dub.sh/79ys3WA",
      "qrCode": "https://api.dub.co/qr?url=https://dub.sh/79ys3WA?qr=1",
      "utm_source": null,
      "utm_medium": null,
      "utm_campaign": null,
      "utm_term": null,
      "utm_content": null,
      "userId": "cm022rkcw0000ikt14mscg9sg",
      "workspaceId": "ws_cm022sis60003ikt1syy7kfhl",
      "clicks": 11,
      "lastClicked": "2024-08-30T07:45:09.000Z",
      "leads": 6,
      "sales": 10,
      "saleAmount": 200000,
      "createdAt": "2024-08-29T13:03:59.098Z",
      "updatedAt": "2024-08-30T10:16:12.126Z",
      "testCompletedAt": null,
      "testStartedAt": null
    }
  }
}
I