Market Signals

List all market signal subscriptions for your organization

GET
/v1/market-signals/subscriptions

Retrieve a paginated list of market signal subscriptions. By default, deleted subscriptions are excluded. Set includeDeleted=true to include them.

Results are sorted by creation date (latest first).

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Query Parameters

limit?integer

Maximum number of subscriptions to return (1-100, default 20)

Default20
Range1 <= value <= 100
offset?integer

Number of subscriptions to skip for pagination (default 0)

Default0
Range0 <= value
includeDeleted?boolean

Include soft-deleted subscriptions in the response

Defaultfalse

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/v1/market-signals/subscriptions"
{  "items": [    {      "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",      "organizationId": "org_123",      "type": "JOB_POSTS",      "name": "DevOps hiring tracker",      "status": "active",      "prompt": "Find companies hiring machine learning engineers",      "filters": {},      "webhookUrl": "https://myapp.com/webhooks/market-signals",      "intervalSignalLimit": 500,      "interval": "daily",      "createdAt": "2024-06-15T10:00:00Z",      "updatedAt": "2024-06-15T10:00:00Z"    }  ],  "total": 5,  "limit": 20,  "offset": 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"    }  }}

Create a market signal subscription to monitor job posts, LinkedIn posts, fundraising, investments, or IPOs

POST
/v1/market-signals/subscriptions

Create a subscription that continuously monitors external data sources and delivers matching signals to your webhook. Subscriptions run on a configurable polling interval (daily or weekly) and automatically detect and deliver new signals as they appear.


Subscription Types

TypeDescriptionData Source
JOB_POSTSMonitor new job postings matching your criteriaJob posting aggregators
LINKEDIN_POSTMonitor LinkedIn posts matching keyword filtersLinkedIn (requires Sales Navigator)
FUND_RAISEDMonitor fund closings and fundraising eventsWeb scraping + SEC EDGAR
RECENT_INVESTMENTMonitor recent investment and funding roundsWeb scraping + SEC EDGAR
IPOMonitor IPO and public listing announcementsWeb scraping + SEC EDGAR

Filter Modes

Filters can be provided in three ways:

  1. Prompt only (JOB_POSTS): Provide a natural language prompt and the AI generates complete filters
  2. Prompt + filters (JOB_POSTS): Provide both; the AI augments your filters with prompt intent
  3. Filters only: Provide structured filters directly (required for LINKEDIN_POST)

Webhook Delivery

Matched signals are batched and delivered to your webhookUrl on each polling interval. Each delivery includes an array of signal objects with metadata, payload, and confidence scores. Use webhookSecret to verify webhook signatures via HMAC-SHA256.


LinkedIn Post Requirements

LINKEDIN_POST subscriptions require a connected LinkedIn Sales Navigator account. If no connector is found, the request returns an error with setup instructions.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

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.

type*string

The type of market signal to monitor. Determines which data sources are polled and which filter schema is accepted.

Value in"JOB_POSTS" | "LINKEDIN_POST" | "FUND_RAISED" | "RECENT_INVESTMENT" | "IPO"
name?string

Optional display name for the subscription

Lengthlength <= 200
prompt?string

Natural language prompt for AI-based filter generation (JOB_POSTS only). When provided without filters, the AI generates complete filters from the prompt. When provided with filters, the AI augments the filters with prompt intent. Not yet supported for LINKEDIN_POST.

filters?

Subscription filters. The schema depends on the type field:

JOB_POSTS filters:

  • titleKeywords (string[]): Natural language title matching
  • excludeTitleKeywords (string[]): Title exclusions
  • titlePatterns (string[]): Regex patterns for job titles
  • excludeTitlePatterns (string[]): Regex exclusion patterns for titles
  • descriptionKeywords (string[]): Description keyword matching
  • excludeDescriptionKeywords (string[]): Description exclusions
  • descriptionPatterns (string[]): Regex patterns for descriptions
  • excludeDescriptionPatterns (string[]): Regex exclusion patterns for descriptions
  • countries (string[]): ISO country codes for job location
  • seniority (string[]): Seniority levels (c_level, staff, senior, mid_level, junior)
  • technologySlugs (string[]): Required technologies
  • minSalaryUsd (number): Minimum annual salary in USD
  • maxSalaryUsd (number): Maximum annual salary in USD
  • remote (boolean): Filter for remote jobs only
  • companyDomains (string[]): Specific company domains to monitor
  • excludeCompanyDomains (string[]): Company domains to exclude
  • companyNames (string[]): Partial match company names
  • excludeCompanyNames (string[]): Company names to exclude
  • minEmployees (number): Minimum company size
  • maxEmployees (number): Maximum company size
  • companyCountries (string[]): Company HQ country codes
  • companyTechnologySlugs (string[]): Company tech stack filter
  • excludeRecruitingAgencies (boolean): Filter out staffing agencies
  • fundingStages (string[]): Funding stages (seed, series_a, series_b, etc.)
  • industryIds (string[]): LinkedIn industry IDs to include
  • excludeIndustryIds (string[]): LinkedIn industry IDs to exclude
  • promptFilter (string): AI-based relevance scoring prompt
  • maxLookbackDays (number): How far back to look in days

LINKEDIN_POST filters:

  • keywordsAll (string[]): Boolean AND keywords
  • keywordsAny (string[]): Boolean OR keywords
  • keywordsNone (string[]): Boolean NOT keywords
  • promptFilter (string): AI-based content + persona filtering prompt
  • maxLookbackDays (number): Lookback period in days

FUND_RAISED / RECENT_INVESTMENT / IPO filters (shared):

  • searchQueries (string[]): Custom search queries
  • keywords (string[]): Keywords appended to default queries
  • excludeKeywords (string[]): Excluded keywords
  • countries (string[]): Geographic filtering (reserved)
  • minAmountUsd (number): Minimum deal size (reserved)
  • maxLookbackDays (number): Lookback period in days
  • promptFilter (string): AI-based relevance scoring prompt (reserved)

Required for LINKEDIN_POST. Optional for JOB_POSTS when prompt is provided.

webhookUrl*string

URL to receive webhook notifications when new signals are matched

Formaturi
Lengthlength <= 2048
webhookSecret?string

Optional secret for HMAC-SHA256 webhook signature verification

intervalSignalLimit?integer

Maximum number of signals to deliver per polling interval (1-10000, default 500)

Default500
Range1 <= value <= 10000
interval?string

Polling interval for checking new signals

Default"daily"
Value in"daily" | "weekly"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/market-signals/subscriptions" \  -H "Content-Type: application/json" \  -d '{    "type": "JOB_POSTS",    "name": "DevOps hiring in US tech",    "filters": {      "titleKeywords": [        "DevOps Engineer",        "Site Reliability Engineer"      ],      "countries": [        "US"      ],      "minEmployees": 50,      "maxEmployees": 500,      "excludeRecruitingAgencies": true    },    "webhookUrl": "https://myapp.com/webhooks/market-signals",    "interval": "daily",    "intervalSignalLimit": 100  }'
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "AI/ML hiring startups",  "status": "active",  "prompt": "Find companies hiring machine learning engineers at seed to Series B startups in Europe",  "filters": {    "type": "JOB_POSTS",    "titleKeywords": [      "Machine Learning Engineer",      "ML Engineer",      "AI Engineer"    ],    "countries": [      "DE",      "FR",      "GB",      "NL",      "SE"    ],    "fundingStages": [      "seed",      "series_a",      "series_b"    ]  },  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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": "LINKEDIN_CONNECTOR_REQUIRED",  "message": "No LinkedIn / Sales Navigator connector found for this organization. Please connect using the Saber Chrome extension."}
{  "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 market signal subscription by ID

GET
/v1/market-signals/subscriptions/{subscriptionId}

Retrieve a single market signal subscription including its filter configuration and status.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription

Formatuuid

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "DevOps hiring tracker",  "status": "active",  "prompt": "Find companies hiring machine learning engineers",  "filters": {},  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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"    }  }}

Update a market signal subscription

PATCH
/v1/market-signals/subscriptions/{subscriptionId}

Partially update a subscription's configuration. All fields are optional; only provided fields are updated. The subscription type is immutable and cannot be changed after creation.

When filters or webhook configuration changes, the active polling schedule is automatically refreshed. When the polling interval changes, the schedule is recreated.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription to update

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

name?string

Updated display name

Lengthlength <= 200
prompt?string

Updated natural language prompt (JOB_POSTS only)

filters?

Updated subscription filters (must match the subscription's type schema)

webhookUrl?string

Updated webhook URL

Formaturi
Lengthlength <= 2048
webhookSecret?string

Updated webhook secret

intervalSignalLimit?integer

Updated maximum signals per interval (1-10000)

Range1 <= value <= 10000
interval?string

Updated polling interval. Changing this restarts the polling schedule.

Value in"daily" | "weekly"

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" \  -H "Content-Type: application/json" \  -d '{    "filters": {      "titleKeywords": [        "DevOps Engineer",        "Platform Engineer"      ],      "countries": [        "US",        "GB"      ]    }  }'
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "DevOps hiring tracker",  "status": "active",  "prompt": "Find companies hiring machine learning engineers",  "filters": {},  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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"    }  }}

Delete a market signal subscription

DELETE
/v1/market-signals/subscriptions/{subscriptionId}

Soft-delete a subscription and stop signal delivery. The subscription will no longer deliver signals. This operation cannot be undone via the API.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription to delete

Formatuuid

Response Body

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
Empty
{  "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"    }  }}

Pause a market signal subscription

POST
/v1/market-signals/subscriptions/{subscriptionId}/pause

Pause an active subscription. No new signals will be delivered until the subscription is resumed. The subscription configuration is preserved.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription to pause

Formatuuid

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/pause"
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "DevOps hiring tracker",  "status": "active",  "prompt": "Find companies hiring machine learning engineers",  "filters": {},  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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"    }  }}

Resume a paused market signal subscription

POST
/v1/market-signals/subscriptions/{subscriptionId}/resume

Resume a paused subscription. Signal polling restarts and signals will be delivered again on the next interval.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription to resume

Formatuuid

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/resume"
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "DevOps hiring tracker",  "status": "active",  "prompt": "Find companies hiring machine learning engineers",  "filters": {},  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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"    }  }}

Trigger an immediate run of a market signal subscription

POST
/v1/market-signals/subscriptions/{subscriptionId}/trigger

Trigger an immediate polling run for the subscription, regardless of the normal interval schedule. This is useful for testing a new subscription or forcing a refresh after updating filters.

The request succeeds regardless of the subscription's status. However, only subscriptions in active status will poll for new signals and deliver signals. Paused or deleted subscriptions return 200 but do not trigger a run.

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription to trigger

Formatuuid

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/trigger"
{  "id": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",  "organizationId": "org_123",  "type": "JOB_POSTS",  "name": "DevOps hiring tracker",  "status": "active",  "prompt": "Find companies hiring machine learning engineers",  "filters": {},  "webhookUrl": "https://myapp.com/webhooks/market-signals",  "intervalSignalLimit": 500,  "interval": "daily",  "createdAt": "2024-06-15T10:00:00Z",  "updatedAt": "2024-06-15T10:00: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": {    "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 signals delivered by a market signal subscription

GET
/v1/market-signals/subscriptions/{subscriptionId}/signals

Retrieve a paginated list of signals that have been matched and stored by a subscription. Each signal includes the raw payload from the data source (e.g., job posting details, LinkedIn post content, or funding announcement), along with metadata like confidence scores and delivery status.

Results are sorted by creation date (latest first).

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

In: header

Path Parameters

subscriptionId*string

The unique identifier of the subscription

Formatuuid

Query Parameters

limit?integer

Maximum number of signals to return (1-100, default 20)

Default20
Range1 <= value <= 100
offset?integer

Number of signals to skip for pagination (default 0)

Default0
Range0 <= value

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/market-signals/subscriptions/a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/signals"
{  "items": [    {      "id": "sig_001",      "subscriptionId": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",      "jobPostingId": "jp_123",      "externalSignalId": null,      "payload": {        "title": "Senior DevOps Engineer",        "company": "Acme Corp",        "location": "San Francisco, CA",        "url": "https://jobs.acme.com/devops"      },      "confidenceScore": 0.92,      "status": "delivered",      "publishedAt": "2024-06-14T08:00:00Z",      "createdAt": "2024-06-15T10:30:00Z",      "deliveredAt": "2024-06-15T10:31:00Z"    },    {      "id": "sig_002",      "subscriptionId": "a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",      "jobPostingId": null,      "externalSignalId": "li_post_456",      "payload": {        "text": "Excited to announce our Series B funding...",        "author": {          "name": "Jane CEO",          "headline": "CEO at TechStartup"        }      },      "confidenceScore": 0.87,      "status": "pending",      "publishedAt": "2024-06-15T09:00:00Z",      "createdAt": "2024-06-15T10:30:00Z",      "deliveredAt": null    }  ],  "total": 42,  "limit": 20,  "offset": 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"    }  }}

On this page