Signal Templates

List all signal templates for your organization

GET
/v1/companies/signals/templates

Retrieve a paginated list of signal templates for your organization. Returns the latest active version of each template.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Query Parameters

limit?integer

Maximum number of templates to return

Default20
Range1 <= value <= 100
offset?integer

Number of templates to skip for pagination

Default0
Range0 <= value
includeDeleted?boolean

Include deleted templates in the response

Defaultfalse

Response Body

application/json

application/json

curl -X GET "https://example.com/v1/companies/signals/templates"
{  "items": [    {      "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",      "templateId": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",      "version": 1,      "organizationId": "org_123",      "name": "CRM Detection",      "description": "Identifies which CRM system a company is using",      "question": "Which CRM are they using?",      "answerType": "open_text",      "outputSchema": {},      "weight": "important",      "qualificationCriteria": {},      "createdByUserId": "user_123",      "createdAt": "2024-10-14T15:30:00Z",      "deletedAt": null,      "source": "api"    }  ],  "total": 10,  "limit": 20,  "offset": 0,  "hasMore": false}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}

Create a signal template

POST
/v1/companies/signals/templates

Create a reusable signal template that can be referenced when creating signals. Templates allow you to define standard research questions that can be applied to multiple companies.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

name*string

User-friendly name for the template

Length1 <= length <= 200
description?string

Optional description of what this template does

Lengthlength <= 1000
question*string

The research question to ask about companies

Length1 <= length <= 500
answerType?string

The expected format of the answer

Default"open_text"
Value in"open_text" | "number" | "boolean" | "list" | "percentage" | "currency" | "url" | "contacts" | "contacts_generation" | "contact_posts" | "contact_engagements" | "json_schema"
outputSchema?

JSON Schema defining the expected output structure. Required when answerType is "json_schema". See CreateSignalRequest.outputSchema for full documentation.

weight?string

The importance/weight of the signal

Value in"important" | "nice_to_have" | "not_important"
qualificationCriteria?

Qualification criteria mapping answer values based on answerType. Structure varies by answerType:

  • For percentage/number/currency: { ranges: [{ rangeStart, rangeEnd, answerQualification }] }
  • For boolean: { yes: "qualification", no: "qualification" }
  • For list: { choices: { key: { answerQualification, label } } }

Valid answerQualification values: disqualified, poor, neutral, good, excellent

Response Body

application/json

application/json

application/json

curl -X POST "https://example.com/v1/companies/signals/templates" \  -H "Content-Type: application/json" \  -d '{    "name": "CRM Detection",    "question": "Which CRM are they using?"  }'
{  "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "templateId": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "version": 1,  "organizationId": "org_123",  "name": "CRM Detection",  "description": "Identifies which CRM system a company is using",  "question": "Which CRM are they using?",  "answerType": "open_text",  "outputSchema": {},  "weight": "important",  "qualificationCriteria": {},  "createdByUserId": "user_123",  "createdAt": "2024-10-14T15:30:00Z",  "deletedAt": null,  "source": "api"}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}

Get a signal template by ID

GET
/v1/companies/signals/templates/{templateId}

Retrieve a specific signal template by ID

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

templateId*string

The unique identifier of the template

Formatuuid

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/companies/signals/templates/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "templateId": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "version": 1,  "organizationId": "org_123",  "name": "CRM Detection",  "description": "Identifies which CRM system a company is using",  "question": "Which CRM are they using?",  "answerType": "open_text",  "outputSchema": {},  "weight": "important",  "qualificationCriteria": {},  "createdByUserId": "user_123",  "createdAt": "2024-10-14T15:30:00Z",  "deletedAt": null,  "source": "api"}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}

Update a signal template

PATCH
/v1/companies/signals/templates/{templateId}

Update a signal template using PATCH semantics (partial update). This creates a new version of the template and soft-deletes the previous version. Only provided fields will be updated; omitted fields will retain their values from the previous version.

The template ID remains the same across all versions. The version number will be incremented.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

templateId*string

The unique identifier of the template to update

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

name?string

User-friendly name for the template

Length1 <= length <= 200
description?string

Optional description of what this template does

Lengthlength <= 1000
question?string

The research question to ask about companies

Length1 <= length <= 500
answerType?string

The expected format of the answer

Value in"open_text" | "number" | "boolean" | "list" | "percentage" | "currency" | "url" | "contacts" | "contact_posts" | "contact_engagements" | "json_schema"
outputSchema?

JSON Schema defining the expected output structure. Required when answerType is "json_schema".

weight?string

The importance/weight of the signal

Value in"important" | "nice_to_have" | "not_important"
qualificationCriteria?

Qualification criteria mapping answer values based on answerType

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/v1/companies/signals/templates/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "templateId": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250",  "version": 1,  "organizationId": "org_123",  "name": "CRM Detection",  "description": "Identifies which CRM system a company is using",  "question": "Which CRM are they using?",  "answerType": "open_text",  "outputSchema": {},  "weight": "important",  "qualificationCriteria": {},  "createdByUserId": "user_123",  "createdAt": "2024-10-14T15:30:00Z",  "deletedAt": null,  "source": "api"}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}

Delete a signal template

DELETE
/v1/companies/signals/templates/{templateId}

Soft-delete a signal template. The template will be marked as deleted but preserved for historical tracking.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

templateId*string

The unique identifier of the template to delete

Formatuuid

Response Body

application/json

application/json

curl -X DELETE "https://example.com/v1/companies/signals/templates/497f6eca-6276-4993-bfeb-53cbbbba6f08"
Empty
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}
{  "error": {    "type": "VALIDATION",    "code": "VALIDATION_ERROR",    "message": "validation failed for 'departments': invalid value: Engineering Ops",    "errorCode": "string",    "errorAction": "string",    "details": {},    "requestId": "e69ed773-2674-4dca-be61-886d6698f360",    "fields": [      {        "field": "domain",        "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path"      }    ],    "debug": {      "cause": "string"    }  }}

On this page