Skip to main content
POST
Create a LinkedIn content signal

Authorizations

Authorization
string
header
required

Account API key passed in the Authorization header

Query Parameters

account_id
string

Target account UUID. Required for staff callers; ignored for customer API keys.

Body

application/json
name
string
required

Your label for this signal. Unique per account.

Minimum string length: 1
use_cases
object[] | null
required

One to 10 named use-cases, each with its own AI prompt: what a post must be about to fall into it. A post is relevant when it falls into at least one; ambiguous posts match nothing. The names are stamped on the engagers. Optional when accept_all_posts is true, required otherwise.

Maximum array length: 10
accept_all_posts
boolean

Take every post the search returns, without the AI judge and at no post credit; use_cases then become optional. For a search narrow enough to be the relevance rule itself (a competitor's own posts, one precise phrase). Defaults to false.

author_profile_urls
string[] | null

LinkedIn profile URLs (https://www.linkedin.com/in/) of people whose posts to search. At least one of keyword_queries, company_linkedin_ids or author_profile_urls is required. The person's encoded member ID is resolved at sweep time; a URL that cannot be resolved is skipped and logged, never an error.

collection
enum<string>

Engagers only: which person a relevant post yields. engagers (the default): the people who liked or commented on it. post_authors: the person who wrote it, for searches where the post itself is the buying signal. Company-page posts are skipped. No likers/commenters run is made under post_authors, so max_engagers_per_post is unused. Rejected for the authors subject.

Available options:
engagers,
post_authors
company_linkedin_ids
string[] | null

Numeric LinkedIn company IDs whose posts to search (resolve with the companies search first). Combined with each keyword query into one search.

contacts_list_ids
string[]

Contacts lists whose members an authors signal watches. Resolved to contacts at sweep time, so a contact added to the list later is picked up without editing the signal. Authors only; at least one of contacts_list_ids or author_profile_urls is required in that subject.

Maximum array length: 20
detects_event_attendance
boolean

Find the people who said they will be at an event, instead of scoring posts against your own use-cases. A post is relevant when its own author says they will be at a specific, named event that has not happened yet; a recap, an announcement of someone else's attendance, or a bare hashtag is not. Each relevant post reports the event's name, start date, location and the author's role (attending, speaking, hosting, exhibiting, sponsoring). Costs one post credit per post judged, like the AI judge, and use_cases become optional. Cannot be combined with accept_all_posts or post_filter, and not available on the authors subject.

is_enabled
boolean

Defaults to true.

keyword_queries
string[] | null

One to 10 short LinkedIn content queries, each run as its own search and passed through as written: "lean manufacturing", "visual management", "kaizen OR gemba". Quote a phrase with the straight quote only: a typographic one (“ ” « ») is straightened for you, because LinkedIn reads no other kind. Keep each one short (1 to 4 words, one quoted phrase, or a small OR group): LinkedIn's content search returns almost nothing for a long query with several ANDs and many quoted phrases. Test candidates with the query tester in the app. At least one of keyword_queries, company_linkedin_ids or author_profile_urls is required.

Maximum array length: 10
max_contacts_per_sweep
integer<int32>

Authors cost dial: how many contacts have their posts fetched per sweep, least-recently-checked first, so a large list drains over several sweeps. One LinkedinContentSignalAuthor credit each. Defaults to 50.

Required range: 1 <= x <= 500
max_engagers_per_post
integer<int32>

How many likers and how many commenters are read per relevant post. Defaults to 25.

Required range: 1 <= x <= 500
max_posts_per_contact
integer<int32>

Authors cost dial: how many of each watched contact's recent posts are fetched and judged. Defaults to 10.

Required range: 1 <= x <= 50
max_posts_per_sweep
integer<int32>

How many new posts one pass of a sweep reads and, at most, judges (a sweep runs up to 10 passes until it has collected about 50 people or finds nothing new). Defaults to 10.

Required range: 1 <= x <= 1000
mentioned_company_linkedin_ids
string[] | null

Engagers only: numeric LinkedIn company IDs the posts must mention (tag), whoever wrote them, e.g. posts tagging a competitor. Several IDs match a post mentioning any of them. Combined with keyword_queries and the authors into the same searches, so keywords plus a mention finds posts that say the words AND tag the company. Counts as a search on its own.

mentioned_profile_urls
string[] | null

Engagers only: LinkedIn profile URLs (https://www.linkedin.com/in/) of people the posts must mention (tag), whoever wrote them. Several people match a post mentioning any of them. The encoded member ID is resolved at sweep time; when none of the mentioned people can be resolved and no mentioned company is set, the sweep fails with their names rather than searching without the mention. Counts as a search on its own. For posts mentioning the people of an authors signal, use post_sources instead.

min_engagements
integer<int32>

Only consider posts with reactions + comments >= this. Defaults to 0.

Required range: x >= 0
post_filter
string

Decide relevance with your own keyword rule instead of the AI judge: a boolean expression over the post's text, e.g. "lean manufacturing" OR kaizen NOT hiring. Words, quoted phrases, AND, OR, NOT and parentheses; two words side by side are an AND; matching is case-insensitive and word-bounded. Every post the search returns is then judged by the rule alone, at no post credit, and use_cases become optional. Cannot be combined with accept_all_posts.

Maximum string length: 500
post_sources
enum<string>[]

Authors only: which of a watched person's posts count. authored (the default) is what they wrote themselves; mentioned is posts by anyone that tag them, answering "is anyone talking about this person?". Both together reads both corpora. mentioned costs more than authored -- one search per contact per sweep, plus a one-off profile lookup for each contact whose LinkedIn member ID is not already known -- and it can answer nothing for a contact with no LinkedIn profile, which the per-contact counters report separately. Billed as LinkedinContentSignalMention, one per contact searched.

Maximum array length: 2
Available options:
authored,
mentioned
search_sort
enum<string>

Engagers only: the order the searches ask LinkedIn for. date_posted (the default, LinkedIn's Latest) reads the newest posts of the window first; relevance (Top match) reads the posts LinkedIn finds most relevant to the query first, for a broad query where the newest posts are mostly noise. The sweep's date window applies to both. Rejected for the authors subject unless date_posted.

Available options:
date_posted,
relevance
search_window
enum<string>

Engagers only: how far back the searches look, and so the oldest a post may be to count. Omit to follow sweep_frequency: daily reads the past week, weekly and once the past month. Rejected when shorter than the time between two sweeps (past_24h on a weekly signal), and for the authors subject.

Available options:
past_24h,
past_week,
past_month
subject
enum<string>

What the signal watches. engagers (default): search LinkedIn for posts and collect the people who liked or commented on the relevant ones. authors: take people you already know -- the contacts lists below -- and judge their own posts, answering "has this person posted about this?" per contact. The use-cases mean the same thing in both.

Available options:
engagers,
authors

Response

OK

accept_all_posts
boolean
required

When true, every post the search returns is taken as relevant without the AI judge (no LinkedinPostAnalyzed credit); the people who engaged are still filtered on their headline and billed. Use-cases are optional in that mode.

author_profile_urls
string[] | null
required

LinkedIn profile URLs of people whose posts are searched, normalised to https://www.linkedin.com/in/. Authors (companies and people) are a union, combined with keywords into one search.

collection
enum<string>
required

Engagers only: which person a relevant post yields. engagers (the default): the people who liked or commented on it. post_authors: the person who wrote it -- the one shopping in public when the post itself is the buying signal. Posts written by a company page have no person and are skipped. Each collected author is one event with interaction_type Author, filtered and billed like an engager.

Available options:
engagers,
post_authors
company_linkedin_ids
string[] | null
required

Numeric LinkedIn company IDs whose posts are searched. Combined with each keyword query into one search.

contacts_list_ids
string[] | null
required

Contacts lists whose members an authors signal watches. Resolved to contacts at sweep time, so a contact added to the list later is picked up without editing the signal. Authors only; at least one of contacts_list_ids or author_profile_urls is required in that subject.

created_at
string<date-time>
required
detects_event_attendance
boolean
required

Whether the built-in event rule is this signal's relevance rule: a post is relevant when its author said they will be at a named, upcoming event. The event found is reported on the post.

id
string
required
is_enabled
boolean
required

A disabled signal is not swept and costs nothing, but keeps its history.

keyword_queries
string[] | null
required

The short LinkedIn content queries, exactly as you wrote them. Each one runs as its own search. Empty for a search that only follows companies or people.

max_contacts_per_sweep
integer<int32>
required

Authors cost dial: how many contacts have their posts fetched per sweep, least-recently-checked first, so a large list drains over several sweeps. One LinkedinContentSignalAuthor credit each. Defaults to 50.

max_engagers_per_post
integer<int32>
required

Cost dial: how many likers and how many commenters are read per relevant post.

max_posts_per_contact
integer<int32>
required

Authors cost dial: how many of each watched contact's recent posts are fetched and judged. Defaults to 10.

max_posts_per_sweep
integer<int32>
required

Cost dial: how many new posts one pass of a sweep reads and, at most, judges. A sweep runs up to 10 passes, each reading past the posts it already knows, and stops once it has collected about 50 people or finds nothing new. Re-found posts keep their cached verdict and cost nothing.

mentioned_company_linkedin_ids
string[] | null
required

Numeric LinkedIn company IDs the posts must mention (tag), whoever wrote them. Combined with the keyword queries and authors into the same searches.

mentioned_profile_urls
string[] | null
required

LinkedIn profile URLs of people the posts must mention (tag), whoever wrote them, normalised to https://www.linkedin.com/in/.

min_engagements
integer<int32>
required

Only posts with reactions + comments >= this are considered.

name
string
required

Your label for this signal. Unique per account.

Example:

"Shop-floor visibility pains"

post_filter
string
required

The seller's own relevance rule, when the AI judge is not used: a boolean keyword expression over the post's text (words, quoted phrases, AND, OR, NOT, parentheses). Empty means the use-cases and the AI judge decide. When set, every post the search returns is judged by the rule alone, at no LinkedinPostAnalyzed credit, and use-cases are optional.

post_sources
string[] | null
required

Authors only: which of a watched person's posts count. authored (the default) is what they wrote themselves; mentioned is posts by anyone that tag them, answering "is anyone talking about this person?". Both together reads both corpora. mentioned costs more than authored -- one search per contact per sweep, plus a one-off profile lookup for each contact whose LinkedIn member ID is not already known -- and it can answer nothing for a contact with no LinkedIn profile, which the per-contact counters report separately. Billed as LinkedinContentSignalMention, one per contact searched.

search_sort
enum<string>
required

The order the searches ask LinkedIn for. date_posted (LinkedIn's Latest): the newest posts of the window first. relevance (Top match): the posts LinkedIn finds most relevant to the query first, which suits a broad query. The sweep's date window applies to both.

Available options:
date_posted,
relevance
search_window
string
required

How far back the searches look, and so the oldest a post may be to count: past_24h, past_week or past_month. Empty when the window follows sweep_frequency (daily reads the past week, weekly and once the past month).

subject
enum<string>
required

What the signal watches. engagers (default): search LinkedIn for posts and collect the people who liked or commented on the relevant ones. authors: take people you already know -- the contacts lists below -- and judge their own posts, answering "has this person posted about this?" per contact. The use-cases mean the same thing in both.

Available options:
engagers,
authors
updated_at
string<date-time>
required
use_cases
object[] | null
required

Ordered list of named use-cases, each with its own AI prompt. A post is relevant when it falls into at least one; the names are stamped on the engagers it yields.

last_sweep_engagers_collected
integer<int32>

How many people the last run collected from relevant posts. Each one cost one LinkedinContentSignalEngager credit.

last_sweep_outcome
string

What the last run did. One of:

  • completed: it ran; last_sweep_posts_analyzed and last_sweep_engagers_collected say what it did. Zero is a real answer.
  • out_of_credits: skipped before spending, because the account could not pay for a single post analysis or a single engager. This is the one to check when a feed goes quiet — topping up resumes it on the next sweep.
  • failed: it ran and something went wrong, usually the provider. Self-correcting, since the next sweep re-reads an overlapping window.
last_sweep_posts_analyzed
integer<int32>

How many posts the last run had the AI judge. Each one cost one LinkedinPostAnalyzed credit; cached re-finds are not counted.

last_swept_at
string<date-time>

When this signal last ran. Absent until its first sweep.