Sales intelligence — research companies, qualify prospects, and find contacts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Enrich a company with a custom question
Request body
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Enrich a company with a custom question
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain",
"question"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")"
},
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string",
"example": "important",
"description": "The importance/weight of the signal"
},
"question": {
"type": "string",
"example": "What is Acme Corp's main business focus?",
"maxLength": 2000,
"minLength": 1,
"description": "The research question to ask about the company"
},
"answerType": {
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string",
"default": "open_text",
"example": "open_text",
"description": "The expected format of the answer"
},
"connectors": {
"type": "object",
"properties": {
"salesNavigator": {
"type": "object",
"properties": {
"enabled": {
"enum": [
"required",
"preferred",
"off"
],
"type": "string",
"default": "preferred",
"example": "preferred",
"description": "Controls Sales Navigator usage during signal generation:\n- **required**: Fail request if Sales Navigator unavailable (rate limited/disconnected)\n- **preferred**: Attempt Sales Navigator, degrade gracefully if unavailable (default)\n- **off**: Do not attempt Sales Navigator\n"
}
},
"additionalProperties": {}
}
},
"description": "Connector configuration for signal generation",
"additionalProperties": {}
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook URL to receive notifications when processing completes.\nWebhooks are only sent for freshly processed signals — cached results do not trigger webhooks.\nSet `forceRefresh: true` to bypass the cache and ensure webhook delivery.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"example": false,
"description": "Force re-run of the signal analysis, skipping the cache. When set to true, a new signal will be created even if a cached result exists."
},
"outputSchema": {
"type": "object",
"example": {
"type": "object",
"required": [
"pricingTiers"
],
"properties": {
"hasFreeTier": {
"type": "boolean"
},
"pricingTiers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"features": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
},
"properties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\nThe AI will generate data conforming to this schema.\n\n**Supported JSON Schema features:**\n- `type`: object, array, string, number, integer, boolean, null\n- `properties`: Define object properties\n- `required`: List of required property names\n- `items`: Schema for array items\n- `enum`: Enumeration of allowed values\n- `description`: Property descriptions (helps AI generate better data)\n\n**Limitations:**\n- Maximum 100 total properties\n- Maximum 5 levels of nesting\n- `anyOf`, `oneOf`, `allOf` are not supported\n- `$ref` only supports self-references for recursive schemas\n",
"additionalProperties": {}
},
"signalTemplateId": {
"type": "string",
"format": "uuid",
"example": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"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)$",
"description": "Optional signal template ID to use. When provided, the template configuration (question, answerType, weight, qualificationCriteria) will be used.\nThe system always resolves to the latest active version of the template.\nOnly the domain parameter is required when using a template.\n"
},
"verificationMode": {
"enum": [
"strict",
"lenient"
],
"type": "string",
"default": "strict",
"example": "strict",
"description": "Controls how strictly Saber verifies answers before responding.\n\n- **strict**: Only returns answers backed by verified sources (primary or trusted secondary sources). Returns null when information is unavailable.\n- **lenient**: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.\n"
},
"qualificationCriteria": {
"type": "object",
"properties": {},
"description": "Qualification criteria mapping answer values based on answerType. The structure must match the answerType specified.\n\nFor boolean answerType:\n```json\n{\n \"yes\": \"good\",\n \"no\": \"disqualified\"\n}\n```\n\nFor number, percentage, or currency answerType:\n```json\n{\n \"ranges\": [\n { \"rangeStart\": 0, \"rangeEnd\": 100, \"answerValue\": \"neutral\" },\n { \"rangeStart\": 101, \"rangeEnd\": 1000, \"answerValue\": \"good\" }\n ]\n}\n```\n\nFor list answerType:\n```json\n{\n \"choices\": {\n \"salesforce\": { \"answerValue\": \"good\", \"label\": \"Salesforce\" },\n \"hubspot\": { \"answerValue\": \"neutral\", \"label\": \"HubSpot\" },\n \"none\": { \"answerValue\": \"disqualified\", \"label\": \"No CRM\" }\n }\n}\n```\n\nValid answerValue options (from worst to best):\n- disqualified: Answer indicates a deal-breaker or disqualifying factor\n- poor: Answer indicates a weak fit\n- neutral: Answer is acceptable but not ideal\n- good: Answer indicates a strong fit\n- excellent: Answer indicates an exceptional fit\n",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich many companies with one shared custom question — one run per target domain. Capped at 100 targets per call; split a larger list into successive calls of 100 or fewer. Returns 202 immediately; poll each run with enrichment_runs-get or list them with enrichment_runs-list.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"targets"
],
"properties": {
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string"
},
"targets": {
"type": "array",
"items": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "Company domain (e.g., \"acme.com\")"
},
"maxItems": 100,
"minItems": 1,
"description": "Company domains; one run per target."
},
"question": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"answerType": {
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string",
"default": "open_text"
},
"connectors": {
"type": "object",
"properties": {
"salesNavigator": {
"type": "object",
"properties": {
"enabled": {
"enum": [
"required",
"preferred",
"off"
],
"type": "string",
"default": "preferred"
}
},
"additionalProperties": {}
}
},
"description": "Connector configuration applied to every run in the batch.",
"additionalProperties": {}
},
"webhookUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048
},
"forceRefresh": {
"type": "boolean"
},
"outputSchema": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"signalTemplateId": {
"type": "string",
"format": "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)$"
},
"verificationMode": {
"enum": [
"strict",
"lenient"
],
"type": "string"
},
"qualificationCriteria": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"generateSummaryOnComplete": {
"type": "boolean"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Enrich a company with firmographics
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")."
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook to receive the completed signal. Intended for the\nasync endpoints; if supplied on a synchronous `/sync/` endpoint the\nwebhook is still delivered, in addition to the blocking response.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"description": "Force a fresh run. By default an identical request (same domain and\nparameters) returns the existing result instead of re-running; set\nthis to `true` to bypass that and research again.\n"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich a company with funding status
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")."
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook to receive the completed signal. Intended for the\nasync endpoints; if supplied on a synchronous `/sync/` endpoint the\nwebhook is still delivered, in addition to the blocking response.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"description": "Force a fresh run. By default an identical request (same domain and\nparameters) returns the existing result instead of re-running; set\nthis to `true` to bypass that and research again.\n"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich a company with M&A activity
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")."
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook to receive the completed signal. Intended for the\nasync endpoints; if supplied on a synchronous `/sync/` endpoint the\nwebhook is still delivered, in addition to the blocking response.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"description": "Force a fresh run. By default an identical request (same domain and\nparameters) returns the existing result instead of re-running; set\nthis to `true` to bypass that and research again.\n"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich a company with open jobs
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")."
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook to receive the completed signal. Intended for the\nasync endpoints; if supplied on a synchronous `/sync/` endpoint the\nwebhook is still delivered, in addition to the blocking response.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"description": "Force a fresh run. By default an identical request (same domain and\nparameters) returns the existing result instead of re-running; set\nthis to `true` to bypass that and research again.\n"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich a company with its tech stack
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to research (e.g., \"acme.com\")."
},
"category": {
"enum": [
"erp",
"crm"
],
"type": "string",
"example": "crm",
"description": "A coarse technology category to survey. Mutually exclusive with\n`technology`.\n"
},
"technology": {
"type": "string",
"example": "salesforce",
"description": "A specific technology to check for, given as free text (e.g.\n\"salesforce\", \"SAP S/4HANA\"); Saber resolves it to a canonical\nregistry slug. An unresolvable value returns 422 with did-you-mean\nsuggestions. Mutually exclusive with `category`.\n"
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook to receive the completed signal. Intended for the async endpoint; if supplied on the synchronous `/sync/` endpoint the webhook is still delivered, in addition to the blocking response."
},
"forceRefresh": {
"type": "boolean",
"default": false,
"description": "Force a fresh run. By default an identical request (same domain and\nparameters) returns the existing result instead of re-running; set\nthis to `true` to bypass that and research again.\n"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Generate a company summary
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "The company domain to generate a summary for (e.g., \"acme.com\")"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}List company summaries
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| domain* | string | |
| offset | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"domain"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"domain": {
"type": "string"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
}
}
}Resolve a company name to its official domain. Supply country and article context for ambiguous names. Branch on status; ambiguous candidates are alternatives, not a ranked answer. Allow up to four minutes.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"companyName"
],
"properties": {
"context": {
"type": "string",
"maxLength": 10000,
"description": "Optional article excerpt or identity details used to distinguish namesakes."
},
"companyName": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Company, brand or product name to resolve to its operating company. Include the legal suffix when known."
},
"countryCode": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Optional ISO 3166-1 alpha-2 country hint, normalized to uppercase."
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Estimate how many companies match a list filter and how many credits the list operation would cost.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"filter"
],
"properties": {
"filter": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company names"
},
"sizes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"51-200",
"201-500"
],
"description": "Filter by company size ranges"
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company types"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company domains"
},
"exclude": {
"type": "object",
"properties": {
"sizes": {
"type": "array",
"items": {
"type": "string"
}
},
"types": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
}
},
"states": {
"type": "array",
"items": {
"type": "string"
}
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": {}
},
"industries": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Exclusion filters (companies matching these are removed)",
"additionalProperties": {}
},
"founded": {
"type": "object",
"properties": {
"after": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded after this year"
},
"before": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded before this year"
}
},
"description": "Filter by founded year range",
"additionalProperties": {}
},
"handles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company handles"
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by city names"
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by state/province names"
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"US",
"GB"
],
"description": "Filter by ISO country codes"
}
},
"description": "Filter by geographic location",
"additionalProperties": {}
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company websites"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"software development",
"technology, information and internet"
],
"description": "Filter by industry names"
},
"questionIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by signal question IDs"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"stripe",
"hubspot"
],
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)"
}
},
"description": "Criteria for filtering companies",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Save a company filter as a reusable list for review, enrichments, scoring, export, and CRM workflows.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"name",
"filter"
],
"properties": {
"name": {
"type": "string",
"example": "Mid-size US SaaS companies",
"maxLength": 200,
"minLength": 1,
"description": "A human-readable name for the list (1–200 characters)"
},
"filter": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company names"
},
"sizes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"51-200",
"201-500"
],
"description": "Filter by company size ranges"
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company types"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company domains"
},
"exclude": {
"type": "object",
"properties": {
"sizes": {
"type": "array",
"items": {
"type": "string"
}
},
"types": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
}
},
"states": {
"type": "array",
"items": {
"type": "string"
}
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": {}
},
"industries": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Exclusion filters (companies matching these are removed)",
"additionalProperties": {}
},
"founded": {
"type": "object",
"properties": {
"after": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded after this year"
},
"before": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded before this year"
}
},
"description": "Filter by founded year range",
"additionalProperties": {}
},
"handles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company handles"
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by city names"
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by state/province names"
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"US",
"GB"
],
"description": "Filter by ISO country codes"
}
},
"description": "Filter by geographic location",
"additionalProperties": {}
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company websites"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"software development",
"technology, information and internet"
],
"description": "Filter by industry names"
},
"questionIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by signal question IDs"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"stripe",
"hubspot"
],
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)"
}
},
"description": "Criteria for filtering companies",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Delete a saved company list and remove its reusable segment boundary.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the company list to delete |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the company list to delete"
}
}
}Export a saved company list to CSV, optionally including selected firmographic and enrichment columns.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the company list |
| __requestBody | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string",
"format": "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)$",
"description": "The unique identifier of the company list"
},
"__requestBody": {
"type": "object",
"properties": {
"fields": {
"type": "array",
"items": {
"enum": [
"industry",
"size",
"founded",
"city",
"state",
"country_code"
],
"type": "string"
},
"example": [
"industry",
"size",
"country_code"
],
"description": "Optional firmographic columns to include after the fixed `name` and\n`website` columns, in the order specified. Unknown values return 422.\n"
},
"signalTemplateIds": {
"type": "array",
"items": {
"type": "string",
"format": "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)$"
},
"example": [
"123e4567-e89b-12d3-a456-426614174000"
],
"description": "IDs of signal templates whose subscriptions should be included as\ncolumns. Two columns are added per subscription:\n`{signal_name}_answer` and `{signal_name}_confidence`. If absent\nor empty, no signal columns are added.\n"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Retrieve company list metadata, including its filter and current company count.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the company list |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the company list"
}
}
}Page through companies that match a saved company list filter.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of companies to return (1–100, default 25) |
| listId* | string | The unique identifier of the company list |
| offset | integer | Number of companies to skip for pagination (default 0) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of companies to return (1–100, default 25)"
},
"listId": {
"type": "string",
"description": "The unique identifier of the company list"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of companies to skip for pagination (default 0)"
}
}
}Import companies from a HubSpot list, view, or segment into a saved Saber company list.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"name",
"source"
],
"properties": {
"name": {
"type": "string",
"example": "HubSpot — Technology companies",
"maxLength": 200,
"minLength": 1,
"description": "A human-readable name for the imported list (1–200 characters)"
},
"source": {
"type": "object",
"required": [
"type",
"filter"
],
"properties": {
"type": {
"type": "string",
"const": "hubspot",
"example": "hubspot",
"description": "Import source type. Currently only `hubspot` is supported."
},
"filter": {
"type": "object",
"required": [
"propertyName",
"operator"
],
"properties": {
"value": {
"type": "string",
"example": "Technology",
"description": "The value to compare against. Required for all operators except `HAS_PROPERTY` and `NOT_HAS_PROPERTY`."
},
"operator": {
"enum": [
"EQ",
"NEQ",
"GT",
"GTE",
"LT",
"LTE",
"HAS_PROPERTY",
"NOT_HAS_PROPERTY",
"CONTAINS_TOKEN",
"NOT_CONTAINS_TOKEN"
],
"type": "string",
"example": "EQ",
"description": "Comparison operator. Value-free operators (`HAS_PROPERTY`, `NOT_HAS_PROPERTY`)\ndo not require a `value` field. All others do.\n"
},
"propertyName": {
"type": "string",
"example": "industry",
"description": "The HubSpot company property to filter on (e.g. `industry`, `city`, `hs_lead_status`)"
}
},
"description": "A single HubSpot property filter used to select companies for import",
"additionalProperties": {}
}
},
"description": "Describes the external source to import companies from",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}List saved company lists with pagination.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of lists to return (1–100, default 20) |
| offset | integer | Number of lists to skip for pagination (default 0) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of lists to return (1–100, default 20)"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of lists to skip for pagination (default 0)"
}
}
}Preview up to 50 companies that match a filter before creating a reusable company list.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"filter"
],
"properties": {
"filter": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company names"
},
"sizes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"51-200",
"201-500"
],
"description": "Filter by company size ranges"
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company types"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company domains"
},
"exclude": {
"type": "object",
"properties": {
"sizes": {
"type": "array",
"items": {
"type": "string"
}
},
"types": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
}
},
"states": {
"type": "array",
"items": {
"type": "string"
}
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": {}
},
"industries": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Exclusion filters (companies matching these are removed)",
"additionalProperties": {}
},
"founded": {
"type": "object",
"properties": {
"after": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded after this year"
},
"before": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded before this year"
}
},
"description": "Filter by founded year range",
"additionalProperties": {}
},
"handles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company handles"
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by city names"
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by state/province names"
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"US",
"GB"
],
"description": "Filter by ISO country codes"
}
},
"description": "Filter by geographic location",
"additionalProperties": {}
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company websites"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"software development",
"technology, information and internet"
],
"description": "Filter by industry names"
},
"questionIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by signal question IDs"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"stripe",
"hubspot"
],
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)"
}
},
"description": "Criteria for filtering companies",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Update a company list name or filter and refresh cached matching companies.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the company list to update |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId",
"__requestBody"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the company list to update"
},
"__requestBody": {
"type": "object",
"required": [
"name",
"filter"
],
"properties": {
"name": {
"type": "string",
"example": "Updated list name",
"maxLength": 200,
"minLength": 1,
"description": "Updated name for the list (1–200 characters)"
},
"filter": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company names"
},
"sizes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"51-200",
"201-500"
],
"description": "Filter by company size ranges"
},
"types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company types"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company domains"
},
"exclude": {
"type": "object",
"properties": {
"sizes": {
"type": "array",
"items": {
"type": "string"
}
},
"types": {
"type": "array",
"items": {
"type": "string"
}
},
"domains": {
"type": "array",
"items": {
"type": "string"
}
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
}
},
"states": {
"type": "array",
"items": {
"type": "string"
}
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": {}
},
"industries": {
"type": "array",
"items": {
"type": "string"
}
}
},
"description": "Exclusion filters (companies matching these are removed)",
"additionalProperties": {}
},
"founded": {
"type": "object",
"properties": {
"after": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded after this year"
},
"before": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Founded before this year"
}
},
"description": "Filter by founded year range",
"additionalProperties": {}
},
"handles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company handles"
},
"location": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by city names"
},
"states": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by state/province names"
},
"countryCodes": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"US",
"GB"
],
"description": "Filter by ISO country codes"
}
},
"description": "Filter by geographic location",
"additionalProperties": {}
},
"websites": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by company websites"
},
"industries": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"software development",
"technology, information and internet"
],
"description": "Filter by industry names"
},
"questionIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by signal question IDs"
},
"technologies": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"stripe",
"hubspot"
],
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)"
}
},
"description": "Criteria for filtering companies",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}List connectors and their connection status
No arguments.
{
"type": "object",
"properties": {}
}Run a LinkedIn Sales Navigator search, store a point-in-time contact snapshot, and return contact list metadata.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"name",
"filters"
],
"properties": {
"name": {
"type": "string",
"example": "Engineering leads at Stripe",
"maxLength": 200,
"description": "Display name for the contact list"
},
"filters": {
"type": "object",
"properties": {
"keywords": {
"type": "string",
"example": "Kubernetes",
"description": "Keywords to search for in contact profiles"
},
"countries": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"US",
"GB"
],
"description": "Countries to filter by (ISO 3166-1 alpha-2 codes)"
},
"jobTitles": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"Engineering Manager",
"VP Engineering"
],
"description": "Job titles to filter contacts by"
},
"companyLinkedInUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"example": [
"https://www.linkedin.com/company/stripe"
],
"description": "LinkedIn company URLs to scope the search. Supports multiple companies. Omit to search across all companies."
}
},
"description": "Search filters stored on a contact list",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Permanently delete a contact list and its stored contact snapshots.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the contact list |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the contact list"
}
}
}Retrieve contact list metadata and the stored contact count.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the contact list |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the contact list"
}
}
}Page through contacts stored in a saved list without making a new Sales Navigator request.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of contacts to return (1–100, default 25) |
| listId* | string | The unique identifier of the contact list |
| offset | integer | Number of contacts to skip for pagination (default 0) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of contacts to return (1–100, default 25)"
},
"listId": {
"type": "string",
"description": "The unique identifier of the contact list"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of contacts to skip for pagination (default 0)"
}
}
}List saved contact lists with pagination.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of lists to return (1–100, default 20) |
| offset | integer | Number of lists to skip for pagination (default 0) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of lists to return (1–100, default 20)"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Number of lists to skip for pagination (default 0)"
}
}
}Rename a saved contact list without changing its stored contact snapshot.
| Argument | Type | Description |
|---|---|---|
| listId* | string | The unique identifier of the contact list |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"listId",
"__requestBody"
],
"properties": {
"listId": {
"type": "string",
"description": "The unique identifier of the contact list"
},
"__requestBody": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"example": "Senior engineers at Stripe",
"maxLength": 200,
"description": "New display name for the contact list"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Start asynchronous AI research for a contact using LinkedIn and other sources, then poll the research ID for results.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"firstName",
"lastName",
"companyName",
"companyDomain"
],
"properties": {
"jobTitle": {
"type": "string",
"example": "VP of Sales",
"maxLength": 200,
"minLength": 1,
"description": "Job title of the contact (optional)"
},
"lastName": {
"type": "string",
"example": "Doe",
"maxLength": 100,
"minLength": 1,
"description": "Last name of the contact"
},
"firstName": {
"type": "string",
"example": "John",
"maxLength": 100,
"minLength": 1,
"description": "First name of the contact"
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/contact-research",
"maxLength": 2048,
"description": "Optional webhook URL to receive notifications when processing completes"
},
"companyName": {
"type": "string",
"example": "Acme Corp",
"maxLength": 200,
"minLength": 1,
"description": "Name of the contact's company"
},
"companyDomain": {
"type": "string",
"example": "acme.com",
"pattern": "^[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*$",
"maxLength": 253,
"minLength": 1,
"description": "Company domain (e.g., \"acme.com\")"
},
"contactProfileUrl": {
"type": "string",
"format": "uri",
"example": "https://linkedin.com/in/johndoe",
"maxLength": 500,
"description": "Contact profile URL of the contact (e.g., LinkedIn or other professional profile, optional)"
},
"linkedInSalesNavigatorUrl": {
"type": "string",
"format": "uri",
"example": "https://www.linkedin.com/sales/lead/ACwAAABcD...",
"maxLength": 500,
"description": "LinkedIn Sales Navigator profile URL of the contact (optional)"
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Enrich a contact with a custom question
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"contactProfileUrl",
"question"
],
"properties": {
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string",
"example": "important",
"description": "The importance/weight of the signal"
},
"question": {
"type": "string",
"example": "What are this person's main professional interests?",
"maxLength": 2000,
"minLength": 1,
"description": "The research question to ask about the contact"
},
"answerType": {
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string",
"default": "open_text",
"example": "open_text",
"description": "The expected format of the answer"
},
"connectors": {
"type": "object",
"properties": {
"salesNavigator": {
"type": "object",
"properties": {
"enabled": {
"enum": [
"required",
"preferred",
"off"
],
"type": "string",
"default": "preferred",
"example": "preferred",
"description": "Controls Sales Navigator usage during signal generation:\n- **required**: Fail request if Sales Navigator unavailable (rate limited/disconnected)\n- **preferred**: Attempt Sales Navigator, degrade gracefully if unavailable (default)\n- **off**: Do not attempt Sales Navigator\n\nNote: Contact signals always require LinkedIn, so this setting is accepted but ignored for contact signals.\n"
}
},
"additionalProperties": {}
}
},
"description": "Connector configuration for signal generation",
"additionalProperties": {}
},
"webhookUrl": {
"type": "string",
"format": "uri",
"example": "https://myapp.com/webhooks/signals",
"maxLength": 2048,
"description": "Optional webhook URL to receive notifications when processing completes.\nWebhooks are only sent for freshly processed signals — cached results do not trigger webhooks.\nSet `forceRefresh: true` to bypass the cache and ensure webhook delivery.\n"
},
"forceRefresh": {
"type": "boolean",
"default": false,
"example": false,
"description": "Force re-run of the signal analysis, skipping the cache. When set to true, a new signal will be created even if a cached result exists."
},
"outputSchema": {
"type": "object",
"properties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\nSee CreateSignalRequest.outputSchema for full documentation.\n",
"additionalProperties": {}
},
"signalTemplateId": {
"type": "string",
"format": "uuid",
"example": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"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)$",
"description": "Optional signal template ID to use"
},
"verificationMode": {
"enum": [
"strict",
"lenient"
],
"type": "string",
"default": "strict",
"example": "strict",
"description": "Controls how strictly Saber verifies answers before responding.\n\n- **strict**: Only returns answers backed by verified sources (primary or trusted secondary sources). Returns null when information is unavailable.\n- **lenient**: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.\n"
},
"contactProfileUrl": {
"type": "string",
"format": "uri",
"example": "https://linkedin.com/in/johndoe",
"maxLength": 500,
"minLength": 1,
"description": "The contact profile URL to research (e.g., \"https://linkedin.com/in/johndoe\")"
},
"qualificationCriteria": {
"type": "object",
"properties": {},
"description": "Qualification criteria mapping answer values based on answerType (same structure as company signals)",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": false
}
}
}Find a contact's verified work email
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"full_name",
"domain"
],
"properties": {
"domain": {
"type": "string",
"example": "saber.app",
"maxLength": 253,
"minLength": 1,
"description": "The mail domain for the contact's company. Accepts\nbare domains (`saber.app`), domains with `www.`\nprefix, and trailing-dot forms. URL-shaped inputs\n(`https://saber.app`) and email-shaped inputs\n(`[email protected]`) are rejected with 422.\n\nIf the domain redirects (a rebrand) or is dead (no\nmail), the finder resolves the company's real domain\nand searches there too — supplying `company_name`\nand/or `location` makes that discovery far more\naccurate.\n"
},
"location": {
"type": "string",
"example": "London, United Kingdom",
"maxLength": 200,
"description": "Optional. The contact's location (city / region /\ncountry). Enables location-aware candidate generation\nfor global companies — e.g. a London contact at a firm\nwith country domains resolves to the regional domain\nor subdomain.\n"
},
"full_name": {
"type": "string",
"example": "Joey van Ommen",
"maxLength": 200,
"minLength": 1,
"description": "Full name of the contact. Accepts 2-4 token names and\nEuropean name particles (`Joey van Ommen`,\n`Joey van der Ommen`). Trailing credentials and\nhonorifics (`Ahmed Othman, MBA, CDMP`, `Dr. …`),\nparenthetical roles, and mixed-script tails are cleaned\noff before parsing, so those resolve rather than being\nrejected. Non-Latin names (Arabic, Chinese, etc.) are\ntransliterated and attempted best-effort as\nlow-confidence parses. A value that is actually a\ncompany name (`Best Vision Business Center`) settles as\n`not_found` (not an error). A genuinely unparseable\nname — a single lone token, or empty — is rejected with\n422.\n"
},
"company_name": {
"type": "string",
"example": "Saber",
"maxLength": 200,
"description": "Optional. The contact's company name. Used only when\nthe supplied `domain` is dead or redirects: it anchors\nthe web search that finds the company's real domain,\nand sharply reduces wrong-company matches. Strongly\nrecommended whenever the domain may be stale.\n"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Submit a bulk find-email batch
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"contacts"
],
"properties": {
"contacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"full_name",
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 253,
"minLength": 1,
"description": "Same semantics as the single find-email endpoint."
},
"full_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Same semantics as the single find-email endpoint."
}
},
"additionalProperties": {}
},
"maxItems": 1000,
"minItems": 1
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Poll a bulk find-email batch
| Argument | Type | Description |
|---|---|---|
| id* | string | The `batch_id` returned by the submit call. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "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)$",
"description": "The `batch_id` returned by the submit call."
}
}
}Retrieve the current status and AI-generated insights for a contact research job when it has completed.
| Argument | Type | Description |
|---|---|---|
| id* | string | The unique identifier of the contact research request |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The unique identifier of the contact research request"
}
}
}Retrieve contact research using an external system ID, such as a HubSpot contact ID, plus the source name.
| Argument | Type | Description |
|---|---|---|
| externalId* | string | The external identifier of the contact research request (e.g., HubSpot contact ID) |
| externalSource* | string | The source system that provided the external ID (e.g., "hubspot") |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"externalId",
"externalSource"
],
"properties": {
"externalId": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The external identifier of the contact research request (e.g., HubSpot contact ID)"
},
"externalSource": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "The source system that provided the external ID (e.g., \"hubspot\")"
}
}
}Search for contacts by person, role, tenure, industry, company headcount, company type, or recent job change using the API key owner's Sales Navigator connection.
| Argument | Type | Description |
|---|---|---|
| __requestBody* | any | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"allOf": [
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 25,
"example": 25,
"maximum": 100,
"minimum": 1,
"description": "Maximum number of contacts to return per page"
},
"cursor": {
"type": "string",
"maxLength": 100,
"description": "Paging handle from the previous response's `nextCursor`. The documented way to fetch the next page; mutually exclusive with `offset`. Never construct one yourself. Pass it back with the same filters and `limit`. The cursor keeps the pagination session on the connector that served its first page. If that connector becomes unavailable, restart from page 1. Invalid, expired, and older cursor formats return `422 INVALID_CURSOR`.\n"
},
"offset": {
"type": "integer",
"default": 0,
"example": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset for pagination. Mutually exclusive with `cursor` — provide one or the other. Pages starting at or past the 1000-result search ceiling are rejected with 422 and error code `PAGE_BEYOND_CEILING` (distinct from the connector-required 422); a page that merely runs past it is clamped to the remaining rows. This compatibility field does not keep successive requests on one Sales Navigator connector. Use `cursor` for safe pagination.\n"
},
"keywords": {
"type": "string",
"example": "Kubernetes, DevOps",
"maxLength": 500,
"description": "Keywords to search for in contact profiles (e.g., skills, technologies)"
},
"lastName": {
"type": "string",
"example": "Doe",
"maxLength": 100,
"description": "Last name of the contact to search for"
},
"countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"maxLength": 2,
"minLength": 2
},
"example": [
"US",
"GB",
"DE"
],
"description": "Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., \"US\", \"GB\", \"DE\") — full country names are not accepted."
},
"firstName": {
"type": "string",
"example": "John",
"maxLength": 100,
"description": "First name of the contact to search for"
},
"jobTitles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"example": [
"Engineering Manager",
"VP Engineering"
],
"description": "Job titles to search for (plural — pass an array)"
},
"industries": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"example": [
"Software Development"
],
"maxItems": 20,
"minItems": 1,
"description": "Current LinkedIn Sales Navigator industry display names. Letter case and surrounding whitespace are normalized. Multiple values are OR'd together. Combined with other filters via AND. See https://docs.saber.app/contacts/industry-values for the canonical values.\n"
},
"departments": {
"type": "array",
"items": {
"enum": [
"Accounting",
"Administrative",
"Arts and Design",
"Business Development",
"Community and Social Services",
"Consulting",
"Customer Success and Support",
"Education",
"Engineering",
"Entrepreneurship",
"Finance",
"Healthcare Services",
"Human Resources",
"Information Technology",
"Legal",
"Marketing",
"Media and Communication",
"Military and Protective Services",
"Operations",
"Product Management",
"Program and Project Management",
"Purchasing",
"Quality Assurance",
"Real Estate",
"Research",
"Sales"
],
"type": "string"
},
"example": [
"Sales",
"Marketing"
],
"description": "Department (function) filter using LinkedIn Sales Navigator taxonomy. Multiple values are OR'd together. Combined with other filters via AND. All values are treated as INCLUDED — exclusion is not currently supported. This filter matches the person. For a person with several current positions, it does not identify which position matched.\n"
},
"companyTypes": {
"type": "array",
"items": {
"enum": [
"Public Company",
"Privately Held",
"Non Profit",
"Educational Institution",
"Partnership",
"Self Employed",
"Self Owned",
"Government Agency"
],
"type": "string"
},
"example": [
"Privately Held"
],
"maxItems": 8,
"minItems": 1,
"description": "Current company types. Multiple values are OR'd together. Combined with other filters via AND.\n"
},
"seniorityLevels": {
"type": "array",
"items": {
"enum": [
"Owner / Partner",
"CXO",
"Vice President",
"Director",
"Experienced Manager",
"Entry Level Manager",
"Strategic",
"Senior",
"Entry Level",
"In Training"
],
"type": "string"
},
"example": [
"CXO",
"Vice President",
"Director"
],
"description": "Seniority level filter using LinkedIn Sales Navigator taxonomy. Multiple values are OR'd together. Combined with other filters via AND. All values are treated as INCLUDED — exclusion is not currently supported. This filter matches the person. For a person with several current positions, it does not identify which position matched.\n"
},
"companyHeadcounts": {
"type": "array",
"items": {
"enum": [
"Self-employed",
"1-10",
"11-50",
"51-200",
"201-500",
"501-1,000",
"1,001-5,000",
"5,001-10,000",
"10,001+"
],
"type": "string"
},
"example": [
"51-200",
"201-500"
],
"maxItems": 9,
"minItems": 1,
"description": "Current company headcount ranges. Multiple values are OR'd together. Combined with other filters via AND.\n"
},
"companyLinkedInUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"example": [
"https://linkedin.com/company/google"
],
"description": "LinkedIn company URLs to scope the search (note: plural — pass an array even for a single company). Supports multiple companies; results are merged and deduplicated. Omit to search across all companies.\n"
},
"recentlyChangedJobs": {
"type": "boolean",
"example": true,
"description": "When true, uses Sales Navigator's Changed jobs filter. LinkedIn controls this rolling window and has no caller-selected start date. Approximately 90 days is an unverified working assumption.\n"
},
"yearsAtCurrentCompany": {
"type": "array",
"items": {
"enum": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"type": "string"
},
"example": [
"3 to 5 years"
],
"maxItems": 5,
"minItems": 1,
"description": "Sales Navigator's Years at current company ranges. Multiple values are OR'd together. Combined with other filters via AND. This filter matches the person. For a person with several current positions, it does not identify which position matched.\n"
},
"yearsInCurrentPosition": {
"type": "array",
"items": {
"enum": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"type": "string"
},
"example": [
"Less than 1 year"
],
"maxItems": 5,
"minItems": 1,
"description": "Sales Navigator's Years in current position ranges. Multiple values are OR'd together. Combined with other filters via AND. This filter matches the person. For a person with several current positions, it does not identify which position matched.\n"
}
},
"additionalProperties": false
},
{
"anyOf": [
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
]
}
],
"description": "Request body"
}
}
}Check how many Saber API credits your organization has left in the current billing period.
No arguments.
{
"type": "object",
"properties": {}
}Get an enrichment run
| Argument | Type | Description |
|---|---|---|
| runId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"runId"
],
"properties": {
"runId": {
"type": "string",
"format": "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)$"
}
}
}List enrichment runs
| Argument | Type | Description |
|---|---|---|
| type | string | Run type — `custom` or a prebuilt enrichment type. |
| limit | integer | |
| offset | integer | |
| status | array | Repeatable. Unknown values are rejected with `422`. |
| toDate | string | Include runs created at or before this instant. |
| entityId | string | Exact company id; never matches contact runs. |
| fromDate | string | Include runs created at or after this instant. |
| entityType | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"type": {
"enum": [
"custom",
"firmographics",
"funding",
"mna",
"open-jobs",
"tech-stack"
],
"type": "string",
"description": "Run type — `custom` or a prebuilt enrichment type."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"status": {
"type": "array",
"items": {
"enum": [
"processing",
"completed",
"failed"
],
"type": "string"
},
"description": "Repeatable. Unknown values are rejected with `422`."
},
"toDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Include runs created at or before this instant."
},
"entityId": {
"type": "string",
"description": "Exact company id; never matches contact runs."
},
"fromDate": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Include runs created at or after this instant."
},
"entityType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
}
}Create an enrichment template
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"name",
"question"
],
"properties": {
"name": {
"type": "string",
"example": "CRM Detection",
"maxLength": 200,
"minLength": 1,
"description": "User-friendly name for the template"
},
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string",
"example": "important",
"description": "The importance/weight of the signal"
},
"question": {
"type": "string",
"example": "Which CRM are they using?",
"maxLength": 2000,
"minLength": 1,
"description": "The research question to ask about companies"
},
"answerType": {
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string",
"default": "open_text",
"example": "open_text",
"description": "The expected format of the answer"
},
"description": {
"type": "string",
"example": "Identifies which CRM system a company is using",
"maxLength": 1000,
"description": "Optional description of what this template does"
},
"outputSchema": {
"type": "object",
"properties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\nSee CreateSignalRequest.outputSchema for full documentation.\n",
"additionalProperties": {}
},
"qualificationCriteria": {
"type": "object",
"example": {
"ranges": [
{
"rangeEnd": 20,
"rangeStart": 0,
"answerQualification": "poor"
},
{
"rangeEnd": 50,
"rangeStart": 20,
"answerQualification": "neutral"
},
{
"rangeEnd": 100,
"rangeStart": 50,
"answerQualification": "excellent"
}
]
},
"properties": {},
"description": "Qualification criteria mapping answer values based on answerType.\nStructure varies by answerType:\n- For percentage/number/currency: { ranges: [{ rangeStart, rangeEnd, answerQualification }] }\n- For boolean: { yes: \"qualification\", no: \"qualification\" }\n- For list: { choices: { key: { answerQualification, label } } }\n\nValid answerQualification values: disqualified, poor, neutral, good, excellent\n",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Delete an enrichment template
| Argument | Type | Description |
|---|---|---|
| templateId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"templateId"
],
"properties": {
"templateId": {
"type": "string",
"format": "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)$"
}
}
}Get an enrichment template
| Argument | Type | Description |
|---|---|---|
| templateId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"templateId"
],
"properties": {
"templateId": {
"type": "string",
"format": "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)$"
}
}
}List enrichment templates
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| offset | integer | |
| includeDeleted | boolean | Include deleted templates in the response |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"includeDeleted": {
"type": "boolean",
"default": false,
"description": "Include deleted templates in the response"
}
}
}Update an enrichment template
| Argument | Type | Description |
|---|---|---|
| templateId* | string | |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"templateId",
"__requestBody"
],
"properties": {
"templateId": {
"type": "string",
"format": "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)$"
},
"__requestBody": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "CRM Detection",
"maxLength": 200,
"minLength": 1,
"description": "User-friendly name for the template"
},
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string",
"example": "important",
"description": "The importance/weight of the signal"
},
"question": {
"type": "string",
"example": "Which CRM are they using?",
"maxLength": 2000,
"minLength": 1,
"description": "The research question to ask about companies"
},
"answerType": {
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string",
"example": "open_text",
"description": "The expected format of the answer"
},
"description": {
"type": "string",
"example": "Identifies which CRM system a company is using",
"maxLength": 1000,
"description": "Optional description of what this template does"
},
"outputSchema": {
"type": "object",
"properties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\n",
"additionalProperties": {}
},
"qualificationCriteria": {
"type": "object",
"properties": {},
"description": "Qualification criteria mapping answer values based on answerType",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}List enrichment types
No arguments.
{
"type": "object",
"properties": {}
}Create a monitor
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"checks"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"enrichment",
"signal"
],
"type": "string"
},
"type": {
"enum": [
"job_posted",
"social_posted",
"funding_raised",
"investment_made",
"ipo_announced",
"ipo_stage_changed",
"repo_engaged",
"ipo_rumoured",
"tender_published"
],
"type": "string",
"description": "Signal checks — the occurrence type to watch for (verb-past vocabulary)."
},
"prompt": {
"type": "string",
"description": "Signal checks — natural-language intent the AI turns into filters."
},
"filters": {
"type": "object",
"properties": {},
"description": "Signal checks — structured filters (type-specific).",
"additionalProperties": {}
},
"templateId": {
"type": "string",
"format": "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)$",
"description": "Enrichment checks — the template holding the question."
}
},
"additionalProperties": {}
},
"maxItems": 1,
"minItems": 1
},
"target": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"list",
"market"
],
"type": "string"
},
"entity": {
"enum": [
"company",
"contact"
],
"type": "string",
"description": "List targets — what the list contains."
},
"listId": {
"type": "string",
"format": "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)$",
"description": "List targets — the watched list."
}
},
"additionalProperties": {}
},
"webhook": {
"allOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Delivery endpoint. Omit it to create a monitor with no delivery: signals are still detected, stored and charged, and are read back from GET /v1/monitors/{monitorId}/signals instead of being POSTed. A url-less webhook block is still accepted, and is how a caller sets interval and intervalSignalLimit without configuring delivery."
},
"interval": {
"enum": [
"daily",
"weekly"
],
"type": "string"
},
"intervalSignalLimit": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Maximum signals to deliver per polling interval. Each run delivers at most this many. Over a billing cycle the monitor delivers at most this value times the number of runs its interval allows in the cycle, then waits for the next cycle. When runs overlap, for example a manual trigger during a scheduled run, the cycle total can exceed this by at most one run's limit per overlapping run. For ipo_stage_changed, ipo_rumoured, repo_engaged and tender_published, which Saber checks on its own schedule (every few minutes, or every hour for tender_published), the limit bounds each check rather than each interval, and the billing-cycle bound is the effective ceiling."
}
},
"additionalProperties": {}
},
{
"type": "object",
"properties": {
"secret": {
"type": "string",
"maxLength": 200,
"writeOnly": true,
"description": "Optional HMAC signing secret for deliveries; never echoed back."
}
},
"additionalProperties": {}
}
],
"description": "Discovery monitors — delivery webhook."
},
"schedule": {
"type": "object",
"properties": {
"timezone": {
"type": "string"
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"cronExpression": {
"type": "string",
"description": "Alternative to frequency; minimum interval 24h."
}
},
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Create a monitor action
| Argument | Type | Description |
|---|---|---|
| monitorId* | string | |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"__requestBody"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
},
"__requestBody": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"const": "webhook",
"example": "webhook",
"description": "The action type discriminator"
},
"webhook": {
"type": "object",
"required": [
"destination"
],
"properties": {
"destination": {
"type": "string",
"format": "uri",
"example": "https://example.com/webhook",
"description": "The URL to deliver webhook payloads to"
}
},
"description": "Configuration for a webhook action.",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Delete a monitor
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Delete a monitor action
| Argument | Type | Description |
|---|---|---|
| actionId* | string | |
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"actionId"
],
"properties": {
"actionId": {
"type": "string",
"format": "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)$"
},
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Get a monitor
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Get a monitor action
| Argument | Type | Description |
|---|---|---|
| actionId* | string | |
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"actionId"
],
"properties": {
"actionId": {
"type": "string",
"format": "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)$"
},
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}List monitors
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | integer | |
| offset | integer | |
| target | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"kind": {
"enum": [
"watch",
"discovery"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"target": {
"enum": [
"list",
"market"
],
"type": "string"
}
}
}List monitor actions
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}List a monitor's signals
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| offset | integer | |
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Pause a monitor
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Pause a monitor action
| Argument | Type | Description |
|---|---|---|
| actionId* | string | |
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"actionId"
],
"properties": {
"actionId": {
"type": "string",
"format": "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)$"
},
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Resume a monitor
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Resume a monitor action
| Argument | Type | Description |
|---|---|---|
| actionId* | string | |
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"actionId"
],
"properties": {
"actionId": {
"type": "string",
"format": "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)$"
},
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Trigger a monitor run
| Argument | Type | Description |
|---|---|---|
| monitorId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
}
}
}Update a monitor
| Argument | Type | Description |
|---|---|---|
| monitorId* | string | |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"__requestBody"
],
"properties": {
"monitorId": {
"type": "string",
"format": "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)$"
},
"__requestBody": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"enrichment",
"signal"
],
"type": "string"
},
"type": {
"enum": [
"job_posted",
"social_posted",
"funding_raised",
"investment_made",
"ipo_announced",
"ipo_stage_changed",
"repo_engaged",
"ipo_rumoured",
"tender_published"
],
"type": "string",
"description": "Signal checks — the occurrence type to watch for (verb-past vocabulary)."
},
"prompt": {
"type": "string",
"description": "Signal checks — natural-language intent the AI turns into filters."
},
"filters": {
"type": "object",
"properties": {},
"description": "Signal checks — structured filters (type-specific).",
"additionalProperties": {}
},
"templateId": {
"type": "string",
"format": "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)$",
"description": "Enrichment checks — the template holding the question."
}
},
"additionalProperties": {}
},
"maxItems": 1,
"minItems": 1,
"description": "Discovery monitors — update the check's prompt/filters (type is immutable)."
},
"target": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"list",
"market"
],
"type": "string"
},
"entity": {
"enum": [
"company",
"contact"
],
"type": "string",
"description": "List targets — what the list contains."
},
"listId": {
"type": "string",
"format": "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)$",
"description": "List targets — the watched list."
}
},
"additionalProperties": {}
},
"webhook": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Delivery endpoint. Omit it to create a monitor with no delivery: signals are still detected, stored and charged, and are read back from GET /v1/monitors/{monitorId}/signals instead of being POSTed. A url-less webhook block is still accepted, and is how a caller sets interval and intervalSignalLimit without configuring delivery."
},
"interval": {
"enum": [
"daily",
"weekly"
],
"type": "string"
},
"intervalSignalLimit": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Maximum signals to deliver per polling interval. Each run delivers at most this many. Over a billing cycle the monitor delivers at most this value times the number of runs its interval allows in the cycle, then waits for the next cycle. When runs overlap, for example a manual trigger during a scheduled run, the cycle total can exceed this by at most one run's limit per overlapping run. For ipo_stage_changed, ipo_rumoured, repo_engaged and tender_published, which Saber checks on its own schedule (every few minutes, or every hour for tender_published), the limit bounds each check rather than each interval, and the billing-cycle bound is the effective ceiling."
}
},
"additionalProperties": {}
},
"schedule": {
"type": "object",
"properties": {
"timezone": {
"type": "string"
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"cronExpression": {
"type": "string",
"description": "Alternative to frequency; minimum interval 24h."
}
},
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Update a monitor action
| Argument | Type | Description |
|---|---|---|
| actionId* | string | |
| monitorId* | string | |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"monitorId",
"actionId",
"__requestBody"
],
"properties": {
"actionId": {
"type": "string",
"format": "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)$"
},
"monitorId": {
"type": "string",
"format": "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)$"
},
"__requestBody": {
"type": "object",
"properties": {
"webhook": {
"type": "object",
"required": [
"destination"
],
"properties": {
"destination": {
"type": "string",
"format": "uri",
"example": "https://example.com/webhook",
"description": "The URL to deliver webhook payloads to"
}
},
"description": "Configuration for a webhook action.",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Get your organisation profile
No arguments.
{
"type": "object",
"properties": {}
}Update your organisation profile
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Acme Corp",
"description": "New display name for the organisation"
},
"website": {
"type": "string",
"example": "acme.com",
"description": "New website domain for the organisation"
},
"description": {
"type": "object",
"properties": {
"general": {
"type": "string",
"example": "Acme Corp builds enterprise software for logistics teams.",
"description": "General overview of the organisation"
},
"products": {
"type": "string",
"example": "Route optimisation platform and real-time freight tracking.",
"description": "Description of the organisation's products or services"
},
"useCases": {
"type": "string",
"example": "Reducing delivery costs for 3PL operators and e-commerce brands.",
"description": "Key use cases the organisation addresses"
},
"valueProp": {
"type": "string",
"example": "Cut logistics costs by 20% with AI-powered route optimisation.",
"description": "The organisation's core value proposition"
}
},
"description": "Descriptive text fields for the organisation",
"additionalProperties": {}
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Assign a profile to many objects at once
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"profileId",
"objectType",
"objectIds"
],
"properties": {
"objectIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"example": [
"acme.com",
"stripe.com",
"framer.com"
],
"maxItems": 500,
"minItems": 1,
"description": "Capped at 500 per request. Paginate larger lists by issuing\nmultiple requests.\n"
},
"profileId": {
"type": "string",
"format": "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)$"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Assign a profile to a single object
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"profileId",
"objectType",
"objectId"
],
"properties": {
"objectId": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "For `company`, the domain; for `contact`, the LinkedIn profile URL."
},
"profileId": {
"type": "string",
"format": "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)$"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Remove a profile assignment
| Argument | Type | Description |
|---|---|---|
| assignmentId* | string | Profile assignment UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assignmentId"
],
"properties": {
"assignmentId": {
"type": "string",
"format": "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)$",
"description": "Profile assignment UUID"
}
}
}List profile assignments for an object
| Argument | Type | Description |
|---|---|---|
| objectId* | string | For `company` use the domain (e.g. `acme.com`); for `contact` use the LinkedIn profile URL |
| objectType* | string | Object type (`company` or `contact`) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"objectType",
"objectId"
],
"properties": {
"objectId": {
"type": "string",
"description": "For `company` use the domain (e.g. `acme.com`); for `contact` use the LinkedIn profile URL"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string",
"description": "Object type (`company` or `contact`)"
}
}
}Trigger score recomputation
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"objectType",
"objectIds"
],
"properties": {
"objectIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"maxItems": 500,
"minItems": 1,
"description": "For `company`, domains; for `contact`, LinkedIn profile URLs.\nCapped at 500 per request — paginate larger lists.\n"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Create a scoring profile
| Argument | Type | Description |
|---|---|---|
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"__requestBody"
],
"properties": {
"__requestBody": {
"type": "object",
"required": [
"profileType",
"name"
],
"properties": {
"name": {
"type": "string",
"example": "EMEA Enterprise"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileType": {
"enum": [
"company",
"contact"
],
"type": "string",
"description": "Object type this profile will score"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Delete a scoring profile
| Argument | Type | Description |
|---|---|---|
| profileId* | string | Scoring profile UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
}
}
}Get a scoring profile
| Argument | Type | Description |
|---|---|---|
| profileId* | string | Scoring profile UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
}
}
}List scoring profiles
No arguments.
{
"type": "object",
"properties": {}
}Update a scoring profile
| Argument | Type | Description |
|---|---|---|
| profileId* | string | Scoring profile UUID |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId",
"__requestBody"
],
"properties": {
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
},
"__requestBody": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"example": "Enterprise ICP"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"example": "Companies with 1000+ headcount"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Delete a scoring rule
| Argument | Type | Description |
|---|---|---|
| ruleId* | string | Scoring rule UUID |
| profileId* | string | Scoring profile UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId",
"ruleId"
],
"properties": {
"ruleId": {
"type": "string",
"format": "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)$",
"description": "Scoring rule UUID"
},
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
}
}
}List scoring rules for a profile
| Argument | Type | Description |
|---|---|---|
| profileId* | string | Scoring profile UUID |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId"
],
"properties": {
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
}
}
}Upsert a scoring rule
| Argument | Type | Description |
|---|---|---|
| profileId* | string | Scoring profile UUID |
| __requestBody* | object | Request body |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"profileId",
"__requestBody"
],
"properties": {
"profileId": {
"type": "string",
"format": "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)$",
"description": "Scoring profile UUID"
},
"__requestBody": {
"type": "object",
"required": [
"signalTemplateId",
"dimension",
"answerType",
"pointValues"
],
"properties": {
"dimension": {
"enum": [
"fit",
"urgency"
],
"type": "string"
},
"answerType": {
"enum": [
"boolean",
"number",
"percentage",
"currency",
"list"
],
"type": "string",
"description": "Drives shape validation for `pointValues`. Must match the referenced\nsignal template's answer type — mismatch surfaces as an\n`INVALID_POINT_VALUES` 422 at write time rather than a silent\ncompute failure later.\n"
},
"pointValues": {
"type": "object",
"example": {
"ranges": [
{
"max": 100,
"min": 0,
"points": 2
},
{
"max": 1000,
"min": 100,
"points": 10
},
{
"max": 100000,
"min": 1000,
"points": 25
}
]
},
"properties": {
"mode": {
"enum": [
"additive",
"best-match",
"contains-all",
"contains-none",
"exact-match"
],
"type": "string",
"example": "additive",
"description": "Optional. Controls how a `list` rule combines matched choices. Defaults\nto `additive` (sum matched, clamp to highest single choice) — the v1\nbehaviour. Other modes:\n\n* `best-match` — award only the highest-scoring matched choice.\n* `contains-all` — award `max(choices)` only if every configured choice appears.\n* `contains-none` — award `max(choices)` only if none of the configured choices appear.\n* `exact-match` — award `sum(choices)` only when the answer set equals the configured set exactly.\n"
},
"true": {
"type": "number",
"example": 20,
"description": "Points awarded when a boolean signal answers `true`. Used by `boolean` answer types."
},
"false": {
"type": "number",
"example": -5,
"description": "Points awarded when a boolean signal answers `false`. Used by `boolean` answer types."
},
"ranges": {
"type": "array",
"items": {
"type": "object",
"required": [
"min",
"max",
"points"
],
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"points": {
"type": "number"
}
},
"additionalProperties": {}
},
"description": "Used by `number`, `percentage`, and `currency` answer types. Upper bound is exclusive."
},
"choices": {
"type": "object",
"example": {
"None": -10,
"HubSpot": 8,
"Salesforce": 10
},
"properties": {},
"description": "Used by `list` answer types. Map of allowed list value → points awarded if present in the answer.",
"additionalProperties": {
"type": "number"
}
}
},
"description": "Point-value mapping for one rule. The shape varies by the answer type of the\nreferenced signal template — exactly one of `true`/`false`, `ranges`, or `choices`\nis populated.\n",
"additionalProperties": {}
},
"signalTemplateId": {
"type": "string"
}
},
"description": "Request body",
"additionalProperties": {}
}
}
}Read scores for one or more objects
| Argument | Type | Description |
|---|---|---|
| objectId* | array | Repeatable. For `company` use the domain; for `contact` use the LinkedIn profile URL. |
| objectType* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"objectType",
"objectId"
],
"properties": {
"objectId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Repeatable. For `company` use the domain; for `contact` use the LinkedIn profile URL."
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
}
}