Get a signal template
Retrieve one signal from the catalogue, including a retired one.
Retrieves one signal by ID, including what a setup for it can carry.
Unlike List signal templates, this also resolves a retired signal — so a setup that already points at one keeps working after it leaves the list.
Use the id returned by List signal templates. This ID is specific to your environment.
Route
Access modes
Use a workspace API key. The workspace is inferred from the key.
Authorization: Bearer sk_live_...Path parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | ID of the signal, from the list endpoint. This ID is specific to your environment. |
Example request
curl "https://api.getsillage.com/api/v3/signal-templates/3" \
-H "Authorization: Bearer $SILLAGE_API_KEY"Success response
Status: 200 OK
{
"data": {
"id": 3,
"name": "Mentions your keywords",
"description": "Finds posts mentioning the keywords you're tracking.",
"row_summary": "Posts mentioning your keywords",
"category": "engagement",
"status": "live",
"subjects": ["person"],
"scopes": ["discovery", "account_monitoring"],
"tags": ["popular"],
"pricing": {
"account_monitoring": {
"signal_bucket": "standard",
"credits": 100,
"unit": "key_account_per_month"
},
"discovery": null
},
"setup": {
"fields": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"keywords": {
"type": "array",
"items": { "type": "string" },
"default": ["acme"],
"x-label": "Keywords",
"x-hint": "Which words to watch for.",
"x-control": "keywords"
},
"scopes": {
"type": "array",
"items": { "type": "string", "enum": ["discovery", "account_monitoring"] },
"default": ["discovery"],
"x-label": "Where it looks"
}
},
"required": ["scopes"],
"unevaluatedProperties": false,
"allOf": [
{
"if": {
"properties": { "scopes": { "contains": { "const": "discovery" } } }
},
"then": {
"properties": {
"max_signals_per_week": {
"type": "integer",
"minimum": 1,
"default": 50,
"x-label": "Maximum signals per week",
"x-hint": "Caps how many signals this can produce in a week.",
"x-control": "number"
}
}
}
}
]
},
"shape": "keyword"
},
"display_order": 3,
"archived_at": null
}
}Response fields
| Field | Type | Description |
|---|---|---|
| data.id | integer | ID of the signal. Specific to your environment. |
| data.name | string | The signal name shown to a user. |
| data.description | string or null | A short explanation of what this signal watches for. |
| data.row_summary | string or null | A one-line summary, for a compact list display. |
| data.category | string | The family of signals this one belongs to. |
| data.status | string | live if this signal can be set up today, coming_soon otherwise. |
| data.subjects | array of string | Who this signal watches — person, company, or both. |
| data.scopes | array of string | Which setups this signal supports — discovery, account_monitoring, or both. |
| data.tags | array of string | Labels you can filter on, e.g. popular. An open list — a new label can appear here without notice. |
| data.pricing | object | What this signal costs your workspace, by mode. See below. |
| data.pricing.account_monitoring | object or null | This signal's account-monitoring price, carried by its bucket. null when it has no bucket yet, or the bucket has no price. See Signal Buckets. |
| data.pricing.account_monitoring.signal_bucket | string | Key of the bucket carrying this price (essential, standard or advanced). |
| data.pricing.account_monitoring.credits | number | The exact price, in credits — never rounded. |
| data.pricing.account_monitoring.unit | string | Always key_account_per_month. |
| data.pricing.discovery | object or null | This signal's discovery price, per signal found. null when this signal has no discovery price. |
| data.pricing.discovery.credits | number | The exact price, in credits — never rounded. |
| data.pricing.discovery.unit | string | Always signal_found. |
| data.setup | object | What a setup for this signal can carry. See below. |
| data.setup.fields | object | A JSON Schema document describing a setup's parameters object. Render a form from it, or validate against it. |
| data.setup.shape | string | The family of parameters this signal asks for: keyword, engagement, job_change, job_posting (read from job postings), firmographic, internal_signal (read from your own systems rather than public activity), or custom. |
| data.display_order | integer | The position this signal should be shown at, ascending. |
| data.archived_at | string or null | When this signal was retired, null while still active. This endpoint keeps resolving a retired signal by ID. |
Each property inside setup.fields may carry x-label, x-hint, x-control and
x-watchlist-type extensions. The first three describe how to render the property;
x-watchlist-type, on a list_id property, says which kind of list that signal
accepts. These are extensions, not part of the JSON Schema standard — ignore any x-
property your client does not recognize.
pricing.account_monitoring: null or pricing.discovery: null means that mode has no
price yet, not that it is free. See Signal Buckets for
the account-monitoring rate.
Errors
| Status | Meaning |
|---|---|
| 400 | id is not a valid ID. |
| 401 | The API key is missing or invalid. |
| 404 | No signal matches this ID. |
| 429 | Rate limit exceeded. |
| 500 | An unexpected server error occurred. |
Error responses use RFC 9457 problem documents with Content-Type: application/problem+json. type is always about:blank on v3 — title is what tells one problem from another:
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "Signal template not found",
"instance": "/api/v3/signal-templates/99999"
}