Upsert a signal_type_sources row — toggle a source for a signal type, append extra keywords, or override the classification prompt.
signal_type_sources row for (id, sourceId). If the row exists it’s updated with the fields provided; otherwise a new row is inserted. Fields not mentioned in the body are left untouched.
Use this to:
/api/v1/signals/types/{id}/sources/{sourceId}.Override precedence. signal_type_sources.prompt_override takes priority over signal_types.scoring_prompt / search_prompt during classification. Pass null or an empty string to clear an override.keywords_extra merges, not replaces. The pipeline unions the signal’s base keywords with keywords_extra (case-insensitive dedup) when fetching from this source.Account-level toggle. To flip a source on or off across all signal types at once, use PUT /api/signals/sources/config instead — it cascades to every matching signal_type_sources row.Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Signal type UUID.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Datasource adapter ID — one of linkedin_posts, reddit, news, linkedin_jobs, hiring_cafe, web_mentions, sec_filings, g2_capterra, bluesky, hacker_news, x_twitter.
All fields are optional. Only keys present in the body are written. prompt_override: "" is stored as null.
Whether this source is queried for this signal type. Cascades separately from the user-level signal_source_configs.enabled toggle.
Extra keywords merged with the signal-level keywords (case-insensitive dedup) when fetching from this source.
If set, overrides the signal's top-level scoring_prompt / search_prompt when classifying results from this source. Pass null or an empty string to clear.
Row upserted. Returns the current state of the row.