# Receiving Events

Coming soon – read what your signals detected: poll /signals/poll with an advancing since, or receive every event as a signal.* webhook.

> 🚧 **Coming soon.** Signals are not available yet. This page describes how they will work at launch – the `/signals` endpoints, `signal.*` events and the SDK, CLI and MCP signal commands do not work today. Network monitoring – [`/network/poll`](/docs/monitoring-network) and the `network.*` webhook events – works today.

Every new item a signal detects – a post, a comment, a reaction, a profile view, a connection change – is recorded once as an **event**. You can read events in two ways, and both return the same event objects:

- **Polling** – ask for everything recorded since your last request.
- **Webhooks** – Linked API sends each event to your endpoint as it is recorded.

Events are kept for **90 days**, including after the signal that produced them is deleted.

## Polling

```text
POST https://api.linkedapi.io/signals/poll
```

The request body is a single object. All fields are optional:

```json
{
  "since": "2026-10-12T00:00:00Z",
  "signalId": "5b0d3c1e-8f2a-4c1b-9e7d-2a6f4c8b1d90",
  "signalType": "personPosts",
  "eventType": "postPublished"
}
```

- `since` – return events detected after this timestamp. If omitted, all retained events are returned.
- `signalId` – only events of this signal.
- `signalType` – only events of signals of this type.
- `eventType` – only events of this type, such as `postPublished` or `commentAdded`.

Events of every signal on the account come back together unless you filter them:

```json
{
  "success": true,
  "result": {
    "events": [
      {
        "id": "c7e1a0f2-3d4b-4e5f-8a9b-0c1d2e3f4a5b",
        "signalId": "5b0d3c1e-8f2a-4c1b-9e7d-2a6f4c8b1d90",
        "signalType": "personPosts",
        "label": "lead-1042",
        "type": "postPublished",
        "detectedAt": "2026-10-12T16:40:00Z",
        "post": {
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
          "activityUrn": "urn:li:activity:1234567890123456789",
          "time": "2026-10-12T14:05:00Z",
          "type": "original",
          "author": {
            "type": "person",
            "name": "Example Person",
            "urn": "urn:li:member:123456789",
            "profileUrl": "https://www.linkedin.com/in/person1",
            "headline": "Product Marketing Lead"
          },
          "text": "We are hiring our first sales engineer.",
          "reactionsCount": 4,
          "commentsCount": 1,
          "repostsCount": 0
        }
      },
      {
        "id": "f4d92946-8821-6da6-ff4c-c36f0671292a",
        "signalId": "0e6f1a2b-7c8d-4e9f-a0b1-c2d3e4f5a6b7",
        "signalType": "network",
        "label": null,
        "type": "connectionAccepted",
        "detectedAt": "2026-10-12T11:35:00Z",
        "personUrn": "urn:li:member:987654321",
        "personUrl": "https://www.linkedin.com/in/person2"
      }
    ]
  }
}
```

- `events` – array of events, ordered newest first.
  - `id` – unique event identifier. The same event delivered as a webhook carries the same `id`.
  - `signalId`, `signalType`, `label` – the signal that produced the event and its label.
  - `type` – event type. Each signal type page lists its event types.
  - `detectedAt` – when Linked API recorded the event. It is the time of the check, not the time the thing happened on LinkedIn: a post published at 14:05 and found by the 16:40 check has `detectedAt` 16:40 and `post.time` 14:05.
  - The rest is the event's subject: `post`, `comment`, `reaction`, `viewer`, or the person fields of a `network` event. Their fields are described on each signal type page.

**Recommended flow:**

1. Leave `since` empty on the first request to retrieve everything recorded so far.
2. On every next request, pass the `detectedAt` of the most recent event you have as `since`.
3. Process each event once by its `id`.

> 💡 [`/network/poll`](/docs/monitoring-network) keeps working and returns the same `network` events as before.

## Webhook events

If you have a [webhook](/docs/webhooks) registered, every signal event is also delivered to it as it is recorded. Signal events share the `signal.*` namespace:

| Webhook event | Produced by | Event `type` in polling |
|---|---|---|
| `signal.postPublished` | `personPosts`, `companyPosts` | `postPublished` |
| `signal.postFound` | `postSearch` | `postFound` |
| `signal.commentAdded` | `postEngagement` | `commentAdded` |
| `signal.reactionAdded` | `postEngagement` | `reactionAdded` |
| `signal.profileViewed` | `profileViewers` | `profileViewed` |

The `network` signal keeps its existing event names: `network.connectionRequestReceived`, `network.connectionAccepted` and `network.connectionAdded`. See [network events](/docs/webhook-event-types#network-events).

`data` carries the event exactly as polling returns it, plus `accountId`:

```json
{
  "id": "signal.commentAdded:9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
  "type": "signal.commentAdded",
  "createdAt": "2026-10-12T16:40:02.000Z",
  "data": {
    "id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
    "accountId": "f9b4346a-...",
    "signalId": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
    "signalType": "postEngagement",
    "label": "launch-post",
    "type": "commentAdded",
    "detectedAt": "2026-10-12T16:40:00Z",
    "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
    "comment": {
      "commentUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789/?dashCommentUrn=urn%3Ali%3Afsd_comment%3A(9876543210%2Curn%3Ali%3Aactivity%3A1234567890123456789)",
      "author": {
        "type": "person",
        "name": "John Doe",
        "profileUrl": "https://www.linkedin.com/in/john-doe",
        "headline": "Head of Growth"
      },
      "time": "2h",
      "text": "Interested – how does it handle multiple accounts?",
      "isReply": false
    }
  }
}
```

To receive only some signal events, use [event selection](/docs/webhook-event-types#event-selection): `signal.*` for all of them, or exact types such as `signal.commentAdded`.

> Events you deselect from the webhook are still recorded and still returned by polling. The webhook selection controls delivery, not what signals detect.
