Skip to Content
API & MCPPOSTCreate a monitor

REST API

Create a monitor

Watch a LinkedIn profile's posts or one post and collect the people who engaged; or watch a people list for job changes.

POST/v1/monitors
MCP tool create_monitorscope monitors:write40 records per person, once per monitor, when first delivered or listed: a commenter 40 records, a reactor 80; a profile monitor's daily look for new posts 40 (monitor_poll); champion tracking: 80 per delivered change, the checks are free; e-mail found +2; creating and collecting are free

Parameters

kind"profile_posts" | "post" | "person_changes"required
namestringrequired
targetanyrequired
clientstringoptional
AGENCIES: the client this monitor belongs to (defaults to the key’s binding). A subscription can only scope a monitor of its own client or an organization-wide one.
collectobjectoptional
prefilterobjectoptional
limitsobjectoptional
dedupe_windowstringoptional
one engager.found per person per window; later engagements emit engager.engaged_again
excludeobjectoptional
alias of prefilter (preferred name): the exclusion on the free fields {name, headline}

What your agent reads

The tool description exactly as an MCP client receives it in tools/list — it doubles as the full behaviour of the endpoint.

Watch a LinkedIn profile's posts or one post and collect the people who engaged (commenters, optionally likers); or watch a people list for job changes (kind 'person_changes', champion tracking: every collect.poll_every each person's public profile is checked; a new employer → person.job_changed with the new company's domain, a new headline → person.title_changed). Creating is free. PRICE: collecting and resolving are our cost; you pay per person DELIVERED or LISTED — a commenter 40 records, a reactor (liker) 80, once per person per monitor however you take them; a watched profile's daily look 40 records whether or not a subscription exists (a profile monitor with no subscription for 7 days is paused); an e-mail found +2 (find_email). Collection is ASYNCHRONOUS (minutes): create_monitor → create_subscription({scope:{kind:'monitor', monitor_ids:[…]}, trigger:{event_types:['engager.found'], where:{…persona…}}, sinks:[{kind:'webhook', endpoint_id} and/or {kind:'people_list', list_id}]}); or poll list_monitor_people. `kind`: 'profile_posts' (watch a profile: every new post is collected `collect.after` later; polled every `collect.poll_every`) or 'post' (one post, collected once, `collect.after` from now — 0s = at once). `target`: {kind:'profile', input:<profile URL or public id>} | {kind:'post', url:<post URL>}. `collect`: {after:'48h', again_after:'7d'|null, sources:['comments'] | ['comments','reactions'], max_engagers:2000, resolve:'all'|'index_only'|'none', poll_every:'24h'|'48h'|'72h'} — a commenter costs 40 records when delivered or listed; reactions (likers) are opt-in and cost 80 each. A profile monitor's daily look costs 40 records whether or not a subscription exists — a profile monitor with no subscription for 7 days after creation is paused (monitor.paused, invalid_reason no_subscription_7d). `exclude` (alias: `prefilter`): an EXCLUSION on the free fields {name, headline} with the `where` operators (e.g. {headline:{contains:['recruiter','student']}} drops them before anything is read); `dedupe_window` (default 90d): one engager.found per person per window, later engagements emit engager.engaged_again with count_window.

Errors follow one format.