Return every signal type owned by the caller with per-source override rows attached. Auto-seeds the 6 built-in defaults on first call.
position. Each entry includes its signal_type_sources rows in a nested sources array.
On first call for a new user, the handler auto-seeds the 6 built-in defaults (4 structured — Hiring, Funding, Leadership Change, Competitor Mentions — and 2 keyword — Pain Point, Product Launch) plus one signal_type_sources row per (type, registered adapter) pair. Existing users missing any built-in type (migration path after new built-ins ship) also get the missing rows seeded on the next call.
/api/v1/signals/types.Creating a type? This page documents the GET. The POST on the same path lives at Create a keyword signal type.Seeding is idempotent. Calling this endpoint many times in rapid succession during first boot is safe — the handler has a retry path that handles the unique-constraint race.Quota is 20 types per user. Use the length of types[] in the response to know how many slots remain before POST /api/signals/types will return 400.Structured vs. keyword. Structured types (kind: "structured") have empty keywords / scoring_prompt in the DB — the pipeline compiles them from structured_config at run time. Don’t be alarmed if these fields look bare.