Skip to main content
GET
/
api
/
signals
/
types
List signal types
curl --request GET \
  --url https://app.puffle.ai/api/signals/types \
  --header 'Authorization: Bearer <token>'
{ "types": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "label": "<string>", "description": "<string>", "kind": "structured", "structured_type": "hiring", "structured_config": {}, "keywords": [ "<string>" ], "disqualifiers": "<string>", "scoring_prompt": "<string>", "search_prompt": "<string>", "color": "<string>", "enabled": true, "position": 4503599627370495, "built_in": true, "sources": [ { "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "signal_type_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "source_id": "<string>", "enabled": true, "keywords_extra": [ "<string>" ], "prompt_override": "<string>", "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ], "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ] }

Overview

Returns every signal type the caller owns, sorted by 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.

AI agent notes

This is the internal UI-facing endpoint. Third-party integrations should prefer the v1 public API under /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.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Response

All signal types for the caller, sorted by position. Built-ins are seeded the first time this endpoint is hit.

types
object[]
required