Using Signals API
List company signals
Retrieve all signals with optional filtering by domain or companyId, pagination and filtering. Results are sorted by creation date (latest first).
Note: For creating signals and getting results in one step, we recommend using the
/v1/companies/signals/sync endpoint instead, which returns the result directly.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
Filter signals by company domain (e.g., "acme.com")
^[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])?)*$Filter signals by company ID
Maximum number of results per page
251 <= value <= 25Number of results to skip for pagination
00 <= valueFilter signals completed on or after this date (RFC3339 format)
date-timeFilter signals completed on or before this date (RFC3339 format)
date-timeFilter by signal status (can be specified multiple times for multiple statuses)
Filter signals by subscription ID (UUID of the signal subscription that triggered execution)
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/companies/signals?domain=acme.com&companyId=comp_abc123&limit=25&offset=0&fromDate=2024-01-01T00%3A00%3A00Z&toDate=2024-12-31T23%3A59%3A59Z&status=completed&subscriptionId=a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"{ "results": [ { "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250", "status": "completed", "domain": "acme.com", "question": "What is their main product?", "createdAt": "2024-01-15T10:30:00Z", "completedAt": "2024-01-15T10:32:00Z", "answer": { "type": "open_text", "openText": { "value": "Enterprise CRM software" } }, "confidence": 0.95 }, { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "status": "processing", "domain": "acme.com", "question": "How many employees?", "createdAt": "2024-01-15T09:00:00Z" } ], "total": 42, "limit": 25, "offset": 0, "count": 2}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}List signal executions for a subscription
Retrieve all signal executions that were triggered by a specific signal subscription.
Returns the same paginated response as GET /v1/companies/signals but filtered to a single subscription.
Results are sorted by creation date (latest first).
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
The UUID of the signal subscription
uuidQuery Parameters
Filter signals by company domain
Filter signals by company ID
Maximum number of results per page
251 <= value <= 25Number of results to skip for pagination
00 <= valueFilter signals completed on or after this date (RFC3339 format)
date-timeFilter signals completed on or before this date (RFC3339 format)
date-timeFilter by signal status (can be specified multiple times)
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/companies/signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/logs?domain=acme.com&companyId=b23c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e&limit=25&offset=0&fromDate=2024-01-01T00%3A00%3A00Z&toDate=2024-12-31T23%3A59%3A59Z&status=completed"{ "results": [ { "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250", "status": "processing", "question": "What is Acme Corp's main business focus?", "answerType": "boolean", "createdAt": "2024-01-15T10:30:00Z", "signalType": "COMPANY", "domain": "acme.com", "completedAt": "2024-01-15T10:32:15Z", "answer": { "type": "open_text", "open_text": { "value": "Acme Corp is a leading provider of enterprise software solutions" } }, "reasoning": "Based on the company's website and public information, Acme Corp specializes in enterprise software.", "confidence": 0.95, "sources": [ { "url": "https://acme.com/about", "title": "About Acme Corp", "snippet": "Leading provider of enterprise software..." } ], "metadata": { "companyName": "Acme Corp", "processingTimeMs": 45200, "connectors": { "salesNavigator": { "status": "ok" } } }, "error": "LinkedIn data is currently unavailable due to rate limits. Please try again later.", "errorCode": "LINKEDIN_RATE_LIMIT_EXCEEDED", "errorAction": "You can: (1) Set connectors.salesNavigator.enabled=\"off\" to skip LinkedIn data, (2) Add more LinkedIn connectors, or (3) Try again in 24 hours when rate limits reset.", "changeContext": { "changeType": "CHANGED", "changeDelta": { "type": "LIST", "added": [ "Enterprise" ], "removed": [ "Starter" ] }, "previousSignalId": "feb2e1c1-dc67-49f6-a459-62383c67daf5", "changedFields": [ "certifications", "contacts", "headline" ], "addedFields": [ "contacts", "certifications" ], "updatedFields": [ "headline", "engagement.reactionCount" ], "removedFields": [ "positions" ] }, "verificationMode": "strict", "company": { "id": "comp_abc123", "name": "Acme Corp", "domain": "acme.com", "industry": "Software", "website": "https://acme.com", "size": "51-200", "type": "private", "founded": 2015, "city": "San Francisco", "state": "California", "countryCode": "US", "handle": "acme-corp", "linkedInId": 12345678, "linkedInUrl": "https://www.linkedin.com/company/acme-corp", "linkedInFollowers": 5200, "employeeCount": 150, "description": "Acme Corp is a leading provider of enterprise software solutions.", "logoUrl": "https://media.licdn.com/dms/image/acme-logo.png" } } ], "total": 42, "limit": 25, "offset": 0, "count": 25}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get a company signal by ID
Retrieve the current status and results of a signal. If the signal is completed, the response will include the AI-generated answer, confidence score, and sources.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
The unique identifier of the signal (UUID format)
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/companies/signals/e45c1dc4-d422-4b51-956b-cb6d3ddaf250"{ "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250", "status": "processing", "domain": "acme.com", "question": "What is Acme Corp's main business focus?", "createdAt": "2024-01-15T10:30:00Z"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": "NOT_FOUND", "message": "Signal not found or access denied"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get contact research by external ID
Retrieve a contact research request by external ID and external source. This endpoint allows you to look up contact research requests using identifiers from external systems (e.g., HubSpot contact ID).
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
The external identifier of the contact research request (e.g., HubSpot contact ID)
1 <= length <= 100The source system that provided the external ID (e.g., "hubspot")
1 <= length <= 50Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/contacts/research?externalId=hubspot_12345&externalSource=hubspot"{ "id": "cr_abc123def456", "status": "processing", "firstName": "John", "lastName": "Doe", "companyName": "Acme Corp", "companyDomain": "acme.com", "createdAt": "2024-01-15T10:30:00Z"}{ "error": "BAD_REQUEST", "message": "Invalid JSON in request body"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": "NOT_FOUND", "message": "Contact research not found or access denied"}{ "error": "VALIDATION_ERROR", "message": "Query parameters externalId and externalSource are required"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Start a contact research job
Submit contact details to create a new contact research request. The AI will gather information from LinkedIn, email services, and other data sources to provide comprehensive contact insights.
The research will be processed asynchronously. Use the returned contact research ID to check status via the GET endpoint, or configure a webhook to receive completion notifications.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
First name of the contact
1 <= length <= 100Last name of the contact
1 <= length <= 100Name of the contact's company
1 <= length <= 200Company domain (e.g., "acme.com")
^[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])?)*$1 <= length <= 253Contact profile URL of the contact (e.g., LinkedIn or other professional profile, optional)
urilength <= 500LinkedIn Sales Navigator profile URL of the contact (optional)
urilength <= 500Job title of the contact (optional)
1 <= length <= 200Optional webhook URL to receive notifications when processing completes
urilength <= 2048Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/contacts/research" \ -H "Content-Type: application/json" \ -d '{ "firstName": "John", "lastName": "Doe", "companyName": "Acme Corp", "companyDomain": "acme.com", "jobTitle": "VP of Sales" }'{ "id": "cr_abc123def456", "status": "processing", "createdAt": "2024-01-15T10:30:00Z"}{ "error": "BAD_REQUEST", "message": "Invalid JSON in request body"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": "VALIDATION_ERROR", "message": "Invalid request body", "details": [ { "field": "companyDomain", "message": "must be a valid hostname" } ]}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get contact research by ID
Retrieve a contact research request by ID, including its status and results if completed. This endpoint returns the current state of the research request.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
The unique identifier of the contact research request
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/v1/contacts/research/cr_abc123def456"{ "id": "cr_abc123def456", "status": "processing", "firstName": "John", "lastName": "Doe", "companyName": "Acme Corp", "companyDomain": "acme.com", "createdAt": "2024-01-15T10:30:00Z"}{ "error": "NOT_FOUND", "message": "Contact research not found or access denied"}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Search contacts with LinkedIn Sales Navigator
Search for contacts using LinkedIn Sales Navigator. Optionally scoped to one or more companies via companyLinkedInUrls. When multiple URLs are provided, each company is searched separately and results are merged and deduplicated.
Pagination: Use limit (default 25, max 100) and offset (default 0) in the request body
to page through results. The response includes total, limit, offset, and hasMore
to support cursor-free pagination.
Requirements:
- At least one search parameter must be provided:
companyLinkedInUrls,firstName,lastName,jobTitles,keywords,countries,departments, orseniorityLevels. - LinkedIn Sales Navigator connection is required for the API key owner
Response:
- If Sales Navigator is not connected, returns
salesNavConnected: falsewith empty contacts - If connected, returns matching contacts with profile information and pagination metadata
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueLinkedIn 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.
First name of the contact to search for
length <= 100Last name of the contact to search for
length <= 100Job titles to search for (plural — pass an array)
Keywords to search for in contact profiles (e.g., skills, technologies)
length <= 500Countries to filter contacts by location. Must be ISO 3166-1 alpha-2 codes (e.g., "US", "GB", "DE") — full country names are not accepted.
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.
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.
Maximum number of contacts to return per page
251 <= value <= 100Zero-based offset for pagination
00 <= valueResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/contacts/search" \ -H "Content-Type: application/json" \ -d '{ "companyLinkedInUrls": [ "https://linkedin.com/company/google" ], "jobTitles": [ "Engineering Manager", "VP Engineering" ], "countries": [ "US" ] }'{ "items": [ { "firstName": "John", "lastName": "Doe", "fullName": "John Doe", "role": "Engineering Manager", "linkedInSalesNavigatorProfileUrl": "https://www.linkedin.com/sales/lead/ACwAAABOW1gBQZCU123", "avatar": "https://media.licdn.com/...", "location": "San Francisco, California" }, { "firstName": "Jane", "lastName": "Smith", "fullName": "Jane Smith", "role": "VP of Engineering", "linkedInSalesNavigatorProfileUrl": "https://www.linkedin.com/sales/lead/ACwAAABOW1gBQZCU456", "location": "New York, New York" } ], "total": 150, "limit": 25, "offset": 0, "hasMore": true, "salesNavConnected": true}{ "error": { "type": "BAD_REQUEST", "code": "BAD_REQUEST", "message": "Invalid request body", "requestId": "e69ed773-2674-4dca-be61-886d6698f360" }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "requestId": "e69ed773-2674-4dca-be61-886d6698f360" }}{ "statusCode": 429, "error": "Too Many Requests", "message": "Rate limit exceeded", "retryAfter": 45}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}List contact signals
Retrieve all contact signals with optional filtering by LinkedIn URL, pagination and filtering. Results are sorted by creation date (latest first).
Note: For creating contact signals and getting results in one step, we recommend using the
/v1/contacts/signals/sync endpoint instead, which returns the result directly.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
Filter signals by contact profile URL (LinkedIn or other professional profile)
uriMaximum number of results per page
251 <= value <= 25Number of results to skip for pagination
00 <= valueResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/contacts/signals?contactProfileUrl=https%3A%2F%2Flinkedin.com%2Fin%2Fjohndoe&limit=25&offset=0"{ "results": [ { "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250", "status": "processing", "question": "What is Acme Corp's main business focus?", "answerType": "boolean", "createdAt": "2024-01-15T10:30:00Z", "signalType": "COMPANY", "domain": "acme.com", "completedAt": "2024-01-15T10:32:15Z", "answer": { "type": "open_text", "open_text": { "value": "Acme Corp is a leading provider of enterprise software solutions" } }, "reasoning": "Based on the company's website and public information, Acme Corp specializes in enterprise software.", "confidence": 0.95, "sources": [ { "url": "https://acme.com/about", "title": "About Acme Corp", "snippet": "Leading provider of enterprise software..." } ], "metadata": { "companyName": "Acme Corp", "processingTimeMs": 45200, "connectors": { "salesNavigator": { "status": "ok" } } }, "error": "LinkedIn data is currently unavailable due to rate limits. Please try again later.", "errorCode": "LINKEDIN_RATE_LIMIT_EXCEEDED", "errorAction": "You can: (1) Set connectors.salesNavigator.enabled=\"off\" to skip LinkedIn data, (2) Add more LinkedIn connectors, or (3) Try again in 24 hours when rate limits reset.", "changeContext": { "changeType": "CHANGED", "changeDelta": { "type": "LIST", "added": [ "Enterprise" ], "removed": [ "Starter" ] }, "previousSignalId": "feb2e1c1-dc67-49f6-a459-62383c67daf5", "changedFields": [ "certifications", "contacts", "headline" ], "addedFields": [ "contacts", "certifications" ], "updatedFields": [ "headline", "engagement.reactionCount" ], "removedFields": [ "positions" ] }, "verificationMode": "strict", "company": { "id": "comp_abc123", "name": "Acme Corp", "domain": "acme.com", "industry": "Software", "website": "https://acme.com", "size": "51-200", "type": "private", "founded": 2015, "city": "San Francisco", "state": "California", "countryCode": "US", "handle": "acme-corp", "linkedInId": 12345678, "linkedInUrl": "https://www.linkedin.com/company/acme-corp", "linkedInFollowers": 5200, "employeeCount": 150, "description": "Acme Corp is a leading provider of enterprise software solutions.", "logoUrl": "https://media.licdn.com/dms/image/acme-logo.png" } } ], "total": 0, "limit": 0, "offset": 0, "count": 0}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get a contact signal by ID
Retrieve the current status and results of a contact signal. If the signal is completed, the response will include the AI-generated answer, confidence score, and sources.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
The unique identifier of the contact signal (UUID format)
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/contacts/signals/e45c1dc4-d422-4b51-956b-cb6d3ddaf250"{ "id": "e45c1dc4-d422-4b51-956b-cb6d3ddaf250", "status": "completed", "contactProfileUrl": "https://linkedin.com/in/johndoe", "question": "What are this person's main professional interests?", "createdAt": "2024-01-15T10:30:00Z", "completedAt": "2024-01-15T10:32:15Z", "answer": { "type": "open_text", "openText": { "value": "Software engineering, AI/ML, and developer tools" } }, "reasoning": "Based on LinkedIn profile analysis, this person regularly engages with content about software engineering and AI/ML topics.", "confidence": 0.9, "sources": [ { "url": "https://linkedin.com/in/johndoe", "title": "John Doe - LinkedIn", "snippet": "Passionate about building AI-powered developer tools..." } ]}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}Get remaining credit balance
Returns the remaining credits balance for your organization.
Use this endpoint to check how many credits you have available before running large batches or to monitor usage programmatically.
What Are Credits?
Each API call that generates a signal consumes credits:
- Company signal (
POST /v1/companies/signals/sync) — consumes 1 credit per signal - Contact signal (
POST /v1/contacts/signals/sync) — consumes 1 credit per signal - Batch signals — consumes 1 credit per signal in the batch
- Read-only operations (listing, getting, templates) — free, no credits consumed
Credits reset at the start of each billing period.
When to Use This Endpoint
- Before large batches: Check that you have enough credits before submitting a bulk request
- Monitoring dashboards: Poll periodically to display current usage
- Conditional logic: Skip signal generation if credits are exhausted
Example
curl https://api.saber.app/v1/credits \ -H "Authorization: Bearer YOUR_API_KEY"Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/credits"{ "remainingCredits": 58}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}{ "error": { "type": "VALIDATION", "code": "VALIDATION_ERROR", "message": "validation failed for 'departments': invalid value: Engineering Ops", "errorCode": "string", "errorAction": "string", "details": {}, "requestId": "e69ed773-2674-4dca-be61-886d6698f360", "fields": [ { "field": "domain", "message": "'domain' must be a valid hostname (e.g., 'example.com') without protocol (https://) or path" } ], "debug": { "cause": "string" } }}