---
title: "Create Signal"
method: POST
path: "/v1/signals"
tags: ["signals"]
---

# Create Signal

`POST /v1/signals`

Create a signal from a catalog preset.

The signal checks its provider daily and imports the qualified leads or
companies into a destination list it creates under the same name. Read
`GET /v1/signals/presets` first to pick the preset and learn which
detection filters it takes. The signal starts active and runs a first
check immediately.

Requires the `signals:write` scope on the API key.

## Request body

- CreateSignalPublicInput
  - `signal_type` 'LINKEDIN_OWN_POST_ENGAGEMENT' | 'LINKEDIN_COMPETITOR_POST_ENGAGEMENT' | 'LINKEDIN_PERSON_POST_ENGAGEMENT' | 'LINKEDIN_KEYWORD_MENTION' | 'LINKEDIN_OWN_COMPANY_FOLLOWERS' | 'LINKEDIN_COMPETITOR_FOLLOWERS' | 'LINKEDIN_COMPANY_PAGE_FOLLOWERS' | 'HIRING_SIGNALS' | 'JOB_DESCRIPTION_KEYWORD' | 'FUNDING_EVENTS' | 'TECH_ADOPTION' | 'NEWS_EVENTS' | 'CUSTOM_EVENT', required
  - `name` string, required
  - `search_filters` FilterTexts
  - `import_target` 'PEOPLE' | 'COMPANIES'
  - `event_subject` 'PEOPLE' | 'COMPANIES'
  - `max_per_run` integer, nullable — Daily ceiling on imported entries. Cannot be combined with `max_companies_per_run`.
  - `max_companies_per_run` integer, nullable — Daily ceiling on detected companies consumed. Only for a company preset importing people.
  - `max_contacts_per_company` integer, nullable — How many people to import per detected company. Requires `max_companies_per_run`.
  - `enrich_email` boolean — Whether imported leads get their email enriched.
  - `enrich_phones` boolean — Whether imported leads get their phone enriched.
  - `sequence_template_id` string, uuid, nullable — Sequence template imported leads are enrolled into. People destinations only.
  - `import_search_filters` FilterTexts

## Response `201`

Successful Response

- SignalPublicOutput
  - `id` string, uuid, required — Unique identifier of the signal.
  - `name` string, nullable, required — Name of the signal and of its destination list.
  - `signal_type` 'LINKEDIN_OWN_POST_ENGAGEMENT' | 'LINKEDIN_COMPETITOR_POST_ENGAGEMENT' | 'LINKEDIN_PERSON_POST_ENGAGEMENT' | 'LINKEDIN_KEYWORD_MENTION' | 'LINKEDIN_OWN_COMPANY_FOLLOWERS' | 'LINKEDIN_COMPETITOR_FOLLOWERS' | 'LINKEDIN_COMPANY_PAGE_FOLLOWERS' | 'HIRING_SIGNALS' | 'JOB_DESCRIPTION_KEYWORD' | 'FUNDING_EVENTS' | 'TECH_ADOPTION' | 'NEWS_EVENTS' | 'CUSTOM_EVENT', required
  - `status` 'ACTIVE' | 'PAUSED' | 'ARCHIVED', required
  - `cadence` 'DAILY' | 'WEEKLY', required
  - `max_per_run` integer, nullable, required — Daily ceiling on imported entries, when one was set.
  - `max_companies_per_run` integer, nullable, required — Daily ceiling on detected companies consumed, when one was set.
  - `max_contacts_per_company` integer, nullable, required — People imported per detected company, when one was set.
  - `max_per_day` integer, required — Ceiling on the entries the signal imports in one day, resolved from the caps above.
  - `enrich_email` boolean, required — Whether imported leads get their email enriched.
  - `enrich_phones` boolean, required — Whether imported leads get their phone enriched.
  - `imported_count` integer, required — Entries the signal has imported since it was created.
  - `contact_list_id` string, uuid, nullable, required — Destination list, when the signal imports people.
  - `account_list_id` string, uuid, nullable, required — Destination list, when the signal imports companies.
  - `created_at` string, date-time, required — When the signal was created.
  - `archived_at` string, date-time, nullable, required — When the signal was retired, if it was.

## Changes

- **2026-09-01** `0646a72cff02` — 1 warning, 3 info
  - added the new `LINKEDIN_PERSON_POST_ENGAGEMENT` enum value to the `signal_type` response property for the response status `201`
  - added the new `LINKEDIN_PERSON_POST_ENGAGEMENT` enum value to the request property `signal_type`
  - added the new `linkedin_person_url_or` enum value to the request property `import_search_filters/propertyNames/`
  - added the new `linkedin_person_url_or` enum value to the request property `search_filters/propertyNames/`
- **2026-08-28** `5327ff62a22f` — 3 warning, 5 info
  - added the new `LINKEDIN_COMPANY_PAGE_FOLLOWERS` enum value to the `signal_type` response property for the response status `201`
  - added the new `LINKEDIN_COMPETITOR_FOLLOWERS` enum value to the `signal_type` response property for the response status `201`
  - added the new `LINKEDIN_OWN_COMPANY_FOLLOWERS` enum value to the `signal_type` response property for the response status `201`
  - added the new `LINKEDIN_COMPANY_PAGE_FOLLOWERS` enum value to the request property `signal_type`
  - …4 more
- **2026-08-27** `75e08cd17b3d` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/topo/apis/topo-public-api/changes/v1/signals/post.md)

---

[API](https://skmtc.dev/topo/apis/topo-public-api.md) · [All operations](https://skmtc.dev/topo/apis/topo-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/topo/topo-public-api/revisions/0646a72cff02/schema)
