All endpoints

Create a signal

POSThttps://myagentmail.com/linkedin/signals

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

name
required
string
kind
"keyword" | "engagement" | "job_change_watchlist"

keyword (default) — saved keyword search. engagement — watch a profile/company for engagers; requires `target`. job_change_watchlist — watch a list of profiles for role/company changes; requires `watchlist`.

enum: "keyword" | "engagement" | "job_change_watchlist"

default: "keyword"

query
string

Required when kind=keyword.

target
object

Required when kind=engagement.

kind
required
"profile" | "company"

enum: "profile" | "company"

url
required
string

format: uri

label
string
watchlist
object[]

Required when kind=job_change_watchlist. Up to 500 entries.

profileUrl
required
string

format: uri

label
string
sessionId
string

Omit or send null to auto-distribute polling across every healthy LinkedIn session for this tenant (recommended — multiplies daily throughput by the number of connected accounts and protects each individual account from rate limits). Pass a specific session id to pin all polls for this signal to that account.

cadence
"daily" | "every_12h" | "every_6h" | "manual"

enum: "daily" | "every_12h" | "every_6h" | "manual"

default: "daily"

webhookUrl
string

format: uri

filterMinIntent
"low" | "medium" | "high"

enum: "low" | "medium" | "high"

default: "medium"

intentDescription
required
string

Plain-English firing rule the LLM classifier treats as the authoritative definition of what should fire. Example: "Flag as ready when the author is a founder/ operator complaining about cold email — skip vendors, agencies, and content marketers."

Responses

201application/jsonCreated signal. webhookSecret is returned ONCE on creation when webhookUrl is set — store it now to verify webhook signatures.
signal
object
id
required
string
kind
required
"keyword" | "engagement" | "job_change_watchlist"

Acquisition strategy for this signal: - keyword: poll LinkedIn search for the saved query. - engagement: poll a tracked profile/company's recent posts and fire on engagers. - job_change_watchlist: poll a list of profiles weekly and fire on role/company changes.

enum: "keyword" | "engagement" | "job_change_watchlist"

name
required
string
query
string

Required for kind=keyword; null otherwise.

target
object

Engagement signals only — the resolved actor target.

kind
"profile" | "company"

enum: "profile" | "company"

url
string
urn
string

Resolved urn:li:fsd_profile:* or urn:li:fsd_company:*.

label
string
lastSeenPostUrn
string

Engagement signals only — watermark of the most recent post processed. We only fire on engagers of posts newer than this.

watchlistCount
integer

Watchlist signals only — number of profiles being tracked.

sessionId
string

null = auto-distribute polling across all healthy LinkedIn sessions for this tenant (recommended). Specific id = pin the signal to that account so all polls come from it.

cadence
required
"daily" | "every_12h" | "every_6h" | "manual"

enum: "daily" | "every_12h" | "every_6h" | "manual"

webhookUrl
string
webhookSecret
string

Returned only on creation. Verify with HMAC-SHA256.

filterMinIntent
required
"low" | "medium" | "high"

enum: "low" | "medium" | "high"

intentDescription
required
string

Plain-English firing rule the LLM classifier uses as the authoritative definition of what should fire. Example: "Flag as ready when the author is a founder/operator complaining about cold email — skip vendors, agencies, and content marketers." The keyword is only a coarse pre-filter; this rule decides engage=true/false and the cited reason on every match.

enabled
required
boolean
lastPolledAt
string

format: date-time

nextPollAt
string

format: date-time

lastError
string
lastErrorCode
string
lastErrorAt
string

format: date-time

matchesCount
integer
createdAt
string

format: date-time

updatedAt
string

format: date-time

403Signal limit reached for the tenant's tier.
404LinkedIn session not found or inactive.

Authentication

Send your API key in the X-API-Key header (or Authorization: Bearer <key>). Any prefix accepted by this endpoint — tk_, wk_, ak_, or sa_ — is documented in the key prefix table.