Creating a Signal
What is a Signal?
A Signal is an AI-powered research request that answers a specific question about a company or contact. Think of it as asking an AI research assistant to investigate and provide verified answers with sources.
When you create a signal, Saber's AI:
π Researches the target (company website, LinkedIn, public data sources)
π€ Analyzes the information using advanced AI models
β Verifies findings against multiple sources
π Structures the answer in your requested format
π Provides confidence scores and source citations
Signals support multiple answer types: text, numbers, booleans, lists, percentages, currency, URLs, and contacts.
Creating Signals
Company Signals analyze company domains to answer business intelligence questions like:
Technology stack and tools used
Company size, funding, and growth metrics
Market positioning and competitors
Products and services offered
Contact Signals analyze LinkedIn profiles to answer questions about individuals:
Professional interests and expertise
Career history and experience
Engagement and activity patterns
Communication preferences
Batch Creation allows you to efficiently create multiple signals at once using templates.
β This is the recommended way to create signals and get results instead of async + webhooks.
Creates a signal and waits synchronously for it to complete, returning the result in the same request. This endpoint blocks until the signal processing finishes or a timeout is reached.
Why Use the Sync Endpoint?
Advantages over async + webhooks:
β Get results immediately in one request
β No webhook hosting required
β No polling implementation needed
β Simpler integration
β Better for synchronous workflows
How It Works
Send your signal creation request (same payload as regular POST /v1/companies/signals)
The endpoint creates the signal and polls for completion
Returns the completed signal with results when processing finishes
If timeout is reached, returns the latest status (processing/pending)
Timeout Configuration
Default timeout: Configured per API key
Max timeout: 300 seconds (5 minutes)
Custom timeout: Use
X-Sbr-Timeout-Secheader to set custom timeout (up to max)Error on timeout: Use
X-Sbr-Timeout-Error: trueheader to return 408 on timeout instead of latest status
Response Codes
200 OK- Signal completed successfully202 Accepted- Timeout reached, signal still processing408 Request Timeout- Timeout reached (when X-Sbr-Timeout-Error: true)
Using with Templates
Use signalTemplateId instead of defining questions inline for standardized research:
Templates let you reuse research questions, qualification criteria, and answer types across multiple companies. Create templates via POST /v1/companies/signals/templates.
API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
Custom timeout in seconds (max 300). Defaults to your API key's configured timeout.
120If "true", returns 408 Request Timeout on timeout instead of 202 with latest status
falsePossible values: The company domain to research (e.g., "acme.com")
acme.comPattern: ^[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])?)*$The research question to ask about the company
What is Acme Corp's main business focus?The expected format of the answer
open_textExample: open_textPossible values: Optional webhook URL to receive notifications when processing completes
https://myapp.com/webhooks/signalsThe importance/weight of the signal
importantPossible values: Optional signal template ID to use. When provided, the template configuration (question, answerType, weight, qualificationCriteria) will be used. The system always resolves to the latest active version of the template. Only the domain parameter is required when using a template.
a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6dForce 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.
falseExample: falseControls how strictly Saber verifies answers before responding.
- strict: Only returns answers backed by verified sources (primary sources or trusted secondary sources like Crunchbase, PitchBook). Returns null when information is unavailable.
- lenient: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.
strictExample: strictPossible values: Signal completed successfully
Timeout reached - signal still processing
Bad Request - Invalid input
Unauthorized - Invalid or missing API key
Request Timeout - Signal processing exceeded timeout (only when X-Sbr-Timeout-Error header is set to true)
Too Many Requests - Rate limit exceeded
Internal Server Error
Submit a domain and question to create a new research signal. The AI will analyze the domain and provide a structured answer based on the specified answer type.
When to Use This Endpoint
Use this endpoint for event-driven architectures where you need webhook notifications. For simpler integrations, use the /v1/companies/signals/sync endpoint (recommended) which returns results immediately.
Webhooks
Configure webhooks by including a webhookUrl parameter in your request.
Webhook events:
signal.completed- Signal processing finished successfullysignal.failed- Signal processing failed
Webhook security: All webhooks include HMAC-SHA256 signatures in the X-Webhook-Signature header for verification.
Webhook reliability:
Failed deliveries are retried up to 25 times with exponential backoff
Webhook requests timeout after 30 seconds
Your endpoint should respond with 2xx status code
Caching Behavior
Your response will be cached for up to 12 hours by default, unless you set the forceRefresh flag to true.
Cache is based on the company domain and question, so if you change the question or domain, a totally new signal will be created. We will not send you the webhook if you hit the cache, even if the webhook URL in the payload is different from the original request.
Instead you will receive the latest status of the signal immediately in the response.
Using with Templates
Use signalTemplateId instead of defining questions inline for standardized research:
Templates let you reuse research questions, qualification criteria, and answer types across multiple companies. Create templates via POST /v1/companies/signals/templates.
API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
The company domain to research (e.g., "acme.com")
acme.comPattern: ^[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])?)*$The research question to ask about the company
What is Acme Corp's main business focus?The expected format of the answer
open_textExample: open_textPossible values: Optional webhook URL to receive notifications when processing completes
https://myapp.com/webhooks/signalsThe importance/weight of the signal
importantPossible values: Optional signal template ID to use. When provided, the template configuration (question, answerType, weight, qualificationCriteria) will be used. The system always resolves to the latest active version of the template. Only the domain parameter is required when using a template.
a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6dForce 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.
falseExample: falseControls how strictly Saber verifies answers before responding.
- strict: Only returns answers backed by verified sources (primary sources or trusted secondary sources like Crunchbase, PitchBook). Returns null when information is unavailable.
- lenient: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.
strictExample: strictPossible values: Signal created successfully
Bad Request - Invalid input
Unauthorized - Invalid or missing API key
Too Many Requests - Rate limit exceeded
Internal Server Error
Submit multiple signals and domains to create signals using a Cartesian product pattern. Each signal is combined with each domain to create individual signals.
Two ways to create batch signals:
Inline Questions: Define questions directly in the request for ad-hoc research without creating templates
Using Templates (recommended for reusability): Reference pre-created templates by ID for consistent, reusable questions
Cartesian Product Logic:
If you submit 2 templates and 3 domains, the system creates 6 signals (2 Γ 3)
Maximum 100 resulting signals allowed (templates Γ domains β€ 100)
Signals beyond the 100 limit will throw an error
Partial Failure Handling:
Individual signal failures don't block other signals from processing
Each signal in the response includes its own status (accepted or failed)
Returns 202 if at least one signal is scheduled successfully
Returns 422 if all signals failed to be scheduled
Processing:
All signals are processed asynchronously
No guarantee of processing order
Use the
/v1/companies/signals/syncendpoint (recommended) to retrieve results as they complete
Automatic Summary Generation:
Set
generateSummaryOnCompletetotrueto automatically generate summaries when all signals in the batch completeSummaries are generated per domain (one summary per unique domain in the batch)
Summary generation is triggered automatically once all signals for a domain have completed
Use the
/v1/companies/signals/summariesendpoint to retrieve generated summaries
API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
Array of company domains to research. Each domain will be combined with each signal template using Cartesian product logic. The total resulting signals (len(signals) Γ len(domains)) must not exceed 100.
acme.comWhether to automatically generate a summary when all signals in the batch are completed.
When set to true, a summary will be automatically generated for each unique domain in the batch
once all signals for that domain have completed processing.
falseExample: falseBatch accepted - At least one signal successfully scheduled
Bad Request - Invalid input
Unauthorized - Invalid or missing API key
Unprocessable Entity - All signals in batch failed to be scheduled
Too Many Requests - Rate limit exceeded
Internal Server Error
β This is the recommended way to create contact signals and get results instead of async + webhooks.
Creates a contact signal and waits synchronously for it to complete, returning the result in the same request. Works identically to the company signals sync endpoint but for contact-based signals.
Why Use the Sync Endpoint?
Advantages over async + webhooks:
β Get results immediately in one request
β No webhook hosting required
β No polling implementation needed
β Simpler integration
β Better for synchronous workflows
How It Works
Send your signal creation request (same payload as regular POST /v1/contacts/signals)
The endpoint creates the signal and polls for completion
Returns the completed signal with results when processing finishes
If timeout is reached, returns the latest status (processing/pending)
Timeout Configuration
Default timeout: Configured per API key
Max timeout: 300 seconds (5 minutes)
Custom timeout: Use
X-Sbr-Timeout-Secheader to set custom timeout (up to max)Error on timeout: Use
X-Sbr-Timeout-Error: trueheader to return 408 on timeout instead of latest status
Response Codes
200 OK- Signal completed successfully202 Accepted- Timeout reached, signal still processing408 Request Timeout- Timeout reached (when X-Sbr-Timeout-Error: true)
Using with Templates
Use signalTemplateId instead of defining questions inline for standardized research:
Templates let you reuse research questions, qualification criteria, and answer types across multiple contacts. Create templates via POST /v1/companies/signals/templates.
API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
Custom timeout in seconds (max 300). Defaults to your API key's configured timeout.
120If "true", returns 408 Request Timeout on timeout instead of 202 with latest status
falsePossible values: The contact profile URL to research (e.g., "https://linkedin.com/in/johndoe")
https://linkedin.com/in/johndoeThe research question to ask about the contact
What are this person's main professional interests?The expected format of the answer
open_textExample: open_textPossible values: Optional webhook URL to receive notifications when processing completes
https://myapp.com/webhooks/signalsThe importance/weight of the signal
importantPossible values: Optional signal template ID to use
a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6dControls how strictly Saber verifies answers before responding.
- strict: Only returns answers backed by verified sources (primary sources or trusted secondary sources like Crunchbase, PitchBook). Returns null when information is unavailable.
- lenient: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.
strictExample: strictPossible values: Signal completed successfully
Timeout reached - signal still processing
Bad Request - Invalid input
Unauthorized - Invalid or missing API key
Request Timeout - Signal processing exceeded timeout (only when X-Sbr-Timeout-Error header is set to true)
Too Many Requests - Rate limit exceeded
Internal Server Error
Submit a LinkedIn URL and question to create a new research signal for an individual contact. The AI will analyze the contact's profile and provide a structured answer based on the specified answer type.
Contact signals work similarly to company signals but focus on individual contacts using their LinkedIn profile URLs.
When to Use This Endpoint
Use this endpoint for event-driven architectures where you need webhook notifications. For simpler integrations, use the /v1/contacts/signals/sync endpoint (recommended) which returns results immediately.
Webhooks
Configure webhooks by including a webhookUrl parameter in your request.
Webhook events:
signal.completed- Signal processing finished successfullysignal.failed- Signal processing failed
Webhook security: All webhooks include HMAC-SHA256 signatures in the X-Webhook-Signature header for verification.
Webhook reliability:
Failed deliveries are retried up to 25 times with exponential backoff
Webhook requests timeout after 30 seconds
Your endpoint should respond with 2xx status code
Using with Templates
Use signalTemplateId instead of defining questions inline for standardized research:
Templates let you reuse research questions, qualification criteria, and answer types across multiple contacts. Create templates via POST /v1/companies/signals/templates.
Note: Contact signals currently return placeholder data and will be fully implemented in a future release.
API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
The contact profile URL to research (e.g., "https://linkedin.com/in/johndoe")
https://linkedin.com/in/johndoeThe research question to ask about the contact
What are this person's main professional interests?The expected format of the answer
open_textExample: open_textPossible values: Optional webhook URL to receive notifications when processing completes
https://myapp.com/webhooks/signalsThe importance/weight of the signal
importantPossible values: Optional signal template ID to use
a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6dControls how strictly Saber verifies answers before responding.
- strict: Only returns answers backed by verified sources (primary sources or trusted secondary sources like Crunchbase, PitchBook). Returns null when information is unavailable.
- lenient: Allows logical inference and best-effort estimates when direct evidence is missing. Uses industry benchmarks, logical correlates, and quantitative metrics.
strictExample: strictPossible values: Contact signal created successfully
Bad Request - Invalid input
Unauthorized - Invalid or missing API key
Too Many Requests - Rate limit exceeded
Internal Server Error
Last updated