Create Agent
Create an agent for your workspace.
Creates an agent for your workspace. A workspace can have multiple agents. The agent is created enabled (enabled: true) and starts monitoring immediately.
Credit usage
champion_tracking agents consume credits from your workspace balance each time a tracked champion is re-enriched — a recurring cost for as long as the agent stays enabled. Keyword agents (keyword_detection, keyword_post_search, job_posting_keyword_detection) consume credits for the keyword signals they detect.
Ten agent types are supported: keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, champion_tracking, plus five semantic watchlist types.
| Type | Description |
|---|---|
keyword_detection | Monitors LinkedIn posts for specified keywords, scoped to your target accounts. |
keyword_post_search | Monitors LinkedIn broadly for specified keywords — not limited to your target accounts. |
job_posting_keyword_detection | Monitors the job postings your tracked companies publish for specified keywords. |
job_update | Detects job changes and promotions among your contacts. |
competitor | Watches a list of competitor companies. (company list) |
partner | Watches a list of partner companies. (company list) |
customer | Watches a list of customer companies. (company list) |
influencer | Watches a list of influencer profiles. (profile list) |
champion | Watches a list of champion profiles. (profile list) |
champion_tracking | Detects when a tracked champion leaves their company, changes company, or is promoted. (profile list) |
Note: For the five semantic watchlist types, a watchlist of the matching type is created automatically and bound to the new agent. Pass
watchlist_idto bind an existing list instead — its type must equal the chosen agent type, otherwise the request returns422.
champion_trackingworks the same way, but always binds a profile watchlist of typechampion— the same list achampionagent can bind to, simultaneously. Passwatchlist_idto bind an existing champion watchlist instead of creating one automatically; it must be of typechampion, otherwise the request returns422.
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, your 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), and
- at least one target account.
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 your workspace does not meet these requirements yet, the request is refused with 422 and a message naming the missing prerequisite and the tool to call first, for example:
"Create a persona with sillage_v2_upsert_persona (job_title and location required) before creating an agent.""Persona is missing job_title. Update it with sillage_v2_upsert_persona before creating an agent.""Add at least one top account with sillage_v2_add_top_accounts first."
The response also includes a type field that identifies the missing prerequisite, so your code can check it instead of parsing the message: https://docs.getsillage.com/errors/persona-incomplete when the persona is missing or incomplete (also returned when both prerequisites are missing — the message then names both), or https://docs.getsillage.com/errors/insufficient-top-accounts when only the target account is missing.
{
"type": "https://docs.getsillage.com/errors/persona-incomplete",
"title": "Persona incomplete",
"status": 422,
"detail": "Create a persona with sillage_v2_upsert_persona (job_title and location required) before creating an agent.",
"instance": "/api/v2/agents"
}Create agent
Request body
| Field | Type | Description |
|---|---|---|
| name | string | Display name of the agent. Between 1 and 100 characters. |
| type | enum (keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, competitor, partner, customer, influencer, champion, champion_tracking) | The agent type. |
| parameters | object | keyword_detection, keyword_post_search, and job_posting_keyword_detection only. Type-specific configuration (see below). Omit for watchlist types and champion_tracking. |
| parameters.tracking_keywords | string[] | Keywords Sillage monitors — in LinkedIn posts for keyword_detection (scoped to your target accounts) or keyword_post_search (broad search across LinkedIn), or in your tracked companies' job postings (title and description) for job_posting_keyword_detection. Minimum 1 required. |
| parameters.max_posts_to_scrape | integer | keyword_detection only. Optional. Maximum number of posts to scrape per run. |
| parameters.start_date | string | keyword_detection and keyword_post_search only. Optional. ISO 8601 date — scrape only posts published after this date. |
| watchlist_id | integer | Optional. Watchlist types and champion_tracking only. Bind an existing list of the expected type instead of creating one automatically — for champion_tracking the list must be of type champion, otherwise returns 422. |
Example request — keyword detection
curl -X POST "https://api.getsillage.com/api/v2/agents" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "LinkedIn keyword monitor",
"type": "keyword_detection",
"parameters": {
"tracking_keywords": ["fundraising", "series a", "\"series a\"", "hiring sales"]
}
}'Example request — competitor watchlist (bound at creation)
curl -X POST "https://api.getsillage.com/api/v2/agents" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Competitor tracker",
"type": "competitor",
"watchlist_id": 7
}'Example request — job update
curl -X POST "https://api.getsillage.com/api/v2/agents" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Job change tracker",
"type": "job_update"
}'Example request — job posting keyword detection
curl -X POST "https://api.getsillage.com/api/v2/agents" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Hiring intent monitor",
"type": "job_posting_keyword_detection",
"parameters": {
"tracking_keywords": ["salesforce", "revenue operations", "outbound"]
}
}'Example request — champion tracking (implicit watchlist)
curl -X POST "https://api.getsillage.com/api/v2/agents" \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Champion job change tracker",
"type": "champion_tracking"
}'Example response
201 Created
{
"data": {
"id": 42,
"name": "LinkedIn keyword monitor",
"type": "keyword_detection",
"enabled": true,
"parameters": {
"tracking_keywords": ["fundraising", "series a", "hiring sales"]
},
"watchlist_kind": null,
"watchlist_id": null,
"created_at": "2026-06-18T10:00:00.000Z",
"updated_at": "2026-06-18T10:00:00.000Z"
}
}Response fields
| Field | Type | Description |
|---|---|---|
| data.id | integer | Identifier of the agent. |
| data.name | string | Display name of the agent. |
| data.type | string | Agent type (keyword_detection, keyword_post_search, job_posting_keyword_detection, job_update, competitor, partner, customer, influencer, champion, champion_tracking). |
| data.enabled | boolean | Whether the agent is currently active. A newly created agent is true. |
| data.parameters | object | Configured parameters (keyword detection, keyword post search, and job posting keyword detection); empty object for watchlist types and champion_tracking. |
| data.watchlist_kind | string | null | Kind of the bound watchlist (company or profile), or null when unbound. |
| data.watchlist_id | integer | null | Numeric id of the bound watchlist, or null when unbound. |
| data.created_at | string | ISO 8601 creation timestamp. |
| data.updated_at | string | ISO 8601 last-update timestamp. |
Errors
| Status | Description |
|---|---|
| 401 | The API key is missing or invalid. |
| 422 | Invalid 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 — see Minimum setup required. |