---
title: "Create a Monitor"
description: "Subscribe to changes on any professional profile or company URL."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.kooperativa.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a Monitor

`POST /api/v1/monitors`

Subscribe to change events on a professional profile or company URL.

:::note
Monitors are **free**. No credits charged for creating, listing, or deleting them.
:::

## Body parameters

| Parameter | Type | Required | Description |
|---|---|---|---|
| `type` | string | **Yes** | `"person"` or `"company"` |
| `subject_url` | string | **Yes** | Full profile or company URL |
| `webhook_url` | string | **Yes** | HTTPS endpoint to receive events |
| `label` | string | No | Human-readable label |
| `events` | array | No | Event types to subscribe to (defaults to all) |

:::caution
`webhook_url` must use HTTPS and cannot point to private or internal addresses (localhost, 192.168.x.x, 10.x.x.x, etc.).
:::

:::tip
If you omit `events`, you'll receive all available events for the `type`. Set it explicitly if you only want specific changes, e.g. `["person.job_changed"]` for job change alerts only.
:::

## Code examples

```bash title="cURL"
curl -X POST "https://kooperativa.io/api/v1/monitors" \
  -H "Authorization: Bearer ik_live_..." \
  -H "Content-Type: application/json" \
  -d '{
"type": "person",
"subject_url": "https://www.linkedin.com/in/satyanadella",
"webhook_url": "https://your-app.com/webhooks/kooperativa",
"label": "Satya Nadella",
"events": ["person.job_changed", "person.title_changed"]
  }'
```

```js title="JavaScript"
const res = await fetch("https://kooperativa.io/api/v1/monitors", {
  method: "POST",
  headers: {
Authorization: `Bearer ${process.env.KOOPERATIVA_API_KEY}`,
"Content-Type": "application/json",
  },
  body: JSON.stringify({
type: "person",
subject_url: "https://www.linkedin.com/in/satyanadella",
webhook_url: "https://your-app.com/webhooks/kooperativa",
events: ["person.job_changed"],
  }),
});
const { monitor } = await res.json();
```

## Response

```json
{
  "monitor": {
"id": "45e0bba8-196d-4f5e-aecc-52332ca832e2",
"type": "person",
"subject_url": "https://www.linkedin.com/in/satyanadella",
"label": "Satya Nadella",
"webhook_url": "https://your-app.com/webhooks/kooperativa",
"events": ["person.job_changed", "person.title_changed"],
"active": true,
"created_at": "2026-07-14T10:00:00Z"
  }
}
```

:::caution
The `webhook_secret` is shown **once** in your dashboard. Save it immediately. It is never returned by the API and is required to verify webhook signatures.
:::

Source: https://docs.kooperativa.io/monitors/create-monitor/index.mdx
