Skip to main content
PATCH
/
api
/
v1
/
signals
/
types
/
{id}
Update a signal type
curl --request PATCH \
  --url https://app.puffle.ai/api/v1/signals/types/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "enabled": true,
  "keywords": [
    "<string>"
  ],
  "disqualifiers": [
    "<string>"
  ],
  "config": {},
  "name": "<string>",
  "description": "<string>",
  "search_instructions": "<string>",
  "scoring_criteria": "<string>",
  "sources": [
    "news"
  ]
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "label": "<string>",
  "description": "<string>",
  "kind": "structured",
  "enabled": true,
  "keywords": [
    "<string>"
  ],
  "disqualifiers": [
    "<string>"
  ],
  "config": {},
  "config_schema": {},
  "built_in": true,
  "search_instructions": "<string>",
  "scoring_criteria": "<string>",
  "sources": [
    "news"
  ]
}

Overview

Partial update of signal type fields. Built-in types cannot be renamed (name) or re-scoped (sources) — those fields are 400 if supplied. Keyword types require at least 1 keyword when enabled: true. Structured types validate config against their config_schema. When sources changes, signal_type_sources rows are synced in the same call.
This operation shares the URL path /api/v1/signals/types/{id} with other verbs. See the sibling page for related operations on the same resource.

Authorizations

Authorization
string
header
required

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

Path Parameters

id
string<uuid>
required

Signal type UUID.

Pattern: ^([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)$

Body

application/json

Partial update. Field-level rules depend on whether the type is built-in and on its kind — structured types validate config against their schema; keyword types require at least 1 keyword when enabled.

enabled
boolean
keywords
string[]

Replaces the full keyword list. Max 50 entries. Enabled keyword types must keep at least 1 keyword.

Maximum array length: 50
disqualifiers
string[]

Exclusion phrases. Stored server-side as a dot-separated string but round-trips as an array.

config
object

Structured-type payload (hiring/funding/etc.). Shape validated against the type's config_schema. Ignored for keyword types.

name
string

Rename. Not allowed on built-in types.

Required string length: 1 - 100
description
string
Maximum string length: 500
search_instructions
string
Minimum string length: 1
scoring_criteria
string
Minimum string length: 1
sources
enum<string>[]

Replaces the enabled source set. Not allowed on built-in types. Syncs signal_type_sources in-place.

Minimum array length: 1

External data source that feeds signals. A signal type can be scoped to any subset of sources; the scanner fans out across the enabled set and classifies each hit.

Available options:
news,
reddit,
hacker_news,
x_twitter,
linkedin_posts,
linkedin_jobs,
g2_capterra

Response

Signal type updated. Returns the full type object.

Public signal type. Returned by every signal-type endpoint and referenced from each signal via its signal_type label.

id
string<uuid>
required
Pattern: ^([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)$
label
string
required

Display name, shown in the UI and echoed as signal_type.

description
string
required
kind
enum<string>
required

structured — built-in type (hiring, funding, management_change, competitor_mentions) with a typed config payload. keyword — free-form user-defined type driven by keywords + search_instructions + scoring_criteria.

Available options:
structured,
keyword
enabled
boolean
required

If false, the scanner skips this type entirely.

keywords
string[]
required
disqualifiers
string[]
required

Exclusion phrases. An AI judge skips hits that match any disqualifier.

config
object
required

Structured-type payload. Keys depend on the underlying type (e.g. roles/seniority for hiring; stages/industries for funding). Null for keyword types.

config_schema
object
required

JSON Schema describing the shape of config. Null for keyword types — there's no structured config.

built_in
boolean
required

Built-in types cannot be renamed, deleted, or have their sources changed. Only their prompts, keywords, disqualifiers, and structured config are editable.

search_instructions
string | null
required
scoring_criteria
string | null
required
sources
enum<string>[] | null
required

Subset of sources enabled for this type. Null means no restriction was ever set; otherwise only listed sources feed this type.

External data source that feeds signals. A signal type can be scoped to any subset of sources; the scanner fans out across the enabled set and classifies each hit.

Available options:
news,
reddit,
hacker_news,
x_twitter,
linkedin_posts,
linkedin_jobs,
g2_capterra