Receiving Events

🚧 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 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

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 keeps working and returns the same network events as before.

Webhook events

If you have a webhook registered, every signal event is also delivered to it as it is recorded. Signal events share the signal.* namespace:

Webhook eventProduced byEvent type in polling
signal.postPublishedpersonPosts, companyPostspostPublished
signal.postFoundpostSearchpostFound
signal.commentAddedpostEngagementcommentAdded
signal.reactionAddedpostEngagementreactionAdded
signal.profileViewedprofileViewersprofileViewed

The network signal keeps its existing event names: network.connectionRequestReceived, network.connectionAccepted and network.connectionAdded. See 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: 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.