Event Catalog
curl --request GET \
--url https://api.example.com/v1/events/catalogimport requests
url = "https://api.example.com/v1/events/catalog"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/events/catalog', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/events/catalog",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/events/catalog"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/events/catalog")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/events/catalog")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"events": [
{
"type": "<string>",
"category": "<string>",
"description": "<string>",
"data_schema": {},
"example_payload": {},
"introduced_in": "<string>",
"stability": "<string>"
}
],
"total": 123
}
}Events
Event Catalog
List every webhook event type the platform emits, with schemas and example payloads
GET
/
v1
/
events
/
catalog
Event Catalog
curl --request GET \
--url https://api.example.com/v1/events/catalogimport requests
url = "https://api.example.com/v1/events/catalog"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/events/catalog', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/events/catalog",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/events/catalog"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/events/catalog")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/events/catalog")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"events": [
{
"type": "<string>",
"category": "<string>",
"description": "<string>",
"data_schema": {},
"example_payload": {},
"introduced_in": "<string>",
"stability": "<string>"
}
],
"total": 123
}
}Request
Use this endpoint to discover the full set of webhook event types you can subscribe to viaPOST /v1/webhooks. Every catalog entry includes a JSON Schema for the data payload and a fully worked example you can paste into test fixtures.
Query Parameters
string
Optional filter by category:
contact, company, deal, task, note, email, meeting, document, workflow, billing, sync.string
default:"v1"
Catalog version to return. Defaults to the current stable version.
Headers
Authorization: Bearer wbk_your_api_key_here
Response
object
Show properties
Show properties
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID.
curl https://data.leadlex.com/functions/v1/api-gateway/v1/events/catalog \
-H "Authorization: Bearer wbk_your_api_key_here"
import requests
API_KEY = "wbk_your_api_key_here"
BASE_URL = "https://data.leadlex.com/functions/v1/api-gateway"
r = requests.get(
f"{BASE_URL}/v1/events/catalog",
headers={"Authorization": f"Bearer {API_KEY}"},
)
for event in r.json()["data"]["events"]:
print(event["type"], "-", event["description"])
const res = await fetch(
'https://data.leadlex.com/functions/v1/api-gateway/v1/events/catalog',
{ headers: { Authorization: 'Bearer wbk_your_api_key_here' } },
);
const { data } = await res.json();
console.log(`${data.total} event types`);
Example Response (abridged)
{
"data": {
"total": 27,
"events": [
{
"type": "contact.created",
"category": "contact",
"description": "Emitted when a new contact is created via API or UI.",
"data_schema": { "type": "object", "properties": { "contact": { "type": "object" } } },
"example_payload": {
"id": "evt_01HY1",
"type": "contact.created",
"created_at": "2026-04-17T09:00:00Z",
"data": { "contact": { "id": "123e4567-e89b-12d3-a456-426614174000", "full_name": "Jane Doe" } }
},
"introduced_in": "v1",
"stability": "stable"
},
{
"type": "contact.updated",
"category": "contact",
"description": "Emitted when a contact's fields change.",
"example_payload": {
"id": "evt_02HY2",
"type": "contact.updated",
"created_at": "2026-04-17T09:05:00Z",
"data": {
"contact": { "id": "123e4567-e89b-12d3-a456-426614174000" },
"changed_fields": ["job_title"]
}
},
"stability": "stable"
},
{
"type": "deal.stage_changed",
"category": "deal",
"description": "Emitted when a deal moves between pipeline stages.",
"example_payload": {
"id": "evt_03HY3",
"type": "deal.stage_changed",
"created_at": "2026-04-17T09:10:00Z",
"data": {
"deal": { "id": "deal_01HY1" },
"from_stage_id": "stage_qualified",
"to_stage_id": "stage_proposal"
}
},
"stability": "stable"
},
{
"type": "email.sent",
"category": "email",
"description": "Emitted after an outbound email is successfully sent.",
"example_payload": {
"id": "evt_04HY4",
"type": "email.sent",
"created_at": "2026-04-17T10:22:11Z",
"data": { "message_id": "18c9a4b2e7ff21aa", "to": ["jane@acme.com"] }
},
"stability": "stable"
},
{
"type": "meeting.scheduled",
"category": "meeting",
"description": "Emitted when a new calendar event is created that includes any contact.",
"example_payload": {
"id": "evt_05HY5",
"type": "meeting.scheduled",
"created_at": "2026-04-17T10:30:00Z",
"data": { "event_id": "evt_01HYXYZ123", "title": "Intro call with Jane Doe" }
},
"stability": "stable"
}
]
}
}
Full Event Type List
Contact events:contact.created, contact.updated, contact.deleted, contact.merged, contact.enriched.
Company events: company.created, company.updated, company.enriched.
Deal events: deal.created, deal.updated, deal.stage_changed, deal.closed_won, deal.closed_lost.
Task events: task.created, task.completed, task.overdue.
Note events: note.created.
Email events: email.sent, email.received, email.sync.completed.
Meeting events: meeting.scheduled, meeting.cancelled, meeting.completed.
Document events: document.created, document.deleted.
Workflow events: workflow.triggered, workflow.auto_disabled.
Errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing read:webhooks permission |
| 429 | rate_limited | Rate limit exceeded |