Skip to main content
PUT
/
api
/
signals
/
types
/
{id}
Update a signal type
curl --request PUT \
  --url https://app.puffle.ai/api/signals/types/{id} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "label": "<string>",
  "description": "<string>",
  "keywords": [
    "<string>"
  ],
  "disqualifiers": "<string>",
  "search_prompt": "<string>",
  "scoring_prompt": "<string>",
  "allowed_sources": [
    "<string>"
  ],
  "enabled": true,
  "position": 4503599627370495,
  "structured_config": {}
}
'
{
  "type": {
    "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
  }
}

Overview

Performs a partial update on a signal type. Writable fields depend on kind:
  • Structured types (hiring, funding, management_change, competitor_mentions) accept only description, enabled, position, structured_config, scoring_prompt, search_prompt. Everything else is silently dropped — structured types have their label, keywords, and disqualifiers compiled from structured_config at pipeline run time.
  • Keyword types accept label, description, keywords, disqualifiers, search_prompt, scoring_prompt, allowed_sources, enabled, position.
color is never writable.
This operation shares the URL path /api/signals/types/{id} with the delete verb. See Delete a signal type to cascade-remove the row along with its signal_type_sources children.

AI agent notes

This is the internal UI-facing endpoint. Third-party integrations should prefer the v1 public API under /api/v1/signals/types/{id}.To disable a built-in signal type, PUT it with enabled: false — built-in types cannot be deleted, so disabling is the only way to silence them.allowed_sources is validated against the adapter registry. If any ID isn’t one of the 11 registered adapters the handler returns 400 with the invalid IDs listed.

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. The set of writable fields depends on kind: structured types accept only description, enabled, position, structured_config, scoring_prompt, and search_prompt. Keyword types accept label, description, keywords, disqualifiers, search_prompt, scoring_prompt, allowed_sources, enabled, and position. color is never writable. Unrecognized fields are silently ignored.

label
string

Keyword types only. Ignored on structured types.

Minimum string length: 1
description
string
keywords
string[]

Keyword types only. Ignored on structured types.

disqualifiers
string

Keyword types only. Ignored on structured types.

search_prompt
string
scoring_prompt
string
allowed_sources
string[] | null

Keyword types only. List of adapter IDs this signal type is allowed to query. Null clears the restriction. Each ID must be a registered adapter — otherwise 400.

enabled
boolean
position
integer
Required range: 0 <= x <= 9007199254740991
structured_config
object

Structured types only. Shape depends on structured_type — see /guides/signals for each variant.

Response

Signal type updated.

type
object
required

Canonical signal type entity.