Getting started
Authentication
Public endpoints are available without an API key. Developer Access lets invited users test MCP and research APIs with limited usage. Pro and Enterprise unlock full research access for production workflows.
Bearer spk_live_…- API keys are available to signed-in accounts with invited Developer Access, Pro, or Enterprise.
- Send your key using Authorization: Bearer spk_live_…
- Enable only the scopes your integration needs. Starting investigations requires research:execute; managing signal subscriptions requires webhooks:manage.
- Your full key is shown once. You can revoke it at any time.
- Developer Access usage is shared across keys on the same account.
- OAuth is not supported yet. Remote MCP currently uses API keys.
Get public product profiles · Remote MCP requires an API key
50 shared counted calls per UTC month across protected REST and MCP · Public catalog, API key management, handshake, tool discovery, ping, and notifications do not count · Up to 10 results per response · Latest observation month; up to 5 product-sector filter options
Full Search Demand and Rankings access · Promotion investigations, rankings and search demand through Remote MCP · No monthly MCP call cap · 120 requests per minute · Rate limits still apply
Developer Access is invite only and requires a signed-in account. SaaS Ideas is in development, available only to active administrators on the website, and has no public API or MCP tool.
/research/promotion-investigationscurl "https://sigpik.com/api/v1/research/promotion-investigations" -X POST \
-H "Authorization: Bearer $SIGPIK_API_KEY" \
-H "Content-Type: application/json" \
--data '{"slug":"example-ai","locale":"en","idempotency_key":"b46b2db0-8a30-4d69-a33e-8b5b4509c279","confirm_usage":true}'Local simulation · illustrative data, no network request or quota usage.
202 AcceptedExample response · excerptJSON
{
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"type": "promotion_investigation",
"status": "queued",
"stage": "queued",
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"completed_at": null,
"status_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"result_url": null,
"poll_after_seconds": 60,
"error": null,
"report": null
}Getting started
Rate limits & errors
Developer keys: 120 requests per 60 seconds. Monthly Developer Access allowance is shared by the account.
X-Quota-* headers describe limited Developer Access. Public catalog and quota-exempt accounts do not have the same allowance headers. A 429 may indicate short-term rate limiting or monthly quota exhaustion.
400Invalid parameters or cursor. Correct the request before retrying.
401Missing, invalid or revoked API key.
403The key scope or account access does not permit this operation.
404Product or resource not found.
409Idempotency key conflicts with another request.
429Rate limit or monthly quota exhausted. Inspect the error code and reset headers.
503Data is temporarily unavailable. Retry with backoff.
429 · X-Quota-Reset
HTTP/1.1 429 Too Many Requests
X-Quota-Limit: 50
X-Quota-Remaining: 0
X-Quota-Policy: 50;month
X-Quota-Reset: 2026-10-01T00:00:00.000Z
{
"error": {
"code": "PRO_API_QUOTA_EXHAUSTED",
"message": "Developer Access call quota is exhausted.",
"details": { "limit": 50, "remaining": 0 }
},
"request_id": "example-request-id"
}Core Intelligence
Start an investigation
/api/v1/research/promotion-investigationsResearch one product using the same promotion history service as its detail page. Explicitly consumes the existing account research allowance. Reuse the same UUID to retry the same request. Returns a task ID; no CSV or catalog export.
Required scope research:execute
Parameters
| Field / type | Description & constraints |
|---|---|
slug | Canonical product or category slug. minLength: 1 · maxLength: 200 · pattern: ^[a-z0-9][a-z0-9-]*$ |
locale | Response language: en or zh-CN. default: "en" · en | zh-CN |
idempotency_key | A UUID reused only when retrying the same product and language. 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)$ |
confirm_usage | Must be true to explicitly use the existing research allowance. true |
Response fields12
| Field / type | Description & constraints |
|---|---|
task_id | The random task ID returned by submission. pattern: ^task_[0-9a-f-]{36}$ |
type | Task type: promotion investigation. promotion_investigation |
status | See the example and full schema. queued | running | succeeded | failed | cancelled |
stage | See the example and full schema. queued | investigating | generating_report | complete |
status_url | See the example and full schema. |
result_url | See the example and full schema. |
poll_after_seconds | See the example and full schema. |
created_at | See the example and full schema. |
updated_at | See the example and full schema. |
completed_at | See the example and full schema. |
error | See the example and full schema. |
report | See the example and full schema. |
/research/promotion-investigationscurl "https://sigpik.com/api/v1/research/promotion-investigations" -X POST \
-H "Authorization: Bearer $SIGPIK_API_KEY" \
-H "Content-Type: application/json" \
--data '{"slug":"example-ai","locale":"en","idempotency_key":"b46b2db0-8a30-4d69-a33e-8b5b4509c279","confirm_usage":true}'Local simulation · illustrative data, no network request or quota usage.
202 AcceptedExample response · excerptJSON
{
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"type": "promotion_investigation",
"status": "queued",
"stage": "queued",
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"completed_at": null,
"status_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"result_url": null,
"poll_after_seconds": 60,
"error": null,
"report": null
}Core Intelligence
Investigation progress and report · free
/api/v1/research/promotion-investigations/{task_id}One read returns progress and the saved final report. report is null while queued/running and populated when succeeded; failed/cancelled are terminal. Costs no research credits or monthly API calls, even after the allowance is exhausted. Poll after 60 seconds while pending. Unknown and another account’s IDs return 404.
Required scope research:read
Parameters
| Field / type | Description & constraints |
|---|---|
task_id | The random task ID returned by submission. |
Response fields12
| Field / type | Description & constraints |
|---|---|
task_id | The random task ID returned by submission. pattern: ^task_[0-9a-f-]{36}$ |
type | Task type: promotion investigation. promotion_investigation |
status | See the example and full schema. queued | running | succeeded | failed | cancelled |
stage | See the example and full schema. queued | investigating | generating_report | complete |
status_url | See the example and full schema. |
result_url | See the example and full schema. |
poll_after_seconds | See the example and full schema. |
created_at | See the example and full schema. |
updated_at | See the example and full schema. |
completed_at | See the example and full schema. |
error | See the example and full schema. |
report | See the example and full schema. |
/research/promotion-investigations/{task_id}curl "https://sigpik.com/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279" \
-H "Authorization: Bearer $SIGPIK_API_KEY"Local simulation · illustrative data, no network request or quota usage.
200 OKExample response · excerptJSON
{
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"type": "promotion_investigation",
"status": "succeeded",
"stage": "complete",
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"completed_at": "2026-09-17T05:10:00.000Z",
"status_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"result_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"poll_after_seconds": null,
"error": null,
"report": {
"version": "example",
"generated_at": "2026-09-17T05:10:00.000Z",
"narrative": {
"title": "Example promotion history",
"summary": {
"text": "Illustrative report: published sources describe a launch and later community activity.",
"citations": []
},
"sections": [],
"limitations": "Illustrative response. Actual reports include only available evidence."
},
"summary": {
"actionEvidenceCount": 0,
"channelCount": 0,
"contextLeadCount": 0,
"sourceCount": 0,
"unresolvedActionCount": 0
},
"analysis": {
"overview": "Illustrative report.",
"method": "",
"observations": [],
"phases": [],
"channels": [],
"openQuestions": []
},
"timeline": [],
"strategies": [],
"sources": [],
"context_leads": [],
"conclusion": "Observed promotion does not establish growth causality.",
"limitations": [
"Examples are not live research results."
],
"caveat": "Coverage depends on available public evidence.",
"reliability": {
"actorAttribution": "unknown",
"coverageLevel": "limited",
"growthCausality": "not_established",
"growthImpact": "unknown"
},
"omitted_action_count": 0,
"omitted_context_count": 0
}
}Core Intelligence
Rank AI products
/api/v1/research/rankingsCompare growth, traffic, domain rating, search and AI referrals.
Required scope research:read
Developer Access: page 1, up to 10 results. Paid access depends on account features. Growth is a ratio; null means unavailable.
Parameters
| Field / type | Description & constraints |
|---|---|
locale | Response language: en or zh-CN. default: "en" · maxLength: 20 |
category | Filter by category slug. maxLength: 120 |
country | Two-letter country code. pattern: ^[A-Za-z]{2}$ |
q | Search query. maxLength: 80 |
sort | Metric used to order results. default: "growth" · growth | gain | traffic | dr_growth | organic | ai | paid |
order | Sort direction. default: "desc" · asc | desc |
min_traffic | Minimum observed traffic. default: 1000 · min: 0 · max: 9007199254740991 |
min_growth | Minimum growth ratio; 0.1 represents 10%. default: 0 · min: 0 · max: 100 |
min_dr | Minimum domain rating. default: 0 · min: 0 · max: 100 |
min_dr_gain | Minimum domain rating increase. default: 0 · min: 0 · max: 100 |
max_domain_age_months | Maximum domain age in months; 0 disables this filter. default: 0 · min: 0 · max: 120 |
page | Page number. Developer Access always returns page 1. default: 1 · min: 1 · max: 200 |
limit | Maximum results per page. default: 25 · min: 1 · max: 50 |
Response fields8
| Field / type | Description & constraints |
|---|---|
category | Filter by category slug. |
dataset | Observation window and dataset coverage. |
eligible_population | Products eligible for this ranking. |
filters | Applied query filters. |
items | Result records. Fields vary by endpoint and account access. |
pagination | Page number, page size and continuation state. |
requested_locale | Requested response language. |
resolved_locale | Language available for this result. |
/research/rankingscurl "https://sigpik.com/api/v1/research/rankings?sort=growth&limit=10" \
-H "Authorization: Bearer $SIGPIK_API_KEY"Local simulation · illustrative data, no network request or quota usage.
200 OKExample response · excerptJSON
{
"dataset": {
"methodology_version": "example"
},
"eligible_population": 1,
"filters": {
"sort": "growth",
"limit": 10
},
"items": [
{
"rank": 1,
"tool_id": 1042,
"name": "Example AI",
"slug": "example-ai",
"normalized_domain": "example.ai",
"primary_category_name": "Productivity",
"primary_category_slug": "productivity",
"latest_month": "2026-08",
"previous_month": "2026-07",
"latest_visits": 131400,
"previous_visits": 100000,
"visits_change": 31400,
"growth_rate": 0.314,
"domain_rating": null,
"favicon_url": null
}
],
"pagination": {
"page": 1,
"limit": 10,
"has_more": false
},
"requested_locale": "en",
"resolved_locale": "en"
}Core Intelligence
Keyword traffic distribution
/api/v1/research/search-demandFind which tracked products receive keyword traffic. Shares describe the tracked sample. SaaS Ideas is not available through this endpoint.
Required scope research:read
Developer Access: page 1, up to 10 results. Paid access depends on account features. Growth is a ratio; null means unavailable.
Parameters
| Field / type | Description & constraints |
|---|---|
locale | Response language: en or zh-CN. default: "en" · maxLength: 20 |
q | Search query. maxLength: 120 |
market | Receiving-product sector slug, not a country code. maxLength: 120 |
type | Keyword classification; defaults to non-brand. default: "non_brand" · all | non_brand | brand |
min_products | Minimum number of observed products. default: 1 · 1 | 2 | 3 | 5 |
min_traffic | Minimum observed traffic. default: 0 · min: 0 · max: 10000000000 |
min_volume | Minimum search volume. default: 0 · min: 0 · max: 10000000000 |
sort | Metric used to order results. default: "traffic" · traffic | volume | products |
page | Page number. Developer Access always returns page 1. default: 1 · min: 1 · max: 1000 |
limit | Maximum results per page. default: 25 · min: 1 · max: 50 |
keyword_id | Observed keyword ID for a detailed breakdown; omit or use 0 for the list. min: 0 · max: 9007199254740991 |
Response fields9
| Field / type | Description & constraints |
|---|---|
dataset | Observation window and dataset coverage. |
filters | Applied query filters. |
items | Result records. Fields vary by endpoint and account access. |
keyword | Selected keyword breakdown, or null. |
markets | Product-sector filter options. |
pagination | Page number, page size and continuation state. |
requested_locale | Requested response language. |
resolved_locale | Language available for this result. |
summary | Coverage and observation summary. |
/research/search-demandcurl "https://sigpik.com/api/v1/research/search-demand?q=ai%20notes&limit=10" \
-H "Authorization: Bearer $SIGPIK_API_KEY"Local simulation · illustrative data, no network request or quota usage.
200 OKExample response · excerptJSON
{
"items": [
{
"keyword": "ai notes",
"keyword_id": 742,
"brand_type": "generic",
"observed_products": 4,
"observed_traffic": 18420,
"search_volume": 27900,
"traffic_change1m": null,
"product_change1m": null
}
],
"pagination": {
"page": 1,
"limit": 10,
"has_more": false,
"has_previous": false,
"total": 1,
"total_pages": 1
},
"keyword": null,
"requested_locale": "en",
"resolved_locale": "en"
}Signal notifications
Subscribe to product signals
/api/v1/alerts/webhooksDeliver new confirmed published signals for products you follow. The verification POST requires HTTP 2xx with {"challenge":"the received value"}. Save the one-time signing_secret. Independent of email and investigations.
Manage endpoints, signing secrets and delivery history in Dashboard.
Signal event and signature
{
"id": "sig_1234_1042",
"version": "1",
"type": "signal.published",
"created_at": "2026-09-17T05:00:00.000Z",
"data": {
"signal_id": 1234,
"signal_type": "traffic_breakout",
"product": {
"id": 1042,
"slug": "example-ai"
},
"title": "Traffic breakout",
"summary": "Illustrative signal: monthly traffic increased.",
"change": {
"direction": "up",
"magnitude": 0.7,
"before": {
"value": 10000,
"unit": "visits"
},
"after": {
"value": 17000,
"unit": "visits"
}
},
"observed_at": "2026-09-17T05:00:00.000Z",
"period": {
"start": "2026-08-01",
"end": "2026-08-31"
},
"published_at": "2026-09-17T05:00:00.000Z",
"evidence_summary": "Illustrative monthly observation; does not establish growth causality.",
"url": "https://sigpik.com/tools/example-ai"
}
}X-Sigpik-Signature: t=<Unix seconds>,v1=<hex HMAC-SHA256>. Sign timestamp + "." + the original body using the full signing_secret. Verify within 5 minutes using constant-time comparison before parsing JSON, then durably deduplicate by event ID. Queue your own action and return HTTP 2xx. Notifications never start investigations.
Operational limits: at most 1,000 signal events per account in a rolling 24 hours; delayed events older than 24 hours are not backfilled. This is notification delivery, not real-time traffic monitoring.
Verify the signature · Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
// rawBody must be the original Buffer, before JSON parsing.
export function verifySigpik(rawBody, signature, secret) {
const match = /^t=(\d{1,12}),v1=([a-f0-9]{64})$/.exec(signature ?? "");
if (!match) return false;
const [, timestamp, hex] = match;
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(timestamp + ".").update(rawBody).digest();
return timingSafeEqual(expected, Buffer.from(hex, "hex"));
}Supported signal events
traffic_breakoutTraffic breakout
Monthly traffic rose enough in both rate and scale to stand out.
traffic_accelerationTraffic growth accelerating
Traffic kept growing across consecutive periods, with the latest increase larger than before.
traffic_decelerationTraffic growth slowing
Traffic may still be growing, but the increase has become smaller across recent periods.
entered_category_top_10Entered market top 10
The product recently entered the top 10 of its primary market.
entered_category_top_20Entered market top 20
The product recently entered the top 20 of its primary market.
dropped_out_of_category_top_10Dropped out of market top 10
The product recently dropped out of the top 10 of its primary market.
market_share_shiftMarket traffic share changed
The product gained or lost a meaningful share of traffic in its primary market.
ai_referral_breakoutAI referral traffic breakout
Traffic arriving from AI assistants rose well above its previous level.
ai_traffic_share_shiftAI referral share changed
The share of total traffic coming from AI assistants moved materially up or down.
new_ai_referral_sourceNew AI referral source
The product began receiving traffic from an AI platform that had not appeared before.
ai_referral_sources_diversifiedMore AI referral sources
More AI platforms are now sending traffic to the product.
price_increasedPrice increased
The comparable price of the same plan or billing item increased in the same region.
price_decreasedPrice decreased
The comparable price of the same plan or billing item decreased in the same region.
free_plan_addedFree plan added
The product added a free plan that was not previously available.
free_plan_removedFree plan removed
A free plan that was previously available has been removed.
pricing_model_changedPricing model changed
The product changed its primary way of charging customers.
trial_changedTrial rules changed
The trial length or payment-card requirement changed.
enterprise_plan_introducedEnterprise plan added
The product introduced an enterprise plan for the first time.
backlink_acquisition_spikeBacklink growth accelerating
New websites linking to the product appeared much faster during the latest period.
ai_directory_pushAI directory push
The product was recently listed by several verified AI directories.
media_review_burstMedia and review coverage increased
Several new media articles or product reviews appeared in a short period.
google_ads_startedGoogle Ads started
Google Ads activity appeared after a period with no detected campaigns.
ad_creative_expansionMore ad creatives
The number of ad creatives in use increased materially.
new_featureNew feature launched
An official product source introduced a feature that had not appeared before.
new_modelNew model launched
The product officially introduced a new model.
api_addedAPI support added
The product website now offers an API.
mcp_addedMCP support added
The product website now offers MCP support.
positioning_shiftProduct positioning changed
The way the homepage describes the product or its main value changed materially.
product_launchProduct launched
An official source announced that the product had launched.
website_sitemap_expansionMore pages in the sitemap
The number of indexable URLs in the public sitemap increased materially.
website_sitemap_contractionFewer pages in the sitemap
The number of indexable URLs in the public sitemap decreased materially.
programmatic_seo_expansionStructured sitemap URLs expanded
Comparable sitemaps show a net increase in similarly structured URLs. This does not establish indexing or search traffic.
organic_keyword_breakoutNon-brand keyword traffic growth
Estimated traffic for the same non-brand keyword increased in comparable monthly samples.
brand_search_growthBrand search growth
Search volume increased for the same high-confidence branded terms in both monthly samples.
new_market_pagesNew market pages
Comparable sitemaps show new URLs with language, region, or use-case paths; first entry into a market is not established.
chrome_user_growthChrome extension user growth
The number of users for the Chrome extension increased materially.
primary_domain_changedPrimary domain changed
The product website moved to a new primary domain.
product_discontinuedProduct discontinued
An official source confirmed that the product is no longer offered.
Required scope webhooks:manage
Parameters
| Field / type | Description & constraints |
|---|---|
url | See the example and full schema. maxLength: 2048 |
locale | Response language: en or zh-CN. default: "en" · en | zh-CN |
signal_types | Supported signal types for products you follow. |
Response fields9
| Field / type | Description & constraints |
|---|---|
id | See the example and full schema. |
url | See the example and full schema. |
status | See the example and full schema. pending | active | paused | deleted |
locale | Response language: en or zh-CN. en | zh-CN |
signal_types | Supported signal types for products you follow. |
failure_count | See the example and full schema. |
created_at | See the example and full schema. |
updated_at | See the example and full schema. |
signing_secret | See the example and full schema. |
/alerts/webhookscurl "https://sigpik.com/api/v1/alerts/webhooks" -X POST \
-H "Authorization: Bearer $SIGPIK_API_KEY" \
-H "Content-Type: application/json" \
--data '{"url":"https://your-domain.com/webhooks/sigpik","locale":"en","signal_types":["traffic_breakout"]}'Local simulation · illustrative data, no network request or quota usage.
201 CreatedExample response · excerptJSON
{
"id": "wh_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"url": "https://your-domain.com/webhooks/sigpik",
"status": "pending",
"locale": "en",
"signal_types": [
"traffic_breakout"
],
"failure_count": 0,
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"signing_secret": "whsec_EXAMPLE_ONLY"
}Public Catalog
Product profile
/api/v1/tools/{slug}Look up a product by its canonical slug. Available fields depend on account access.
Public · no API key
Parameters
| Field / type | Description & constraints |
|---|---|
slug | Canonical product or category slug. |
Response fields20
| Field / type | Description & constraints |
|---|---|
tool_id | See the example and full schema. |
canonical_slug | See the example and full schema. |
localized_slug | See the example and full schema. |
name | See the example and full schema. |
tagline | See the example and full schema. |
short_description | See the example and full schema. |
long_description | See the example and full schema. |
official_url | One public product website per request. |
pricing_model | See the example and full schema. |
listed_at | See the example and full schema. |
verification_status | See the example and full schema. |
staleness_status | See the example and full schema. |
has_free_plan | See the example and full schema. |
has_free_trial | See the example and full schema. |
has_api | Filter products by API availability. |
has_mcp | Filter products by MCP availability. |
requested_locale | Requested response language. |
resolved_locale | Language available for this result. |
available_locales | See the example and full schema. |
categories | See the example and full schema. |
/tools/{slug}curl "https://sigpik.com/api/v1/tools/example-ai"Local simulation · illustrative data, no network request or quota usage.
200 OKExample response · excerptJSON
{
"tool_id": 1042,
"canonical_slug": "example-ai",
"localized_slug": "example-ai",
"name": "Example AI",
"tagline": "An illustrative AI workspace",
"short_description": null,
"logo_url": null,
"official_url": "https://example.ai",
"primary_category_slug": "productivity",
"primary_category_name": "Productivity",
"pricing_model": "freemium",
"has_free_plan": true,
"has_api": true,
"has_mcp": false,
"verification_status": "verified",
"staleness_status": "fresh",
"requested_locale": "en",
"resolved_locale": "en",
"available_locales": [
"en"
],
"long_description": null,
"listed_at": "2026-09-01T00:00:00Z",
"has_free_trial": false,
"categories": []
}Remote MCP
Agent integration
/api/mcpStateless HTTPS with API-key authentication; OAuth is not supported. Every tool needs mcp:tools plus its listed scope. Start and research tools use the shared API allowance; get_promotion_investigation cost zero monthly calls and zero investigation credits. Discovery and ping are also free.
Cursor
Save as .cursor/mcp.json. Replace YOUR_API_KEY locally and keep the file out of version control.
Claude Desktop
For Claude Desktop’s local config, use the mcp-remote bridge (requires Node.js). Save in claude_desktop_config.json and restart Claude. This is a third-party client bridge.
{
"mcpServers": {
"sigpik": {
"url": "https://sigpik.com/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Save as .cursor/mcp.json. Replace YOUR_API_KEY locally and keep the file out of version control.
Intelligence tools
start_promotion_investigation
Research one product using the same promotion history service as its detail page. Explicitly consumes the existing account research allowance. Reuse the same UUID to retry the same request. Returns a task ID; no CSV or catalog export.
mcp:tools + research:execute
| Field / type | Description & constraints |
|---|---|
slug | Canonical product or category slug. minLength: 1 · maxLength: 200 · pattern: ^[a-z0-9][a-z0-9-]*$ |
locale | Response language: en or zh-CN. default: "en" · en | zh-CN |
idempotency_key | A UUID reused only when retrying the same product and language. 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)$ |
confirm_usage | Must be true to explicitly use the existing research allowance. true |
Returns text content and structuredContent. Tool errors set isError and include error.code and error.message.
tools/call · JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "start_promotion_investigation",
"arguments": {
"slug": "example-ai",
"locale": "en",
"idempotency_key": "b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"confirm_usage": true
}
}
}Example response · excerpt
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"task_id\":\"task_b46b2db0-8a30-4d69-a33e-8b5b4509c279\",\"type\":\"promotion_investigation\",\"status\":\"queued\",\"stage\":\"queued\",\"created_at\":\"2026-09-17T05:00:00.000Z\",\"updated_at\":\"2026-09-17T05:00:00.000Z\",\"completed_at\":null,\"status_url\":\"/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279\",\"result_url\":null,\"poll_after_seconds\":60,\"error\":null,\"report\":null}"
}
],
"structuredContent": {
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"type": "promotion_investigation",
"status": "queued",
"stage": "queued",
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"completed_at": null,
"status_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"result_url": null,
"poll_after_seconds": 60,
"error": null,
"report": null
}
}
}Intelligence tools
get_promotion_investigation
One read returns progress and the saved final report. report is null while queued/running and populated when succeeded; failed/cancelled are terminal. Costs no research credits or monthly API calls, even after the allowance is exhausted. Poll after 60 seconds while pending. Unknown and another account’s IDs return 404.
mcp:tools + research:read
| Field / type | Description & constraints |
|---|---|
task_id | The random task ID returned by submission. pattern: ^task_[0-9a-f-]{36}$ |
Returns text content and structuredContent. Tool errors set isError and include error.code and error.message.
tools/call · JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_promotion_investigation",
"arguments": {
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279"
}
}
}Example response · excerpt
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"task_id\":\"task_b46b2db0-8a30-4d69-a33e-8b5b4509c279\",\"type\":\"promotion_investigation\",\"status\":\"succeeded\",\"stage\":\"complete\",\"created_at\":\"2026-09-17T05:00:00.000Z\",\"updated_at\":\"2026-09-17T05:00:00.000Z\",\"completed_at\":\"2026-09-17T05:10:00.000Z\",\"status_url\":\"/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279\",\"result_url\":\"/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279\",\"poll_after_seconds\":null,\"error\":null,\"report\":{\"version\":\"example\",\"generated_at\":\"2026-09-17T05:10:00.000Z\",\"narrative\":{\"title\":\"Example promotion history\",\"summary\":{\"text\":\"Illustrative report: published sources describe a launch and later community activity.\",\"citations\":[]},\"sections\":[],\"limitations\":\"Illustrative response. Actual reports include only available evidence.\"},\"summary\":{\"actionEvidenceCount\":0,\"channelCount\":0,\"contextLeadCount\":0,\"sourceCount\":0,\"unresolvedActionCount\":0},\"analysis\":{\"overview\":\"Illustrative report.\",\"method\":\"\",\"observations\":[],\"phases\":[],\"channels\":[],\"openQuestions\":[]},\"timeline\":[],\"strategies\":[],\"sources\":[],\"context_leads\":[],\"conclusion\":\"Observed promotion does not establish growth causality.\",\"limitations\":[\"Examples are not live research results.\"],\"caveat\":\"Coverage depends on available public evidence.\",\"reliability\":{\"actorAttribution\":\"unknown\",\"coverageLevel\":\"limited\",\"growthCausality\":\"not_established\",\"growthImpact\":\"unknown\"},\"omitted_action_count\":0,\"omitted_context_count\":0}}"
}
],
"structuredContent": {
"task_id": "task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"type": "promotion_investigation",
"status": "succeeded",
"stage": "complete",
"created_at": "2026-09-17T05:00:00.000Z",
"updated_at": "2026-09-17T05:00:00.000Z",
"completed_at": "2026-09-17T05:10:00.000Z",
"status_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"result_url": "/api/v1/research/promotion-investigations/task_b46b2db0-8a30-4d69-a33e-8b5b4509c279",
"poll_after_seconds": null,
"error": null,
"report": {
"version": "example",
"generated_at": "2026-09-17T05:10:00.000Z",
"narrative": {
"title": "Example promotion history",
"summary": {
"text": "Illustrative report: published sources describe a launch and later community activity.",
"citations": []
},
"sections": [],
"limitations": "Illustrative response. Actual reports include only available evidence."
},
"summary": {
"actionEvidenceCount": 0,
"channelCount": 0,
"contextLeadCount": 0,
"sourceCount": 0,
"unresolvedActionCount": 0
},
"analysis": {
"overview": "Illustrative report.",
"method": "",
"observations": [],
"phases": [],
"channels": [],
"openQuestions": []
},
"timeline": [],
"strategies": [],
"sources": [],
"context_leads": [],
"conclusion": "Observed promotion does not establish growth causality.",
"limitations": [
"Examples are not live research results."
],
"caveat": "Coverage depends on available public evidence.",
"reliability": {
"actorAttribution": "unknown",
"coverageLevel": "limited",
"growthCausality": "not_established",
"growthImpact": "unknown"
},
"omitted_action_count": 0,
"omitted_context_count": 0
}
}
}
}Intelligence tools
search_ai_demand
Find which tracked products receive keyword traffic. Shares describe the tracked sample. SaaS Ideas is not available through this endpoint.
mcp:tools + research:read
| Field / type | Description & constraints |
|---|---|
locale | Response language: en or zh-CN. default: "en" · maxLength: 20 |
q | Search query. maxLength: 120 |
market | Receiving-product sector slug, not a country code. maxLength: 120 |
type | Keyword classification; defaults to non-brand. default: "non_brand" · all | non_brand | brand |
min_products | Minimum number of observed products. default: 1 · 1 | 2 | 3 | 5 |
min_traffic | Minimum observed traffic. default: 0 · min: 0 · max: 10000000000 |
min_volume | Minimum search volume. default: 0 · min: 0 · max: 10000000000 |
sort | Metric used to order results. default: "traffic" · traffic | volume | products |
page | Page number. Developer Access always returns page 1. default: 1 · min: 1 · max: 1000 |
limit | Maximum results per page. default: 25 · min: 1 · max: 50 |
keyword_id | Observed keyword ID for a detailed breakdown; omit or use 0 for the list. min: 0 · max: 9007199254740991 |
Returns text content and structuredContent. Tool errors set isError and include error.code and error.message.
tools/call · JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_ai_demand",
"arguments": {
"q": "ai notes",
"limit": 10
}
}
}Example response · excerpt
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"items\":[{\"keyword\":\"ai notes\",\"keyword_id\":742,\"brand_type\":\"generic\",\"observed_products\":4,\"observed_traffic\":18420,\"search_volume\":27900,\"traffic_change1m\":null,\"product_change1m\":null}],\"pagination\":{\"page\":1,\"limit\":10,\"has_more\":false,\"has_previous\":false,\"total\":1,\"total_pages\":1},\"keyword\":null,\"requested_locale\":\"en\",\"resolved_locale\":\"en\"}"
}
],
"structuredContent": {
"items": [
{
"keyword": "ai notes",
"keyword_id": 742,
"brand_type": "generic",
"observed_products": 4,
"observed_traffic": 18420,
"search_volume": 27900,
"traffic_change1m": null,
"product_change1m": null
}
],
"pagination": {
"page": 1,
"limit": 10,
"has_more": false,
"has_previous": false,
"total": 1,
"total_pages": 1
},
"keyword": null,
"requested_locale": "en",
"resolved_locale": "en"
}
}
}Intelligence tools
rank_ai_products
Compare growth, traffic, domain rating, search and AI referrals.
mcp:tools + research:read
| Field / type | Description & constraints |
|---|---|
locale | Response language: en or zh-CN. default: "en" · maxLength: 20 |
category | Filter by category slug. maxLength: 120 |
country | Two-letter country code. pattern: ^[A-Za-z]{2}$ |
q | Search query. maxLength: 80 |
sort | Metric used to order results. default: "growth" · growth | gain | traffic | dr_growth | organic | ai | paid |
order | Sort direction. default: "desc" · asc | desc |
min_traffic | Minimum observed traffic. default: 1000 · min: 0 · max: 9007199254740991 |
min_growth | Minimum growth ratio; 0.1 represents 10%. default: 0 · min: 0 · max: 100 |
min_dr | Minimum domain rating. default: 0 · min: 0 · max: 100 |
min_dr_gain | Minimum domain rating increase. default: 0 · min: 0 · max: 100 |
max_domain_age_months | Maximum domain age in months; 0 disables this filter. default: 0 · min: 0 · max: 120 |
page | Page number. Developer Access always returns page 1. default: 1 · min: 1 · max: 200 |
limit | Maximum results per page. default: 25 · min: 1 · max: 50 |
Returns text content and structuredContent. Tool errors set isError and include error.code and error.message.
tools/call · JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_ai_products",
"arguments": {
"sort": "growth",
"limit": 10
}
}
}Example response · excerpt
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"dataset\":{\"methodology_version\":\"example\"},\"eligible_population\":1,\"filters\":{\"sort\":\"growth\",\"limit\":10},\"items\":[{\"rank\":1,\"tool_id\":1042,\"name\":\"Example AI\",\"slug\":\"example-ai\",\"normalized_domain\":\"example.ai\",\"primary_category_name\":\"Productivity\",\"primary_category_slug\":\"productivity\",\"latest_month\":\"2026-08\",\"previous_month\":\"2026-07\",\"latest_visits\":131400,\"previous_visits\":100000,\"visits_change\":31400,\"growth_rate\":0.314,\"domain_rating\":null,\"favicon_url\":null}],\"pagination\":{\"page\":1,\"limit\":10,\"has_more\":false},\"requested_locale\":\"en\",\"resolved_locale\":\"en\"}"
}
],
"structuredContent": {
"dataset": {
"methodology_version": "example"
},
"eligible_population": 1,
"filters": {
"sort": "growth",
"limit": 10
},
"items": [
{
"rank": 1,
"tool_id": 1042,
"name": "Example AI",
"slug": "example-ai",
"normalized_domain": "example.ai",
"primary_category_name": "Productivity",
"primary_category_slug": "productivity",
"latest_month": "2026-08",
"previous_month": "2026-07",
"latest_visits": 131400,
"previous_visits": 100000,
"visits_change": 31400,
"growth_rate": 0.314,
"domain_rating": null,
"favicon_url": null
}
],
"pagination": {
"page": 1,
"limit": 10,
"has_more": false
},
"requested_locale": "en",
"resolved_locale": "en"
}
}
}TypeScript / Python
Client libraries
Use Node.js fetch or install httpx for Python. Run authenticated requests on your server and read SIGPIK_API_KEY from the environment.
Copy the TypeScript or Python example for the endpoint you need. The OpenAPI document can also generate a typed client.
Get developer access