# Create a signal

**`POST https://myagentmail.com/linkedin/signals`**

Group: LinkedIn — Signals
Operation ID: `linkedinCreateSignal`

Create a real-time intent watcher. We poll LinkedIn on the chosen
cadence using the named session, classify each NEW post against
the keyword, and (if a webhookUrl is set) POST high-intent matches
to your endpoint with an HMAC-SHA256 signature. The lookback window
is fixed at 24 hours — for historical lookups across a wider window
use POST /v1/linkedin/searches instead.


## Request body

Content-Type: `application/json`

```json
{
  "name": "string",
  "kind": "keyword",
  "query": "string",
  "target": {
    "kind": "profile",
    "url": "https://example.com",
    "label": "string"
  },
  "watchlist": [
    {
      "profileUrl": "https://example.com",
      "label": "string"
    }
  ],
  "sessionId": "string",
  "cadence": "daily",
  "webhookUrl": "https://example.com",
  "filterMinIntent": "medium",
  "intentDescription": "string"
}
```

## Responses

### 201 — Created signal. webhookSecret is returned ONCE on creation when

```json
{
  "signal": {
    "id": "string",
    "kind": "keyword",
    "name": "string",
    "query": "string",
    "target": {
      "kind": "profile",
      "url": "string",
      "urn": "string",
      "label": "string"
    },
    "lastSeenPostUrn": "string",
    "watchlistCount": 0,
    "sessionId": "string",
    "cadence": "daily",
    "webhookUrl": "string",
    "webhookSecret": "string",
    "filterMinIntent": "low",
    "intentDescription": "string",
    "enabled": false,
    "lastPolledAt": "2026-05-01T09:03:22.712Z",
    "nextPollAt": "2026-05-01T09:03:22.712Z",
    "lastError": "string",
    "lastErrorCode": "string",
    "lastErrorAt": "2026-05-01T09:03:22.712Z",
    "matchesCount": 0,
    "createdAt": "2026-05-01T09:03:22.712Z",
    "updatedAt": "2026-05-01T09:03:22.712Z"
  }
}
```

### 403 — Signal limit reached for the tenant's tier.

### 404 — LinkedIn session not found or inactive.

## Code samples

### TypeScript

```typescript
import { MyAgentMail } from "myagentmail";

const client = new MyAgentMail({ apiKey: process.env.MYAGENTMAIL_API_KEY! });

// POST /linkedin/signals
const result = await client.request("post", "/linkedin/signals", { body: {
  "name": "string",
  "kind": "keyword",
  "query": "string",
  "target": {
    "kind": "profile",
    "url": "https://example.com",
    "label": "string"
  },
  "watchlist": [
    {
      "profileUrl": "https://example.com",
      "label": "string"
    }
  ],
  "sessionId": "string",
  "cadence": "daily",
  "webhookUrl": "https://example.com",
  "filterMinIntent": "medium",
  "intentDescription": "string"
} });
```

### curl

```bash
curl -X POST 'https://myagentmail.com/linkedin/signals' \
  -H 'X-API-Key: $MYAGENTMAIL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "kind": "keyword",
  "query": "string",
  "target": {
    "kind": "profile",
    "url": "https://example.com",
    "label": "string"
  },
  "watchlist": [
    {
      "profileUrl": "https://example.com",
      "label": "string"
    }
  ],
  "sessionId": "string",
  "cadence": "daily",
  "webhookUrl": "https://example.com",
  "filterMinIntent": "medium",
  "intentDescription": "string"
}'
```

### Python

```python
import os, requests

r = requests.post(
    "https://myagentmail.com/linkedin/signals",
    headers={"X-API-Key": os.environ["MYAGENTMAIL_API_KEY"]},
    json={
        "name": "string",
        "kind": "keyword",
        "query": "string",
        "target": {
            "kind": "profile",
            "url": "https://example.com",
            "label": "string"
        },
        "watchlist": [
            {
                "profileUrl": "https://example.com",
                "label": "string"
            }
        ],
        "sessionId": "string",
        "cadence": "daily",
        "webhookUrl": "https://example.com",
        "filterMinIntent": "medium",
        "intentDescription": "string"
    },
)
r.raise_for_status()
print(r.json())
```
