curl --request POST \
--url https://api.enrik.ai/v1/signal-definitions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": [
"Listed as an exhibitor at the fair this year"
],
"counterexamples": [
"Only a visitor badge was mentioned"
],
"evidenceRequirements": {
"permittedSourceKinds": [
"controlled_directory"
],
"requireLocatedSupport": true,
"requireEntityAttribution": true,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": [
"factual"
]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": true
},
"coverage": {
"negativeEvidence": "requires_certified_complete_scope"
}
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": true
}
}
}
'import requests
url = "https://api.enrik.ai/v1/signal-definitions"
payload = {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": ["Listed as an exhibitor at the fair this year"],
"counterexamples": ["Only a visitor badge was mentioned"],
"evidenceRequirements": {
"permittedSourceKinds": ["controlled_directory"],
"requireLocatedSupport": True,
"requireEntityAttribution": True,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": ["factual"]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": True
},
"coverage": { "negativeEvidence": "requires_certified_complete_scope" }
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": True
}
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Exhibits at a trade fair',
description: 'The company exhibits at a trade fair in its industry.',
body: JSON.stringify({
name: 'Exhibits at a trade fair',
description: 'The company exhibits at a trade fair in its industry.',
humanExplanation: 'An exhibitor is investing in finding new customers this year.',
observableCondition: 'The company is on the fair’s published exhibitor list.',
examples: ['Listed as an exhibitor at the fair this year'],
counterexamples: ['Only a visitor badge was mentioned'],
evidenceRequirements: {
permittedSourceKinds: ['controlled_directory'],
requireLocatedSupport: true,
requireEntityAttribution: true,
claimSupport: {requiredAssertion: 'affirmed', permittedModalities: ['factual']},
temporal: {
semantics: 'condition_observed',
minimumPrecision: 'year',
windowDays: 365,
allowPlannedFuture: true
},
coverage: {negativeEvidence: 'requires_certified_complete_scope'}
},
detector: {
kind: 'directory_listing',
config: {sourceRole: 'exhibitor_list', editionLabel: '2026'}
},
subjectType: 'company',
temporalRule: {
semantics: 'condition_observed',
windowDays: 365,
minimumPrecision: 'year',
allowPlannedFuture: true
}
})
})
};
fetch('https://api.enrik.ai/v1/signal-definitions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.enrik.ai/v1/signal-definitions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Exhibits at a trade fair',
'description' => 'The company exhibits at a trade fair in its industry.',
'body' => [
'name' => 'Exhibits at a trade fair',
'description' => 'The company exhibits at a trade fair in its industry.',
'humanExplanation' => 'An exhibitor is investing in finding new customers this year.',
'observableCondition' => 'The company is on the fair’s published exhibitor list.',
'examples' => [
'Listed as an exhibitor at the fair this year'
],
'counterexamples' => [
'Only a visitor badge was mentioned'
],
'evidenceRequirements' => [
'permittedSourceKinds' => [
'controlled_directory'
],
'requireLocatedSupport' => true,
'requireEntityAttribution' => true,
'claimSupport' => [
'requiredAssertion' => 'affirmed',
'permittedModalities' => [
'factual'
]
],
'temporal' => [
'semantics' => 'condition_observed',
'minimumPrecision' => 'year',
'windowDays' => 365,
'allowPlannedFuture' => true
],
'coverage' => [
'negativeEvidence' => 'requires_certified_complete_scope'
]
],
'detector' => [
'kind' => 'directory_listing',
'config' => [
'sourceRole' => 'exhibitor_list',
'editionLabel' => '2026'
]
],
'subjectType' => 'company',
'temporalRule' => [
'semantics' => 'condition_observed',
'windowDays' => 365,
'minimumPrecision' => 'year',
'allowPlannedFuture' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.enrik.ai/v1/signal-definitions"
payload := strings.NewReader("{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.enrik.ai/v1/signal-definitions")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enrik.ai/v1/signal-definitions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"definition": {
"id": "0199a1b2-0000-7000-8000-00000000f201",
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"lifecycle": "active",
"currentDraftVersionId": "0199a1b2-0000-7000-8000-00000000f211",
"currentPublishedVersionId": "0199a1b2-0000-7000-8000-00000000f211",
"revision": 1,
"createdBy": "0199a1b2-0000-7000-8000-00000000c001",
"updatedBy": "0199a1b2-0000-7000-8000-00000000c001",
"createdAt": "2026-09-10T08:00:00.000Z",
"updatedAt": "2026-09-12T08:00:00.000Z"
},
"version": {
"id": "0199a1b2-0000-7000-8000-00000000f211",
"signalDefinitionId": "0199a1b2-0000-7000-8000-00000000f201",
"versionNumber": 1,
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": [
"Listed as an exhibitor at the fair this year"
],
"counterexamples": [
"Only a visitor badge was mentioned"
],
"evidenceRequirements": {
"permittedSourceKinds": [
"controlled_directory"
],
"requireLocatedSupport": true,
"requireEntityAttribution": true,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": [
"factual"
]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": true
},
"coverage": {
"negativeEvidence": "requires_certified_complete_scope"
}
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": true
}
},
"detectorKind": "directory_listing",
"schemaVersion": 1,
"detectorContractVersion": 1,
"contentFingerprint": "sha256:4e1a9c07",
"publicationStatus": "draft",
"firstPublishedAt": null,
"publishedAt": null,
"retiredAt": null,
"createdBy": "0199a1b2-0000-7000-8000-00000000c001",
"createdAt": "2026-09-10T08:00:00.000Z"
}
}{
"error": {
"code": "malformed_json",
"message": "Bad Request",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "unauthenticated",
"message": "Unauthorized",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "insufficient_scope",
"message": "Forbidden",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "conflict",
"message": "Conflict",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "payload_too_large",
"message": "Payload Too Large",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "unsupported_media_type",
"message": "Unsupported Media Type",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "validation_error",
"message": "Unprocessable Entity",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "internal_error",
"message": "Internal Server Error",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "service_unavailable",
"message": "Service Unavailable",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "not_found",
"message": "Not found",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}Create a signal definition
Creates a definition and its first draft version, while signal definitions are switched on (503 otherwise). Both commit only after this answer is checked. A retry with the same Idempotency-Key and body replays the same answer for 24 hours instead of creating a second definition; a name already in use answers 409. The draft is not published: publishing stays with a person in the app.
curl --request POST \
--url https://api.enrik.ai/v1/signal-definitions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": [
"Listed as an exhibitor at the fair this year"
],
"counterexamples": [
"Only a visitor badge was mentioned"
],
"evidenceRequirements": {
"permittedSourceKinds": [
"controlled_directory"
],
"requireLocatedSupport": true,
"requireEntityAttribution": true,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": [
"factual"
]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": true
},
"coverage": {
"negativeEvidence": "requires_certified_complete_scope"
}
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": true
}
}
}
'import requests
url = "https://api.enrik.ai/v1/signal-definitions"
payload = {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": ["Listed as an exhibitor at the fair this year"],
"counterexamples": ["Only a visitor badge was mentioned"],
"evidenceRequirements": {
"permittedSourceKinds": ["controlled_directory"],
"requireLocatedSupport": True,
"requireEntityAttribution": True,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": ["factual"]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": True
},
"coverage": { "negativeEvidence": "requires_certified_complete_scope" }
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": True
}
}
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Exhibits at a trade fair',
description: 'The company exhibits at a trade fair in its industry.',
body: JSON.stringify({
name: 'Exhibits at a trade fair',
description: 'The company exhibits at a trade fair in its industry.',
humanExplanation: 'An exhibitor is investing in finding new customers this year.',
observableCondition: 'The company is on the fair’s published exhibitor list.',
examples: ['Listed as an exhibitor at the fair this year'],
counterexamples: ['Only a visitor badge was mentioned'],
evidenceRequirements: {
permittedSourceKinds: ['controlled_directory'],
requireLocatedSupport: true,
requireEntityAttribution: true,
claimSupport: {requiredAssertion: 'affirmed', permittedModalities: ['factual']},
temporal: {
semantics: 'condition_observed',
minimumPrecision: 'year',
windowDays: 365,
allowPlannedFuture: true
},
coverage: {negativeEvidence: 'requires_certified_complete_scope'}
},
detector: {
kind: 'directory_listing',
config: {sourceRole: 'exhibitor_list', editionLabel: '2026'}
},
subjectType: 'company',
temporalRule: {
semantics: 'condition_observed',
windowDays: 365,
minimumPrecision: 'year',
allowPlannedFuture: true
}
})
})
};
fetch('https://api.enrik.ai/v1/signal-definitions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.enrik.ai/v1/signal-definitions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Exhibits at a trade fair',
'description' => 'The company exhibits at a trade fair in its industry.',
'body' => [
'name' => 'Exhibits at a trade fair',
'description' => 'The company exhibits at a trade fair in its industry.',
'humanExplanation' => 'An exhibitor is investing in finding new customers this year.',
'observableCondition' => 'The company is on the fair’s published exhibitor list.',
'examples' => [
'Listed as an exhibitor at the fair this year'
],
'counterexamples' => [
'Only a visitor badge was mentioned'
],
'evidenceRequirements' => [
'permittedSourceKinds' => [
'controlled_directory'
],
'requireLocatedSupport' => true,
'requireEntityAttribution' => true,
'claimSupport' => [
'requiredAssertion' => 'affirmed',
'permittedModalities' => [
'factual'
]
],
'temporal' => [
'semantics' => 'condition_observed',
'minimumPrecision' => 'year',
'windowDays' => 365,
'allowPlannedFuture' => true
],
'coverage' => [
'negativeEvidence' => 'requires_certified_complete_scope'
]
],
'detector' => [
'kind' => 'directory_listing',
'config' => [
'sourceRole' => 'exhibitor_list',
'editionLabel' => '2026'
]
],
'subjectType' => 'company',
'temporalRule' => [
'semantics' => 'condition_observed',
'windowDays' => 365,
'minimumPrecision' => 'year',
'allowPlannedFuture' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.enrik.ai/v1/signal-definitions"
payload := strings.NewReader("{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.enrik.ai/v1/signal-definitions")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.enrik.ai/v1/signal-definitions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"body\": {\n \"name\": \"Exhibits at a trade fair\",\n \"description\": \"The company exhibits at a trade fair in its industry.\",\n \"humanExplanation\": \"An exhibitor is investing in finding new customers this year.\",\n \"observableCondition\": \"The company is on the fair’s published exhibitor list.\",\n \"examples\": [\n \"Listed as an exhibitor at the fair this year\"\n ],\n \"counterexamples\": [\n \"Only a visitor badge was mentioned\"\n ],\n \"evidenceRequirements\": {\n \"permittedSourceKinds\": [\n \"controlled_directory\"\n ],\n \"requireLocatedSupport\": true,\n \"requireEntityAttribution\": true,\n \"claimSupport\": {\n \"requiredAssertion\": \"affirmed\",\n \"permittedModalities\": [\n \"factual\"\n ]\n },\n \"temporal\": {\n \"semantics\": \"condition_observed\",\n \"minimumPrecision\": \"year\",\n \"windowDays\": 365,\n \"allowPlannedFuture\": true\n },\n \"coverage\": {\n \"negativeEvidence\": \"requires_certified_complete_scope\"\n }\n },\n \"detector\": {\n \"kind\": \"directory_listing\",\n \"config\": {\n \"sourceRole\": \"exhibitor_list\",\n \"editionLabel\": \"2026\"\n }\n },\n \"subjectType\": \"company\",\n \"temporalRule\": {\n \"semantics\": \"condition_observed\",\n \"windowDays\": 365,\n \"minimumPrecision\": \"year\",\n \"allowPlannedFuture\": true\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"definition": {
"id": "0199a1b2-0000-7000-8000-00000000f201",
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"lifecycle": "active",
"currentDraftVersionId": "0199a1b2-0000-7000-8000-00000000f211",
"currentPublishedVersionId": "0199a1b2-0000-7000-8000-00000000f211",
"revision": 1,
"createdBy": "0199a1b2-0000-7000-8000-00000000c001",
"updatedBy": "0199a1b2-0000-7000-8000-00000000c001",
"createdAt": "2026-09-10T08:00:00.000Z",
"updatedAt": "2026-09-12T08:00:00.000Z"
},
"version": {
"id": "0199a1b2-0000-7000-8000-00000000f211",
"signalDefinitionId": "0199a1b2-0000-7000-8000-00000000f201",
"versionNumber": 1,
"body": {
"name": "Exhibits at a trade fair",
"description": "The company exhibits at a trade fair in its industry.",
"humanExplanation": "An exhibitor is investing in finding new customers this year.",
"observableCondition": "The company is on the fair’s published exhibitor list.",
"examples": [
"Listed as an exhibitor at the fair this year"
],
"counterexamples": [
"Only a visitor badge was mentioned"
],
"evidenceRequirements": {
"permittedSourceKinds": [
"controlled_directory"
],
"requireLocatedSupport": true,
"requireEntityAttribution": true,
"claimSupport": {
"requiredAssertion": "affirmed",
"permittedModalities": [
"factual"
]
},
"temporal": {
"semantics": "condition_observed",
"minimumPrecision": "year",
"windowDays": 365,
"allowPlannedFuture": true
},
"coverage": {
"negativeEvidence": "requires_certified_complete_scope"
}
},
"detector": {
"kind": "directory_listing",
"config": {
"sourceRole": "exhibitor_list",
"editionLabel": "2026"
}
},
"subjectType": "company",
"temporalRule": {
"semantics": "condition_observed",
"windowDays": 365,
"minimumPrecision": "year",
"allowPlannedFuture": true
}
},
"detectorKind": "directory_listing",
"schemaVersion": 1,
"detectorContractVersion": 1,
"contentFingerprint": "sha256:4e1a9c07",
"publicationStatus": "draft",
"firstPublishedAt": null,
"publishedAt": null,
"retiredAt": null,
"createdBy": "0199a1b2-0000-7000-8000-00000000c001",
"createdAt": "2026-09-10T08:00:00.000Z"
}
}{
"error": {
"code": "malformed_json",
"message": "Bad Request",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "unauthenticated",
"message": "Unauthorized",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "insufficient_scope",
"message": "Forbidden",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "conflict",
"message": "Conflict",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "payload_too_large",
"message": "Payload Too Large",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "unsupported_media_type",
"message": "Unsupported Media Type",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "validation_error",
"message": "Unprocessable Entity",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "internal_error",
"message": "Internal Server Error",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "service_unavailable",
"message": "Service Unavailable",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}{
"error": {
"code": "not_found",
"message": "Not found",
"requestId": "5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"
}
}Authorizations
An Enrik API key, sent as Authorization: Bearer <key>. A key reaches public operations only, and only those whose scopes it holds. A few parameters need a scope beyond their operation’s, which the parameter names. The scopes:
setup:read: Read the workspace setup and its company profile.setup:run: Change the setup: confirm the company profile, authorize sponsored drafting and background company research, choose what to set up and complete setup.workspace:read: Read the workspace’s own profile: its health summary and setup state.crm:read: Read companies with their signals, contacts and the saved views over them.crm:write: Create, update and restore companies and contacts, and create, update and delete saved views.crm:delete: Delete companies and contacts.twin:read: Read the Company Twin: structured company knowledge and its signals.discovery:read: Read ICP profiles, ICP assessments, discovery briefs, discovery jobs, candidates and the signal library.discovery:write: Create and change ICP profiles, discovery briefs and signal-definition drafts, and review discovery candidates.discovery:run: Create, start and cancel discovery jobs, and edit a draft one. Uses provider budget.enrichment:read: Read the enrichment configuration and its results, including a record’s enrichment, formula and custom-API cells.enrichment:run: Launch and cancel enrichment. Spends enrichment credits.automation:read: Read workflows and agents with their run history, including a record’s agent cells.automation:run: Run existing workflows and agents.exports:read: Read export jobs and the fields an export can carry.exports:run: Create, preview, start, cancel and archive CSV exports of companies, contacts and candidates, and download the file. Also needscrm:read. Delivering an export to a webhook destination stays in the app.integrations:read: Read connections, field mappings, CRM sync jobs and webhook destinations.webhooks:read: Read webhook subscriptions, the event types they can name and their delivery log.webhooks:write: Subscribe a receiver URL to webhook events; edit, test, pause, resume and archive a subscription and rotate its signing secret; redeliver an event. Only workspace owners and admins can grant it.reporting:read: Read analytics and dashboards.assistant:read: Read the Assistant: its threads, messages and pending approvals.assistant:run: Converse with the Assistant. Uses the workspace’s AI quota.assistant:write: Approve or reject the changes the Assistant proposes.
Headers
A key you choose for this request, such as a UUID. Retrying with the same key returns the first result instead of doing the work twice.
1 - 200Body
A new signal definition and the content of its first draft version.
Was this page helpful?