API v3 is live and in beta: expect possible malfunctions and breaking changes in the coming days. If you find a bug, please report it to your Sillage contact.
v2DeprecatedAgents

Create Agent

Create an agent for a partner workspace.

Creates an agent. The agent is created enabled, but it has no recurring schedule and will not run on its own. Trigger a run yourself with Launch Signal Run, or set a recurring schedule from the Sillage app.

Credit usage

champion_tracking agents are not charged per tracked champion; they are metered only for the Discovery moves they find, the same way as other Discovery agents. Keyword agents (keyword_detection, keyword_post_search, job_posting_keyword_detection) are metered under keyword_signal for the keyword signals they detect. Track consumption with GET /v2/partner/usage.

Ten agent types are supported: keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, champion_tracking, plus five semantic watchlist types.

TypeDescription
keyword_detectionMonitors LinkedIn posts for keywords you choose, scoped to your target accounts.
keyword_post_searchMonitors LinkedIn broadly for keywords you choose — not limited to your target accounts.
job_posting_keyword_detectionMonitors the job postings the workspace's tracked companies publish for keywords you choose.
job_updateDetects job changes and promotions among the workspace's contacts. Takes no parameters.
competitorWatches a list of competitor companies. (company list)
partnerWatches a list of partner companies. (company list)
customerWatches a list of customer companies. (company list)
influencerWatches a list of influencer profiles. (profile list)
championWatches a list of champion profiles. (profile list)
champion_trackingDetects when a tracked champion leaves their company, changes company, or is promoted.

Note: For the five semantic watchlist types, a watchlist of the matching type is created automatically and bound to the new agent. Pass watchlist_id to bind an existing list instead — its type must equal the chosen agent type, otherwise the request returns 422.

champion_tracking works the same way, but always binds a profile watchlist of type champion — the same list a champion agent can bind to, simultaneously. Pass watchlist_id to bind an existing champion watchlist instead of creating one automatically; it must be of type champion, otherwise the request returns 422.

Minimum setup required

Most agent types need a usable persona and at least one target account before they can start monitoring — otherwise there is nothing to target. Before creating an agent of one of these types, the workspace must have:

  • a persona with both a job title and a location set (having a persona on file is not enough on its own) — see Upsert persona, and
  • at least one target account — see Add accounts.

job_update, job_posting_keyword_detection, and champion_tracking are exempt and can be created right away, since none of them is tied to a specific persona or account list.

If the workspace does not meet these requirements yet, the request is refused with 422 and a message naming the missing prerequisite.

Create an agent

POST/api/v2/partner/workspaces/{partner_workspace_id}/agents

Path parameters

ParameterTypeDescription
partner_workspace_idstringOpaque workspace identifier from the partner system.

Request body

FieldTypeRequiredDescription
namestringYesDisplay name of the agent. 1 to 100 characters.
typestringYesThe agent type — one of keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, customer, competitor, partner, influencer, champion, champion_tracking.
parametersobjectConditionalRequired for keyword_detection, keyword_post_search, and job_posting_keyword_detection. The other types take no parameters.
parameters.tracking_keywordsstring[]ConditionalRequired for keyword_detection, keyword_post_search, and job_posting_keyword_detection. At least one is required. keyword_detection matches them against LinkedIn posts from your target accounts; keyword_post_search matches them against LinkedIn posts broadly, not limited to your target accounts; job_posting_keyword_detection matches them against the job title and description of the postings your target accounts publish.
parameters.start_datestringNokeyword_detection and keyword_post_search only — ISO 8601 date. Only posts published after this date are scanned.
watchlist_idintegerNoWatchlist-bound types only (customer, competitor, partner, influencer, champion, champion_tracking) — attach the agent to an existing watchlist (for champion_tracking, a champion watchlist). Omit it and a new empty watchlist of that type is created and bound instead.

Example request — keyword detection

curl -X POST "https://api.getsillage.com/api/v2/partner/workspaces/ws_123/agents" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Hiring signals",
    "type": "keyword_detection",
    "parameters": { "tracking_keywords": ["hiring", "expansion"] }
  }'

Example request — job posting keyword detection

curl -X POST "https://api.getsillage.com/api/v2/partner/workspaces/ws_123/agents" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Target accounts hiring platform roles",
    "type": "job_posting_keyword_detection",
    "parameters": {
      "tracking_keywords": ["Platform Engineer", "DevOps Engineer", "Site Reliability Engineer"]
    }
  }'

Example request — competitor watchlist (bound at creation)

curl -X POST "https://api.getsillage.com/api/v2/partner/workspaces/ws_123/agents" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Competitor tracker",
    "type": "competitor",
    "watchlist_id": 7
  }'

Example request — champion tracking (implicit watchlist)

curl -X POST "https://api.getsillage.com/api/v2/partner/workspaces/ws_123/agents" \
  -H "Authorization: Bearer $SILLAGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Champion job change tracker",
    "type": "champion_tracking"
  }'

Example response

{
  "data": {
    "id": 42,
    "name": "Hiring signals",
    "type": "keyword_detection",
    "enabled": true,
    "parameters": {
      "tracking_keywords": ["hiring", "expansion"]
    },
    "watchlist_kind": null,
    "watchlist_id": null,
    "created_at": "2026-06-12T09:00:00.000Z",
    "updated_at": "2026-06-12T09:00:00.000Z"
  }
}

Response fields

FieldTypeDescription
idintegerNumeric id of the agent. This ID is specific to your environment.
namestringDisplay name of the agent.
typestringAgent type. See the list below.
enabledbooleanWhether the agent is currently active.
parametersobjectAgent configuration. Its shape depends on type.
created_atstringWhen the agent was created (ISO 8601).
updated_atstringWhen the agent was last updated (ISO 8601).

The type returned in the response is one of keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, job_posting, competitor_activity, content_engagement, influencer_engagement or champion_tracking, plus the semantic watchlist types customer, competitor, partner, influencer and champion — watchlist-bound agents always return their semantic type, never an internal label.

Create and update accept ten types, each with its own body shape:

typeparametersBinding
keyword_detectiontracking_keywords required, start_date optional—
keyword_post_searchtracking_keywords required, start_date optional—
job_posting_keyword_detectiontracking_keywords required—
job_updatenonepersona-driven
customer, competitor, partnernonecompany watchlist
influencer, championnoneprofile watchlist
champion_trackingnoneprofile watchlist (champion)

job_posting_keyword_detection tells you when one of your target accounts starts hiring for a role you care about: pass the role names as tracking_keywords (for example "Platform Engineer") and Sillage matches them against the title and description of the job postings those accounts publish.

For the watchlist-bound types, pass watchlist_id to attach an existing watchlist. If you omit it, a new empty watchlist of that type is created and bound to the agent — so an already-populated list you created separately would be left unattached. You can rebind afterwards with PUT /agents/{agent_id}.

Errors

StatusMeaning
401The master key is missing or invalid.
402This workspace is not on a plan that allows agents.
403The master key is not authorized to access this resource.
422Invalid request body — unsupported type, missing tracking_keywords for keyword_detection, keyword_post_search, or job_posting_keyword_detection, or watchlist_id references a list whose type does not match the expected watchlist type for the chosen agent type (for champion_tracking, it must be a champion watchlist). Also returned when the workspace does not yet meet the minimum setup required for this agent type.
429Rate limit exceeded.
500An unexpected server error occurred.

Error responses use RFC 9457 problem documents with Content-Type: application/problem+json.

On this page