# List event kinds

Source: https://help.ruuster.com/api/webhooks-event-kinds

```http
GET https://api.ruuster.com/v1/webhooks/events
```

The webhook event catalog: every event kind you can subscribe to, which are high volume, and a sample payload for each.

- Authentication: `x-api-key` and `x-email` headers of an owner or admin
- Rate limit: 120 requests per minute per key

The kinds and their payloads are described in [Event catalog](https://help.ruuster.com/api/webhook-events).

## Example request

cURL:

```bash
curl -s "https://api.ruuster.com/v1/webhooks/events" \
  -H "x-api-key: $RUUSTER_API_KEY" \
  -H "x-email: $RUUSTER_EMAIL"
```

Node.js:

```javascript
const res = await fetch("https://api.ruuster.com/v1/webhooks/events", {
  headers: {
    "x-api-key": process.env.RUUSTER_API_KEY,
    "x-email": process.env.RUUSTER_EMAIL,
  },
});
const body = await res.json();
if (!body.ok) throw new Error(`${body.error.code}: ${body.error.message} (${body.requestId})`);
console.log(body.data);
```

Python:

```python
import os
import requests

res = requests.get(
    "https://api.ruuster.com/v1/webhooks/events",
    headers={"x-api-key": os.environ["RUUSTER_API_KEY"], "x-email": os.environ["RUUSTER_EMAIL"]},
    timeout=30,
)
body = res.json()
if not body["ok"]:
    raise RuntimeError(f'{body["error"]["code"]}: {body["error"]["message"]} ({body.get("requestId")})')
print(body["data"])
```

## Example response

```json
{
  "ok": true,
  "data": {
    "groups": [
      { "group": "lead.*", "kinds": ["lead.created", "lead.property_view", "lead.favorite", "lead.saved_search_created", "lead.saved_search_updated", "lead.search", "lead.email_open", "lead.email_click", "lead.tour_request", "lead.contact_agent", "lead.login", "lead.share", "lead.email_status_changed"] },
      { "group": "other", "kinds": ["webhook.test"] }
    ],
    "highVolume": ["lead.search", "lead.property_view"],
    "samples": { "lead.tour_request": { "…": "the full sample payload for this kind" } }
  }
}
```
