Server definition
- Hash
- sha256:31d96eff9ef71abf11c03ee98284195d4efe5b1341cb3d51a856ee9d17ac9626
- What it is
- What a remote MCP server returned when asked what it offers: 76 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Enrich a company with a custom question",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"answerType": {
"default": "open_text",
"description": "The expected format of the answer",
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"example": "open_text",
"type": "string"
},
"connectors": {
"additionalProperties": {},
"description": "Connector configuration for signal generation",
"properties": {
"salesNavigator": {
"additionalProperties": {},
"properties": {
"enabled": {
"default": "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",
"enum": [
"required",
"preferred",
"off"
],
"example": "preferred",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"domain": {
"description": "The company domain to research (e.g., \"acme.com\")",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"default": 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.",
"example": false,
"type": "boolean"
},
"outputSchema": {
"additionalProperties": {},
"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",
"example": {
"properties": {
"hasFreeTier": {
"type": "boolean"
},
"pricingTiers": {
"items": {
"properties": {
"features": {
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"type": "string"
},
"price": {
"type": "number"
}
},
"required": [
"name"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"pricingTiers"
],
"type": "object"
},
"properties": {},
"type": "object"
},
"qualificationCriteria": {
"additionalProperties": {},
"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",
"properties": {},
"type": "object"
},
"question": {
"description": "The research question to ask about the company",
"example": "What is Acme Corp's main business focus?",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"signalTemplateId": {
"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",
"example": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"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)$",
"type": "string"
},
"verificationMode": {
"default": "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",
"enum": [
"strict",
"lenient"
],
"example": "strict",
"type": "string"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"weight": {
"description": "The importance/weight of the signal",
"enum": [
"important",
"nice_to_have",
"not_important"
],
"example": "important",
"type": "string"
}
},
"required": [
"domain",
"question"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_custom",
"outputSchema": null
},
{
"description": "Enrich many companies with one shared custom question — one run per\ntarget domain. Capped at 100 targets per call; split a larger list\ninto successive calls of 100 or fewer. Returns 202 immediately; poll\neach run with enrichment_runs-get or list them with enrichment_runs-list.\n",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"answerType": {
"default": "open_text",
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contact_posts",
"contact_engagements",
"json_schema"
],
"type": "string"
},
"connectors": {
"additionalProperties": {},
"description": "Connector configuration applied to every run in the batch.",
"properties": {
"salesNavigator": {
"additionalProperties": {},
"properties": {
"enabled": {
"default": "preferred",
"enum": [
"required",
"preferred",
"off"
],
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"forceRefresh": {
"type": "boolean"
},
"generateSummaryOnComplete": {
"type": "boolean"
},
"outputSchema": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"qualificationCriteria": {
"additionalProperties": {},
"properties": {},
"type": "object"
},
"question": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"signalTemplateId": {
"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)$",
"type": "string"
},
"targets": {
"description": "Company domains; one run per target.",
"items": {
"description": "Company domain (e.g., \"acme.com\")",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
"verificationMode": {
"enum": [
"strict",
"lenient"
],
"type": "string"
},
"webhookUrl": {
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"weight": {
"enum": [
"important",
"nice_to_have",
"not_important"
],
"type": "string"
}
},
"required": [
"targets"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_custom_batch",
"outputSchema": null
},
{
"description": "Enrich a company with firmographics",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"domain": {
"description": "The company domain to research (e.g., \"acme.com\").",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"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",
"type": "boolean"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_firmographics",
"outputSchema": null
},
{
"description": "Enrich a company with funding status",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"domain": {
"description": "The company domain to research (e.g., \"acme.com\").",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"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",
"type": "boolean"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_funding",
"outputSchema": null
},
{
"description": "Enrich a company with M&A activity",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"domain": {
"description": "The company domain to research (e.g., \"acme.com\").",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"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",
"type": "boolean"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_mna",
"outputSchema": null
},
{
"description": "Enrich a company with open jobs",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"domain": {
"description": "The company domain to research (e.g., \"acme.com\").",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"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",
"type": "boolean"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_open_jobs",
"outputSchema": null
},
{
"description": "Enrich a company with its tech stack",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"category": {
"description": "A coarse technology category to survey. Mutually exclusive with\n`technology`.\n",
"enum": [
"erp",
"crm"
],
"example": "crm",
"type": "string"
},
"domain": {
"description": "The company domain to research (e.g., \"acme.com\").",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"forceRefresh": {
"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",
"type": "boolean"
},
"technology": {
"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",
"example": "salesforce",
"type": "string"
},
"webhookUrl": {
"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.",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-enrich_tech_stack",
"outputSchema": null
},
{
"description": "Generate a company summary",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"domain": {
"description": "The company domain to generate a summary for (e.g., \"acme.com\")",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-generate_summary",
"outputSchema": null
},
{
"description": "List company summaries",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"type": "string"
},
"limit": {
"default": 20,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "companies-list_summaries",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"companyName": {
"description": "Company, brand or product name to resolve to its operating company. Include the legal suffix when known.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"context": {
"description": "Optional article excerpt or identity details used to distinguish namesakes.",
"maxLength": 10000,
"type": "string"
},
"countryCode": {
"description": "Optional ISO 3166-1 alpha-2 country hint, normalized to uppercase.",
"pattern": "^[A-Za-z]{2}$",
"type": "string"
}
},
"required": [
"companyName"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "companies-resolve-domain",
"outputSchema": null
},
{
"description": "Estimate how many companies match a list filter and how many credits the list operation would cost.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"filter": {
"additionalProperties": {},
"description": "Criteria for filtering companies",
"properties": {
"domains": {
"description": "Filter by company domains",
"items": {
"type": "string"
},
"type": "array"
},
"exclude": {
"additionalProperties": {},
"description": "Exclusion filters (companies matching these are removed)",
"properties": {
"domains": {
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"properties": {
"cities": {
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"sizes": {
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"founded": {
"additionalProperties": {},
"description": "Filter by founded year range",
"properties": {
"after": {
"description": "Founded after this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"before": {
"description": "Founded before this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"handles": {
"description": "Filter by company handles",
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"description": "Filter by industry names",
"example": [
"software development",
"technology, information and internet"
],
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"description": "Filter by geographic location",
"properties": {
"cities": {
"description": "Filter by city names",
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"description": "Filter by ISO country codes",
"example": [
"US",
"GB"
],
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"description": "Filter by state/province names",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"names": {
"description": "Filter by company names",
"items": {
"type": "string"
},
"type": "array"
},
"questionIds": {
"description": "Filter by signal question IDs",
"items": {
"type": "string"
},
"type": "array"
},
"sizes": {
"description": "Filter by company size ranges",
"example": [
"51-200",
"201-500"
],
"items": {
"type": "string"
},
"type": "array"
},
"technologies": {
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)",
"example": [
"stripe",
"hubspot"
],
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"description": "Filter by company types",
"items": {
"type": "string"
},
"type": "array"
},
"websites": {
"description": "Filter by company websites",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"filter"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "company_lists-count_preview",
"outputSchema": null
},
{
"description": "Save a company filter as a reusable list for review, enrichments, scoring, export, and CRM workflows.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"filter": {
"additionalProperties": {},
"description": "Criteria for filtering companies",
"properties": {
"domains": {
"description": "Filter by company domains",
"items": {
"type": "string"
},
"type": "array"
},
"exclude": {
"additionalProperties": {},
"description": "Exclusion filters (companies matching these are removed)",
"properties": {
"domains": {
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"properties": {
"cities": {
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"sizes": {
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"founded": {
"additionalProperties": {},
"description": "Filter by founded year range",
"properties": {
"after": {
"description": "Founded after this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"before": {
"description": "Founded before this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"handles": {
"description": "Filter by company handles",
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"description": "Filter by industry names",
"example": [
"software development",
"technology, information and internet"
],
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"description": "Filter by geographic location",
"properties": {
"cities": {
"description": "Filter by city names",
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"description": "Filter by ISO country codes",
"example": [
"US",
"GB"
],
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"description": "Filter by state/province names",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"names": {
"description": "Filter by company names",
"items": {
"type": "string"
},
"type": "array"
},
"questionIds": {
"description": "Filter by signal question IDs",
"items": {
"type": "string"
},
"type": "array"
},
"sizes": {
"description": "Filter by company size ranges",
"example": [
"51-200",
"201-500"
],
"items": {
"type": "string"
},
"type": "array"
},
"technologies": {
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)",
"example": [
"stripe",
"hubspot"
],
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"description": "Filter by company types",
"items": {
"type": "string"
},
"type": "array"
},
"websites": {
"description": "Filter by company websites",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": {
"description": "A human-readable name for the list (1–200 characters)",
"example": "Mid-size US SaaS companies",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"filter"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "company_lists-create",
"outputSchema": null
},
{
"description": "Delete a saved company list and remove its reusable segment boundary.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"listId": {
"description": "The unique identifier of the company list to delete",
"type": "string"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "company_lists-delete",
"outputSchema": null
},
{
"description": "Export a saved company list to CSV, optionally including selected firmographic and enrichment columns.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"fields": {
"description": "Optional firmographic columns to include after the fixed `name` and\n`website` columns, in the order specified. Unknown values return 422.\n",
"example": [
"industry",
"size",
"country_code"
],
"items": {
"enum": [
"industry",
"size",
"founded",
"city",
"state",
"country_code"
],
"type": "string"
},
"type": "array"
},
"signalTemplateIds": {
"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",
"example": [
"123e4567-e89b-12d3-a456-426614174000"
],
"items": {
"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)$",
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"listId": {
"description": "The unique identifier of the company list",
"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)$",
"type": "string"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "company_lists-export",
"outputSchema": null
},
{
"description": "Retrieve company list metadata, including its filter and current company count.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"listId": {
"description": "The unique identifier of the company list",
"type": "string"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "company_lists-get",
"outputSchema": null
},
{
"description": "Page through companies that match a saved company list filter.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 25,
"description": "Maximum number of companies to return (1–100, default 25)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"listId": {
"description": "The unique identifier of the company list",
"type": "string"
},
"offset": {
"default": 0,
"description": "Number of companies to skip for pagination (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "company_lists-get_companies",
"outputSchema": null
},
{
"description": "Import companies from a HubSpot list, view, or segment into a saved Saber company list.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"name": {
"description": "A human-readable name for the imported list (1–200 characters)",
"example": "HubSpot — Technology companies",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"source": {
"additionalProperties": {},
"description": "Describes the external source to import companies from",
"properties": {
"filter": {
"additionalProperties": {},
"description": "A single HubSpot property filter used to select companies for import",
"properties": {
"operator": {
"description": "Comparison operator. Value-free operators (`HAS_PROPERTY`, `NOT_HAS_PROPERTY`)\ndo not require a `value` field. All others do.\n",
"enum": [
"EQ",
"NEQ",
"GT",
"GTE",
"LT",
"LTE",
"HAS_PROPERTY",
"NOT_HAS_PROPERTY",
"CONTAINS_TOKEN",
"NOT_CONTAINS_TOKEN"
],
"example": "EQ",
"type": "string"
},
"propertyName": {
"description": "The HubSpot company property to filter on (e.g. `industry`, `city`, `hs_lead_status`)",
"example": "industry",
"type": "string"
},
"value": {
"description": "The value to compare against. Required for all operators except `HAS_PROPERTY` and `NOT_HAS_PROPERTY`.",
"example": "Technology",
"type": "string"
}
},
"required": [
"propertyName",
"operator"
],
"type": "object"
},
"type": {
"const": "hubspot",
"description": "Import source type. Currently only `hubspot` is supported.",
"example": "hubspot",
"type": "string"
}
},
"required": [
"type",
"filter"
],
"type": "object"
}
},
"required": [
"name",
"source"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "company_lists-import",
"outputSchema": null
},
{
"description": "List saved company lists with pagination.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 20,
"description": "Maximum number of lists to return (1–100, default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of lists to skip for pagination (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "company_lists-list",
"outputSchema": null
},
{
"description": "Preview up to 50 companies that match a filter before creating a reusable company list.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"filter": {
"additionalProperties": {},
"description": "Criteria for filtering companies",
"properties": {
"domains": {
"description": "Filter by company domains",
"items": {
"type": "string"
},
"type": "array"
},
"exclude": {
"additionalProperties": {},
"description": "Exclusion filters (companies matching these are removed)",
"properties": {
"domains": {
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"properties": {
"cities": {
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"sizes": {
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"founded": {
"additionalProperties": {},
"description": "Filter by founded year range",
"properties": {
"after": {
"description": "Founded after this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"before": {
"description": "Founded before this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"handles": {
"description": "Filter by company handles",
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"description": "Filter by industry names",
"example": [
"software development",
"technology, information and internet"
],
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"description": "Filter by geographic location",
"properties": {
"cities": {
"description": "Filter by city names",
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"description": "Filter by ISO country codes",
"example": [
"US",
"GB"
],
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"description": "Filter by state/province names",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"names": {
"description": "Filter by company names",
"items": {
"type": "string"
},
"type": "array"
},
"questionIds": {
"description": "Filter by signal question IDs",
"items": {
"type": "string"
},
"type": "array"
},
"sizes": {
"description": "Filter by company size ranges",
"example": [
"51-200",
"201-500"
],
"items": {
"type": "string"
},
"type": "array"
},
"technologies": {
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)",
"example": [
"stripe",
"hubspot"
],
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"description": "Filter by company types",
"items": {
"type": "string"
},
"type": "array"
},
"websites": {
"description": "Filter by company websites",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
}
},
"required": [
"filter"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "company_lists-search",
"outputSchema": null
},
{
"description": "Update a company list name or filter and refresh cached matching companies.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"filter": {
"additionalProperties": {},
"description": "Criteria for filtering companies",
"properties": {
"domains": {
"description": "Filter by company domains",
"items": {
"type": "string"
},
"type": "array"
},
"exclude": {
"additionalProperties": {},
"description": "Exclusion filters (companies matching these are removed)",
"properties": {
"domains": {
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"properties": {
"cities": {
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"sizes": {
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"founded": {
"additionalProperties": {},
"description": "Filter by founded year range",
"properties": {
"after": {
"description": "Founded after this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"before": {
"description": "Founded before this year",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"type": "object"
},
"handles": {
"description": "Filter by company handles",
"items": {
"type": "string"
},
"type": "array"
},
"industries": {
"description": "Filter by industry names",
"example": [
"software development",
"technology, information and internet"
],
"items": {
"type": "string"
},
"type": "array"
},
"location": {
"additionalProperties": {},
"description": "Filter by geographic location",
"properties": {
"cities": {
"description": "Filter by city names",
"items": {
"type": "string"
},
"type": "array"
},
"countryCodes": {
"description": "Filter by ISO country codes",
"example": [
"US",
"GB"
],
"items": {
"type": "string"
},
"type": "array"
},
"states": {
"description": "Filter by state/province names",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"names": {
"description": "Filter by company names",
"items": {
"type": "string"
},
"type": "array"
},
"questionIds": {
"description": "Filter by signal question IDs",
"items": {
"type": "string"
},
"type": "array"
},
"sizes": {
"description": "Filter by company size ranges",
"example": [
"51-200",
"201-500"
],
"items": {
"type": "string"
},
"type": "array"
},
"technologies": {
"description": "Filter by technology slugs (companies must use at least one of the specified technologies)",
"example": [
"stripe",
"hubspot"
],
"items": {
"type": "string"
},
"type": "array"
},
"types": {
"description": "Filter by company types",
"items": {
"type": "string"
},
"type": "array"
},
"websites": {
"description": "Filter by company websites",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": {
"description": "Updated name for the list (1–200 characters)",
"example": "Updated list name",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"filter"
],
"type": "object"
},
"listId": {
"description": "The unique identifier of the company list to update",
"type": "string"
}
},
"required": [
"listId",
"__requestBody"
],
"type": "object"
},
"name": "company_lists-update",
"outputSchema": null
},
{
"description": "List connectors and their connection status",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "connectors-list",
"outputSchema": null
},
{
"description": "Run a LinkedIn Sales Navigator search, store a point-in-time contact snapshot, and return contact list metadata.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"filters": {
"additionalProperties": {},
"description": "Search filters stored on a contact list",
"properties": {
"companyLinkedInUrls": {
"description": "LinkedIn company URLs to scope the search. Supports multiple companies. Omit to search across all companies.",
"example": [
"https://www.linkedin.com/company/stripe"
],
"items": {
"format": "uri",
"type": "string"
},
"type": "array"
},
"countries": {
"description": "Countries to filter by (ISO 3166-1 alpha-2 codes)",
"example": [
"US",
"GB"
],
"items": {
"type": "string"
},
"type": "array"
},
"jobTitles": {
"description": "Job titles to filter contacts by",
"example": [
"Engineering Manager",
"VP Engineering"
],
"items": {
"type": "string"
},
"type": "array"
},
"keywords": {
"description": "Keywords to search for in contact profiles",
"example": "Kubernetes",
"type": "string"
}
},
"type": "object"
},
"name": {
"description": "Display name for the contact list",
"example": "Engineering leads at Stripe",
"maxLength": 200,
"type": "string"
}
},
"required": [
"name",
"filters"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contact_lists-create",
"outputSchema": null
},
{
"description": "Permanently delete a contact list and its stored contact snapshots.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"listId": {
"description": "The unique identifier of the contact list",
"type": "string"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "contact_lists-delete",
"outputSchema": null
},
{
"description": "Retrieve contact list metadata and the stored contact count.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"listId": {
"description": "The unique identifier of the contact list",
"type": "string"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "contact_lists-get",
"outputSchema": null
},
{
"description": "Page through contacts stored in a saved list without making a new Sales Navigator request.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 25,
"description": "Maximum number of contacts to return (1–100, default 25)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"listId": {
"description": "The unique identifier of the contact list",
"type": "string"
},
"offset": {
"default": 0,
"description": "Number of contacts to skip for pagination (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"listId"
],
"type": "object"
},
"name": "contact_lists-get_contacts",
"outputSchema": null
},
{
"description": "List saved contact lists with pagination.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 20,
"description": "Maximum number of lists to return (1–100, default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"description": "Number of lists to skip for pagination (default 0)",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "contact_lists-list",
"outputSchema": null
},
{
"description": "Rename a saved contact list without changing its stored contact snapshot.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"name": {
"description": "New display name for the contact list",
"example": "Senior engineers at Stripe",
"maxLength": 200,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"listId": {
"description": "The unique identifier of the contact list",
"type": "string"
}
},
"required": [
"listId",
"__requestBody"
],
"type": "object"
},
"name": "contact_lists-update",
"outputSchema": null
},
{
"description": "Start asynchronous AI research for a contact using LinkedIn and other sources, then poll the research ID for results.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"companyDomain": {
"description": "Company domain (e.g., \"acme.com\")",
"example": "acme.com",
"maxLength": 253,
"minLength": 1,
"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])?)*$",
"type": "string"
},
"companyName": {
"description": "Name of the contact's company",
"example": "Acme Corp",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"contactProfileUrl": {
"description": "Contact profile URL of the contact (e.g., LinkedIn or other professional profile, optional)",
"example": "https://linkedin.com/in/johndoe",
"format": "uri",
"maxLength": 500,
"type": "string"
},
"firstName": {
"description": "First name of the contact",
"example": "John",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"jobTitle": {
"description": "Job title of the contact (optional)",
"example": "VP of Sales",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"lastName": {
"description": "Last name of the contact",
"example": "Doe",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"linkedInSalesNavigatorUrl": {
"description": "LinkedIn Sales Navigator profile URL of the contact (optional)",
"example": "https://www.linkedin.com/sales/lead/ACwAAABcD...",
"format": "uri",
"maxLength": 500,
"type": "string"
},
"webhookUrl": {
"description": "Optional webhook URL to receive notifications when processing completes",
"example": "https://myapp.com/webhooks/contact-research",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"firstName",
"lastName",
"companyName",
"companyDomain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contacts-create_research",
"outputSchema": null
},
{
"description": "Enrich a contact with a custom question",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": false,
"description": "Request body",
"properties": {
"answerType": {
"default": "open_text",
"description": "The expected format of the answer",
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"example": "open_text",
"type": "string"
},
"connectors": {
"additionalProperties": {},
"description": "Connector configuration for signal generation",
"properties": {
"salesNavigator": {
"additionalProperties": {},
"properties": {
"enabled": {
"default": "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",
"enum": [
"required",
"preferred",
"off"
],
"example": "preferred",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"contactProfileUrl": {
"description": "The contact profile URL to research (e.g., \"https://linkedin.com/in/johndoe\")",
"example": "https://linkedin.com/in/johndoe",
"format": "uri",
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"forceRefresh": {
"default": 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.",
"example": false,
"type": "boolean"
},
"outputSchema": {
"additionalProperties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\nSee CreateSignalRequest.outputSchema for full documentation.\n",
"properties": {},
"type": "object"
},
"qualificationCriteria": {
"additionalProperties": {},
"description": "Qualification criteria mapping answer values based on answerType (same structure as company signals)",
"properties": {},
"type": "object"
},
"question": {
"description": "The research question to ask about the contact",
"example": "What are this person's main professional interests?",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"signalTemplateId": {
"description": "Optional signal template ID to use",
"example": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"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)$",
"type": "string"
},
"verificationMode": {
"default": "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",
"enum": [
"strict",
"lenient"
],
"example": "strict",
"type": "string"
},
"webhookUrl": {
"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",
"example": "https://myapp.com/webhooks/signals",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"weight": {
"description": "The importance/weight of the signal",
"enum": [
"important",
"nice_to_have",
"not_important"
],
"example": "important",
"type": "string"
}
},
"required": [
"contactProfileUrl",
"question"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contacts-enrich_custom",
"outputSchema": null
},
{
"description": "Find a contact's verified work email",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"company_name": {
"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",
"example": "Saber",
"maxLength": 200,
"type": "string"
},
"domain": {
"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",
"example": "saber.app",
"maxLength": 253,
"minLength": 1,
"type": "string"
},
"full_name": {
"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",
"example": "Joey van Ommen",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"location": {
"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",
"example": "London, United Kingdom",
"maxLength": 200,
"type": "string"
}
},
"required": [
"full_name",
"domain"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contacts-enrich_work_email",
"outputSchema": null
},
{
"description": "Submit a bulk find-email batch",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"contacts": {
"items": {
"additionalProperties": {},
"properties": {
"domain": {
"description": "Same semantics as the single find-email endpoint.",
"maxLength": 253,
"minLength": 1,
"type": "string"
},
"full_name": {
"description": "Same semantics as the single find-email endpoint.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"full_name",
"domain"
],
"type": "object"
},
"maxItems": 1000,
"minItems": 1,
"type": "array"
}
},
"required": [
"contacts"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contacts-enrich_work_email_batch",
"outputSchema": null
},
{
"description": "Poll a bulk find-email batch",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The `batch_id` returned by the submit call.",
"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)$",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "contacts-enrich_work_email_batch_get",
"outputSchema": null
},
{
"description": "Retrieve the current status and AI-generated insights for a contact research job when it has completed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The unique identifier of the contact research request",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "contacts-get_research",
"outputSchema": null
},
{
"description": "Retrieve contact research using an external system ID, such as a HubSpot contact ID, plus the source name.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"externalId": {
"description": "The external identifier of the contact research request (e.g., HubSpot contact ID)",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"externalSource": {
"description": "The source system that provided the external ID (e.g., \"hubspot\")",
"maxLength": 50,
"minLength": 1,
"type": "string"
}
},
"required": [
"externalId",
"externalSource"
],
"type": "object"
},
"name": "contacts-get_research_by_external_id",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"allOf": [
{
"additionalProperties": false,
"properties": {
"companyHeadcounts": {
"description": "Current company headcount ranges. Multiple values are OR'd together. Combined with other filters via AND.\n",
"example": [
"51-200",
"201-500"
],
"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"
},
"maxItems": 9,
"minItems": 1,
"type": "array"
},
"companyLinkedInUrls": {
"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",
"example": [
"https://linkedin.com/company/google"
],
"items": {
"format": "uri",
"type": "string"
},
"type": "array"
},
"companyTypes": {
"description": "Current company types. Multiple values are OR'd together. Combined with other filters via AND.\n",
"example": [
"Privately Held"
],
"items": {
"enum": [
"Public Company",
"Privately Held",
"Non Profit",
"Educational Institution",
"Partnership",
"Self Employed",
"Self Owned",
"Government Agency"
],
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"countries": {
"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.",
"example": [
"US",
"GB",
"DE"
],
"items": {
"maxLength": 2,
"minLength": 2,
"pattern": "^[A-Za-z]{2}$",
"type": "string"
},
"type": "array"
},
"cursor": {
"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",
"maxLength": 100,
"type": "string"
},
"departments": {
"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",
"example": [
"Sales",
"Marketing"
],
"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"
},
"type": "array"
},
"firstName": {
"description": "First name of the contact to search for",
"example": "John",
"maxLength": 100,
"type": "string"
},
"industries": {
"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",
"example": [
"Software Development"
],
"items": {
"maxLength": 200,
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"jobTitles": {
"description": "Job titles to search for (plural — pass an array)",
"example": [
"Engineering Manager",
"VP Engineering"
],
"items": {
"maxLength": 200,
"type": "string"
},
"type": "array"
},
"keywords": {
"description": "Keywords to search for in contact profiles (e.g., skills, technologies)",
"example": "Kubernetes, DevOps",
"maxLength": 500,
"type": "string"
},
"lastName": {
"description": "Last name of the contact to search for",
"example": "Doe",
"maxLength": 100,
"type": "string"
},
"limit": {
"default": 25,
"description": "Maximum number of contacts to return per page",
"example": 25,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 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",
"example": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"recentlyChangedJobs": {
"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",
"example": true,
"type": "boolean"
},
"seniorityLevels": {
"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",
"example": [
"CXO",
"Vice President",
"Director"
],
"items": {
"enum": [
"Owner / Partner",
"CXO",
"Vice President",
"Director",
"Experienced Manager",
"Entry Level Manager",
"Strategic",
"Senior",
"Entry Level",
"In Training"
],
"type": "string"
},
"type": "array"
},
"yearsAtCurrentCompany": {
"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",
"example": [
"3 to 5 years"
],
"items": {
"enum": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array"
},
"yearsInCurrentPosition": {
"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",
"example": [
"Less than 1 year"
],
"items": {
"enum": [
"Less than 1 year",
"1 to 2 years",
"3 to 5 years",
"6 to 10 years",
"More than 10 years"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"type": "array"
}
},
"type": "object"
},
{
"anyOf": [
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{},
{}
]
}
],
"description": "Request body"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "contacts-search",
"outputSchema": null
},
{
"description": "Check how many Saber API credits your organization has left in the current billing period.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "credits-get_balance",
"outputSchema": null
},
{
"description": "Get an enrichment run",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"runId": {
"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)$",
"type": "string"
}
},
"required": [
"runId"
],
"type": "object"
},
"name": "enrichment_runs-get",
"outputSchema": null
},
{
"description": "List enrichment runs",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"entityId": {
"description": "Exact company id; never matches contact runs.",
"type": "string"
},
"entityType": {
"enum": [
"company",
"contact"
],
"type": "string"
},
"fromDate": {
"description": "Include runs created at or after this instant.",
"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))$",
"type": "string"
},
"limit": {
"default": 20,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Repeatable. Unknown values are rejected with `422`.",
"items": {
"enum": [
"processing",
"completed",
"failed"
],
"type": "string"
},
"type": "array"
},
"toDate": {
"description": "Include runs created at or before this instant.",
"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))$",
"type": "string"
},
"type": {
"description": "Run type — `custom` or a prebuilt enrichment type.",
"enum": [
"custom",
"firmographics",
"funding",
"mna",
"open-jobs",
"tech-stack"
],
"type": "string"
}
},
"type": "object"
},
"name": "enrichment_runs-list",
"outputSchema": null
},
{
"description": "Create an enrichment template",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"answerType": {
"default": "open_text",
"description": "The expected format of the answer",
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contacts_generation",
"contact_posts",
"contact_engagements",
"json_schema"
],
"example": "open_text",
"type": "string"
},
"description": {
"description": "Optional description of what this template does",
"example": "Identifies which CRM system a company is using",
"maxLength": 1000,
"type": "string"
},
"name": {
"description": "User-friendly name for the template",
"example": "CRM Detection",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"outputSchema": {
"additionalProperties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\nSee CreateSignalRequest.outputSchema for full documentation.\n",
"properties": {},
"type": "object"
},
"qualificationCriteria": {
"additionalProperties": {},
"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",
"example": {
"ranges": [
{
"answerQualification": "poor",
"rangeEnd": 20,
"rangeStart": 0
},
{
"answerQualification": "neutral",
"rangeEnd": 50,
"rangeStart": 20
},
{
"answerQualification": "excellent",
"rangeEnd": 100,
"rangeStart": 50
}
]
},
"properties": {},
"type": "object"
},
"question": {
"description": "The research question to ask about companies",
"example": "Which CRM are they using?",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"weight": {
"description": "The importance/weight of the signal",
"enum": [
"important",
"nice_to_have",
"not_important"
],
"example": "important",
"type": "string"
}
},
"required": [
"name",
"question"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "enrichment_templates-create",
"outputSchema": null
},
{
"description": "Delete an enrichment template",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"templateId": {
"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)$",
"type": "string"
}
},
"required": [
"templateId"
],
"type": "object"
},
"name": "enrichment_templates-delete",
"outputSchema": null
},
{
"description": "Get an enrichment template",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"templateId": {
"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)$",
"type": "string"
}
},
"required": [
"templateId"
],
"type": "object"
},
"name": "enrichment_templates-get",
"outputSchema": null
},
{
"description": "List enrichment templates",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"includeDeleted": {
"default": false,
"description": "Include deleted templates in the response",
"type": "boolean"
},
"limit": {
"default": 20,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"name": "enrichment_templates-list",
"outputSchema": null
},
{
"description": "Update an enrichment template",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"answerType": {
"description": "The expected format of the answer",
"enum": [
"open_text",
"number",
"boolean",
"list",
"percentage",
"currency",
"url",
"contacts",
"contact_posts",
"contact_engagements",
"json_schema"
],
"example": "open_text",
"type": "string"
},
"description": {
"description": "Optional description of what this template does",
"example": "Identifies which CRM system a company is using",
"maxLength": 1000,
"type": "string"
},
"name": {
"description": "User-friendly name for the template",
"example": "CRM Detection",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"outputSchema": {
"additionalProperties": {},
"description": "JSON Schema defining the expected output structure. Required when answerType is \"json_schema\".\n",
"properties": {},
"type": "object"
},
"qualificationCriteria": {
"additionalProperties": {},
"description": "Qualification criteria mapping answer values based on answerType",
"properties": {},
"type": "object"
},
"question": {
"description": "The research question to ask about companies",
"example": "Which CRM are they using?",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"weight": {
"description": "The importance/weight of the signal",
"enum": [
"important",
"nice_to_have",
"not_important"
],
"example": "important",
"type": "string"
}
},
"type": "object"
},
"templateId": {
"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)$",
"type": "string"
}
},
"required": [
"templateId",
"__requestBody"
],
"type": "object"
},
"name": "enrichment_templates-update",
"outputSchema": null
},
{
"description": "List enrichment types",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "enrichment_types-list",
"outputSchema": null
},
{
"description": "Create a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"checks": {
"items": {
"additionalProperties": {},
"properties": {
"filters": {
"additionalProperties": {},
"description": "Signal checks — structured filters (type-specific).",
"properties": {},
"type": "object"
},
"kind": {
"enum": [
"enrichment",
"signal"
],
"type": "string"
},
"prompt": {
"description": "Signal checks — natural-language intent the AI turns into filters.",
"type": "string"
},
"templateId": {
"description": "Enrichment checks — the template holding the question.",
"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)$",
"type": "string"
},
"type": {
"description": "Signal checks — the occurrence type to watch for (verb-past vocabulary).",
"enum": [
"job_posted",
"social_posted",
"funding_raised",
"investment_made",
"ipo_announced",
"ipo_stage_changed",
"repo_engaged",
"ipo_rumoured",
"tender_published"
],
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"maxItems": 1,
"minItems": 1,
"type": "array"
},
"name": {
"maxLength": 200,
"type": "string"
},
"schedule": {
"additionalProperties": {},
"properties": {
"cronExpression": {
"description": "Alternative to frequency; minimum interval 24h.",
"type": "string"
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"timezone": {
"type": "string"
}
},
"type": "object"
},
"target": {
"additionalProperties": {},
"properties": {
"entity": {
"description": "List targets — what the list contains.",
"enum": [
"company",
"contact"
],
"type": "string"
},
"listId": {
"description": "List targets — the watched list.",
"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)$",
"type": "string"
},
"type": {
"enum": [
"list",
"market"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"webhook": {
"allOf": [
{
"additionalProperties": {},
"properties": {
"interval": {
"enum": [
"daily",
"weekly"
],
"type": "string"
},
"intervalSignalLimit": {
"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.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"url": {
"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.",
"format": "uri",
"type": "string"
}
},
"type": "object"
},
{
"additionalProperties": {},
"properties": {
"secret": {
"description": "Optional HMAC signing secret for deliveries; never echoed back.",
"maxLength": 200,
"type": "string",
"writeOnly": true
}
},
"type": "object"
}
],
"description": "Discovery monitors — delivery webhook."
}
},
"required": [
"checks"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "monitors-create",
"outputSchema": null
},
{
"description": "Create a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"type": {
"const": "webhook",
"description": "The action type discriminator",
"example": "webhook",
"type": "string"
},
"webhook": {
"additionalProperties": {},
"description": "Configuration for a webhook action.",
"properties": {
"destination": {
"description": "The URL to deliver webhook payloads to",
"example": "https://example.com/webhook",
"format": "uri",
"type": "string"
}
},
"required": [
"destination"
],
"type": "object"
}
},
"required": [
"type"
],
"type": "object"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"__requestBody"
],
"type": "object"
},
"name": "monitors-create_action",
"outputSchema": null
},
{
"description": "Delete a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-delete",
"outputSchema": null
},
{
"description": "Delete a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"actionId": {
"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)$",
"type": "string"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"actionId"
],
"type": "object"
},
"name": "monitors-delete_action",
"outputSchema": null
},
{
"description": "Get a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-get",
"outputSchema": null
},
{
"description": "Get a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"actionId": {
"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)$",
"type": "string"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"actionId"
],
"type": "object"
},
"name": "monitors-get_action",
"outputSchema": null
},
{
"description": "List monitors",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"kind": {
"enum": [
"watch",
"discovery"
],
"type": "string"
},
"limit": {
"default": 20,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"target": {
"enum": [
"list",
"market"
],
"type": "string"
}
},
"type": "object"
},
"name": "monitors-list",
"outputSchema": null
},
{
"description": "List monitor actions",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-list_actions",
"outputSchema": null
},
{
"description": "List a monitor's signals",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 20,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"monitorId": {
"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)$",
"type": "string"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-list_signals",
"outputSchema": null
},
{
"description": "Pause a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-pause",
"outputSchema": null
},
{
"description": "Pause a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"actionId": {
"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)$",
"type": "string"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"actionId"
],
"type": "object"
},
"name": "monitors-pause_action",
"outputSchema": null
},
{
"description": "Resume a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-resume",
"outputSchema": null
},
{
"description": "Resume a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"actionId": {
"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)$",
"type": "string"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"actionId"
],
"type": "object"
},
"name": "monitors-resume_action",
"outputSchema": null
},
{
"description": "Trigger a monitor run",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId"
],
"type": "object"
},
"name": "monitors-trigger",
"outputSchema": null
},
{
"description": "Update a monitor",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"checks": {
"description": "Discovery monitors — update the check's prompt/filters (type is immutable).",
"items": {
"additionalProperties": {},
"properties": {
"filters": {
"additionalProperties": {},
"description": "Signal checks — structured filters (type-specific).",
"properties": {},
"type": "object"
},
"kind": {
"enum": [
"enrichment",
"signal"
],
"type": "string"
},
"prompt": {
"description": "Signal checks — natural-language intent the AI turns into filters.",
"type": "string"
},
"templateId": {
"description": "Enrichment checks — the template holding the question.",
"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)$",
"type": "string"
},
"type": {
"description": "Signal checks — the occurrence type to watch for (verb-past vocabulary).",
"enum": [
"job_posted",
"social_posted",
"funding_raised",
"investment_made",
"ipo_announced",
"ipo_stage_changed",
"repo_engaged",
"ipo_rumoured",
"tender_published"
],
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"maxItems": 1,
"minItems": 1,
"type": "array"
},
"name": {
"maxLength": 200,
"type": "string"
},
"schedule": {
"additionalProperties": {},
"properties": {
"cronExpression": {
"description": "Alternative to frequency; minimum interval 24h.",
"type": "string"
},
"frequency": {
"enum": [
"daily",
"weekly",
"monthly"
],
"type": "string"
},
"timezone": {
"type": "string"
}
},
"type": "object"
},
"target": {
"additionalProperties": {},
"properties": {
"entity": {
"description": "List targets — what the list contains.",
"enum": [
"company",
"contact"
],
"type": "string"
},
"listId": {
"description": "List targets — the watched list.",
"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)$",
"type": "string"
},
"type": {
"enum": [
"list",
"market"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"webhook": {
"additionalProperties": {},
"properties": {
"interval": {
"enum": [
"daily",
"weekly"
],
"type": "string"
},
"intervalSignalLimit": {
"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.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"url": {
"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.",
"format": "uri",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"__requestBody"
],
"type": "object"
},
"name": "monitors-update",
"outputSchema": null
},
{
"description": "Update a monitor action",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"webhook": {
"additionalProperties": {},
"description": "Configuration for a webhook action.",
"properties": {
"destination": {
"description": "The URL to deliver webhook payloads to",
"example": "https://example.com/webhook",
"format": "uri",
"type": "string"
}
},
"required": [
"destination"
],
"type": "object"
}
},
"type": "object"
},
"actionId": {
"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)$",
"type": "string"
},
"monitorId": {
"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)$",
"type": "string"
}
},
"required": [
"monitorId",
"actionId",
"__requestBody"
],
"type": "object"
},
"name": "monitors-update_action",
"outputSchema": null
},
{
"description": "Get your organisation profile",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "organisation-get",
"outputSchema": null
},
{
"description": "Update your organisation profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"description": {
"additionalProperties": {},
"description": "Descriptive text fields for the organisation",
"properties": {
"general": {
"description": "General overview of the organisation",
"example": "Acme Corp builds enterprise software for logistics teams.",
"type": "string"
},
"products": {
"description": "Description of the organisation's products or services",
"example": "Route optimisation platform and real-time freight tracking.",
"type": "string"
},
"useCases": {
"description": "Key use cases the organisation addresses",
"example": "Reducing delivery costs for 3PL operators and e-commerce brands.",
"type": "string"
},
"valueProp": {
"description": "The organisation's core value proposition",
"example": "Cut logistics costs by 20% with AI-powered route optimisation.",
"type": "string"
}
},
"type": "object"
},
"name": {
"description": "New display name for the organisation",
"example": "Acme Corp",
"type": "string"
},
"website": {
"description": "New website domain for the organisation",
"example": "acme.com",
"type": "string"
}
},
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "organisation-update",
"outputSchema": null
},
{
"description": "Assign a profile to many objects at once",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"objectIds": {
"description": "Capped at 500 per request. Paginate larger lists by issuing\nmultiple requests.\n",
"example": [
"acme.com",
"stripe.com",
"framer.com"
],
"items": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"maxItems": 500,
"minItems": 1,
"type": "array"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
},
"profileId": {
"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)$",
"type": "string"
}
},
"required": [
"profileId",
"objectType",
"objectIds"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "scoring-assignment-bulk-create",
"outputSchema": null
},
{
"description": "Assign a profile to a single object",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"objectId": {
"description": "For `company`, the domain; for `contact`, the LinkedIn profile URL.",
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
},
"profileId": {
"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)$",
"type": "string"
}
},
"required": [
"profileId",
"objectType",
"objectId"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "scoring-assignment-create",
"outputSchema": null
},
{
"description": "Remove a profile assignment",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"assignmentId": {
"description": "Profile assignment UUID",
"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)$",
"type": "string"
}
},
"required": [
"assignmentId"
],
"type": "object"
},
"name": "scoring-assignment-delete",
"outputSchema": null
},
{
"description": "List profile assignments for an object",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"objectId": {
"description": "For `company` use the domain (e.g. `acme.com`); for `contact` use the LinkedIn profile URL",
"type": "string"
},
"objectType": {
"description": "Object type (`company` or `contact`)",
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"required": [
"objectType",
"objectId"
],
"type": "object"
},
"name": "scoring-assignment-list",
"outputSchema": null
},
{
"description": "Trigger score recomputation",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"objectIds": {
"description": "For `company`, domains; for `contact`, LinkedIn profile URLs.\nCapped at 500 per request — paginate larger lists.\n",
"items": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"maxItems": 500,
"minItems": 1,
"type": "array"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"required": [
"objectType",
"objectIds"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "scoring-compute",
"outputSchema": null
},
{
"description": "Create a scoring profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"example": "EMEA Enterprise",
"type": "string"
},
"profileType": {
"description": "Object type this profile will score",
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"required": [
"profileType",
"name"
],
"type": "object"
}
},
"required": [
"__requestBody"
],
"type": "object"
},
"name": "scoring-profile-create",
"outputSchema": null
},
{
"description": "Delete a scoring profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId"
],
"type": "object"
},
"name": "scoring-profile-delete",
"outputSchema": null
},
{
"description": "Get a scoring profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId"
],
"type": "object"
},
"name": "scoring-profile-get",
"outputSchema": null
},
{
"description": "List scoring profiles",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "scoring-profile-list",
"outputSchema": null
},
{
"description": "Update a scoring profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"example": "Companies with 1000+ headcount"
},
"name": {
"example": "Enterprise ICP",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId",
"__requestBody"
],
"type": "object"
},
"name": "scoring-profile-update",
"outputSchema": null
},
{
"description": "Delete a scoring rule",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
},
"ruleId": {
"description": "Scoring rule UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId",
"ruleId"
],
"type": "object"
},
"name": "scoring-rule-delete",
"outputSchema": null
},
{
"description": "List scoring rules for a profile",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId"
],
"type": "object"
},
"name": "scoring-rule-list",
"outputSchema": null
},
{
"description": "Upsert a scoring rule",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"__requestBody": {
"additionalProperties": {},
"description": "Request body",
"properties": {
"answerType": {
"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",
"enum": [
"boolean",
"number",
"percentage",
"currency",
"list"
],
"type": "string"
},
"dimension": {
"enum": [
"fit",
"urgency"
],
"type": "string"
},
"pointValues": {
"additionalProperties": {},
"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",
"example": {
"ranges": [
{
"max": 100,
"min": 0,
"points": 2
},
{
"max": 1000,
"min": 100,
"points": 10
},
{
"max": 100000,
"min": 1000,
"points": 25
}
]
},
"properties": {
"choices": {
"additionalProperties": {
"type": "number"
},
"description": "Used by `list` answer types. Map of allowed list value → points awarded if present in the answer.",
"example": {
"HubSpot": 8,
"None": -10,
"Salesforce": 10
},
"properties": {},
"type": "object"
},
"false": {
"description": "Points awarded when a boolean signal answers `false`. Used by `boolean` answer types.",
"example": -5,
"type": "number"
},
"mode": {
"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",
"enum": [
"additive",
"best-match",
"contains-all",
"contains-none",
"exact-match"
],
"example": "additive",
"type": "string"
},
"ranges": {
"description": "Used by `number`, `percentage`, and `currency` answer types. Upper bound is exclusive.",
"items": {
"additionalProperties": {},
"properties": {
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"points": {
"type": "number"
}
},
"required": [
"min",
"max",
"points"
],
"type": "object"
},
"type": "array"
},
"true": {
"description": "Points awarded when a boolean signal answers `true`. Used by `boolean` answer types.",
"example": 20,
"type": "number"
}
},
"type": "object"
},
"signalTemplateId": {
"type": "string"
}
},
"required": [
"signalTemplateId",
"dimension",
"answerType",
"pointValues"
],
"type": "object"
},
"profileId": {
"description": "Scoring profile UUID",
"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)$",
"type": "string"
}
},
"required": [
"profileId",
"__requestBody"
],
"type": "object"
},
"name": "scoring-rule-upsert",
"outputSchema": null
},
{
"description": "Read scores for one or more objects",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"objectId": {
"description": "Repeatable. For `company` use the domain; for `contact` use the LinkedIn profile URL.",
"items": {
"type": "string"
},
"type": "array"
},
"objectType": {
"enum": [
"company",
"contact"
],
"type": "string"
}
},
"required": [
"objectType",
"objectId"
],
"type": "object"
},
"name": "scoring-scores-get",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:31d96eff9ef71abf11c03ee98284195d4efe5b1341cb3d51a856ee9d17ac9626 | sha256sum