Skip to content
Signal
Dashboard

Campaigns

The campaign object: targets, criteria, custom fields and discovery settings.

A campaign is a set of target accounts and people. Its criteria tell the research agents what a good target is. Its custom fields define the values that Signal collects for each account and each person. Its discovery settings control the scheduled discovery runs. A new campaign has no accounts and no people. To move a V1 integration, read Migrate from V1.

The campaign object

FieldTypeDescription
idUUIDRequired. ID of the campaign.
namestringRequired. Name of the campaign, 1 to 200 characters.
descriptionstringRequired. The ideal customer profile in plain words.
entity_typesarray of enumRequired. The types that the campaign targets: company, school_district and person. See Targets.
criteria_editablebooleanWhether this campaign representation supports criteria updates. Product permissions and field validation still apply.
criteriaobjectWhat makes a good target. criteria.account and criteria.person are nullable strings.
fieldsobjectNullable when custom fields are restricted. Otherwise fields.account and fields.person are arrays of field objects. See Fields.
countsobjectNullable when membership reads are restricted. Otherwise accounts and people count membership copies. A record can have several copies in one campaign, so counts can exceed search results. by_review_state.accounts and by_review_state.people give the counts for new, reviewed and passed.
restrictedarray of stringsEmbedded sections omitted or limited by product permissions. See Permissions.
discoveryobjectNullable. The discovery settings. Null until the first discovery write. See Discovery.
monitor_idsarray of UUIDIDs of monitors owned by this campaign. Excludes monitors owned by another campaign that watch this campaign.
active_run_idsarray of UUIDIDs of the discovery, import and monitor runs that are queued or running.
created_attimestampRequired. Time when the campaign was created.
updated_attimestampRequired. Time of the last change to the campaign.
{
  "id": "3f2b8a4e-1c5d-4e7f-9a0b-6c2d8e1f4a7b",
  "name": "Example campaign",
  "description": "Companies that need data integration software",
  "entity_types": ["company", "person"],
  "criteria_editable": true,
  "criteria": {
    "account": "Companies that need data integration software",
    "person": "Companies that need data integration software"
  },
  "fields": { "account": [], "person": [] },
  "counts": {
    "accounts": 0,
    "people": 0,
    "by_review_state": {
      "accounts": { "new": 0, "reviewed": 0, "passed": 0 },
      "people": { "new": 0, "reviewed": 0, "passed": 0 }
    }
  },
  "discovery": null,
  "monitor_ids": [],
  "active_run_ids": [],
  "created_at": "2026-09-23T12:00:00.000Z",
  "updated_at": "2026-09-23T12:00:00.000Z"
}

Targets

entity_types sets what the campaign targets. The value is fixed when you create the campaign.

  • Send exactly one account type: company or school_district.
  • Add person to also find people at each account.
  • The account type comes first in the response.
  • The same type twice gives 422.
  • criteria.person needs person in entity_types.

The research agents read criteria. When create_campaign has no criteria value for a target, Signal copies the description into that value. When update_campaign changes description, each criteria value that still equals the old description takes the new description. A criteria value with its own text does not change. criteria in the same request wins. Check criteria_editable before offering criteria edits. A false value means the API cannot edit this representation, even when criteria text is readable. Some campaigns that the web app created store their criteria as fit fields (criteria_*). For such a campaign, update_campaign with criteria gives 409 with the code conflict. Change those criteria in the web app.

Fields

Custom fields define extra values that Signal collects for the records of a campaign. fields.account applies to the accounts. fields.person applies to the people. The research agents read the field description. Each record holds its values in membership.fields. Read Membership.

FieldTypeDescription
namestringRequired. Name of the field.
typeenumRequired. Value type of the field.
descriptionstringWhat the field holds. Default "".
enum_valuesarrayNullable. The allowed values when type is enum. Null for other types.

You can add five field types:

TypeValue
stringText.
numberA number.
integerA whole number.
booleantrue or false.
enumOne value from enum_values.

A response can also show the types array and object. update_campaign cannot add these two types.

Use update_campaign with fields.account or fields.person to change the fields. Each one takes add and remove.

RuleValue
Items in add0 to 50 field definitions. A field with the name of an existing custom field replaces it.
Items in remove0 to 50 field names. The stored values stay, but Signal hides them.
name1 to 64 characters. Lower case letters, digits and underscores. The first character is a letter. A default field name and the prefix criteria_ are not allowed. Either one gives 422 with the code validation_error. The item in error.details.errors has the type field_reserved.
typeOne of the five types above. Default string.
description0 to 2000 characters.
enum_values1 to 100 strings. Required when type is enum. Not allowed for other types.
fields.personNeeds person in entity_types.

A new field applies to records that later discovery and import runs add. Existing records keep an empty value. The API has no operation that fills the field for existing records.

Discovery

Discovery reference owns the settings, schedule states and start rules.

Update and delete

update_campaign changes only the fields in the body. When one part of the request is not valid, nothing changes.

delete_campaign needs campaign.write and write access to the resources its deletion changes, including affected membership, configuration, schedules and canceled runs. It removes the campaign, its memberships, and its discovery and import configuration and schedules. It retains signals and monitor configuration. You cannot undo the delete. The permission rules apply to every affected resource.

Source deletion preserves historical signals and pauses monitors that depend on the source. Read Monitor targets and signal subjects.

  • The delete cancels active discovery and import runs whose discovery or import configuration is removed. Each run gets the status canceled.
  • After the delete, discovery and import runs are no longer available through run operations. Retained monitor runs remain readable.
  • Monitors that watch this campaign pause, including monitors created through another campaign. Set a valid replacement source before resuming. Independent monitors continue.
  • An account or a person that is in another campaign stays. A record that was only in this campaign keeps its ID. Read Membership.

Operations

Each path below follows $LINKT_API_URL/v2. Set LINKT_API_URL to the origin only, for example https://api.signal.linkt.ai.

OperationMethod and pathPurpose
list_campaignsGET /campaignsList the campaigns of the organization.
create_campaignPOST /campaignsCreate a campaign. Returns 201.
get_campaignGET /campaigns/{campaign_id}Get one campaign.
update_campaignPATCH /campaigns/{campaign_id}Change the name, description, criteria, fields or discovery.
delete_campaignDELETE /campaigns/{campaign_id}Delete the campaign and its data. Returns 204.

The membership operations of a campaign are on Membership. The monitor operations are on Monitors.

curl --fail-with-body --request GET "$LINKT_API_URL/v2/campaigns/$CAMPAIGN_ID" \
  --header "x-api-key: $LINKT_API_KEY"

API reference: get_campaign

APP-483 candidate. A campaign may supply a monitor with selected records. The organization owns the resulting observations. Deleting the source retains history and monitor configuration and pauses its dependent monitors. Set a valid replacement source before resuming. Topic and CSV monitors remain independent.

On this page