Sigpik Data Intelligence

Developer platformv1

REST
https://sigpik.com/api/v1
MCP
https://sigpik.com/api/mcp

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.

AuthorizationBearer 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.
Public API

Get public product profiles · Remote MCP requires an API key

Developer Access

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

Pro / Enterprise

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.

Request example
POST/research/promotion-investigations
curl "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.

400

Invalid parameters or cursor. Correct the request before retrying.

401

Missing, invalid or revoked API key.

403

The key scope or account access does not permit this operation.

404

Product or resource not found.

409

Idempotency key conflicts with another request.

429

Rate limit or monthly quota exhausted. Inspect the error code and reset headers.

503

Data is temporarily unavailable. Retry with backoff.

429 · X-Quota-Reset
HTTP
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

POST/api/v1/research/promotion-investigations

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.

Required scope research:execute

Parameters

Field / typeDescription & constraints
slug
stringrequiredbody

Canonical product or category slug.

minLength: 1 · maxLength: 200 · pattern: ^[a-z0-9][a-z0-9-]*$
locale
enumoptionalbody

Response language: en or zh-CN.

default: "en" · en | zh-CN
idempotency_key
stringrequiredbody

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
enumrequiredbody

Must be true to explicitly use the existing research allowance.

true
Response fields12
Field / typeDescription & constraints
task_id
stringrequiredresponse

The random task ID returned by submission.

pattern: ^task_[0-9a-f-]{36}$
type
enumrequiredresponse

Task type: promotion investigation.

promotion_investigation
status
enumrequiredresponse

See the example and full schema.

queued | running | succeeded | failed | cancelled
stage
enumrequiredresponse

See the example and full schema.

queued | investigating | generating_report | complete
status_url
stringrequiredresponse

See the example and full schema.

result_url
string | nullrequiredresponse

See the example and full schema.

poll_after_seconds
integer | nullrequiredresponse

See the example and full schema.

created_at
stringrequiredresponse

See the example and full schema.

updated_at
stringrequiredresponse

See the example and full schema.

completed_at
string | nullrequiredresponse

See the example and full schema.

error
object | nullrequiredresponse

See the example and full schema.

report
objectrequiredresponse

See the example and full schema.

Request example
POST/research/promotion-investigations
curl "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

GET/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 / typeDescription & constraints
task_id
stringrequiredpath

The random task ID returned by submission.

Response fields12
Field / typeDescription & constraints
task_id
stringrequiredresponse

The random task ID returned by submission.

pattern: ^task_[0-9a-f-]{36}$
type
enumrequiredresponse

Task type: promotion investigation.

promotion_investigation
status
enumrequiredresponse

See the example and full schema.

queued | running | succeeded | failed | cancelled
stage
enumrequiredresponse

See the example and full schema.

queued | investigating | generating_report | complete
status_url
stringrequiredresponse

See the example and full schema.

result_url
string | nullrequiredresponse

See the example and full schema.

poll_after_seconds
integer | nullrequiredresponse

See the example and full schema.

created_at
stringrequiredresponse

See the example and full schema.

updated_at
stringrequiredresponse

See the example and full schema.

completed_at
string | nullrequiredresponse

See the example and full schema.

error
object | nullrequiredresponse

See the example and full schema.

report
objectrequiredresponse

See the example and full schema.

Request example
GET/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

GET/api/v1/research/rankings

Compare 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 / typeDescription & constraints
locale
stringoptionalquery

Response language: en or zh-CN.

default: "en" · maxLength: 20
category
stringoptionalquery

Filter by category slug.

maxLength: 120
country
stringoptionalquery

Two-letter country code.

pattern: ^[A-Za-z]{2}$
q
stringoptionalquery

Search query.

maxLength: 80
sort
enumoptionalquery

Metric used to order results.

default: "growth" · growth | gain | traffic | dr_growth | organic | ai | paid
order
enumoptionalquery

Sort direction.

default: "desc" · asc | desc
min_traffic
integeroptionalquery

Minimum observed traffic.

default: 1000 · min: 0 · max: 9007199254740991
min_growth
numberoptionalquery

Minimum growth ratio; 0.1 represents 10%.

default: 0 · min: 0 · max: 100
min_dr
numberoptionalquery

Minimum domain rating.

default: 0 · min: 0 · max: 100
min_dr_gain
numberoptionalquery

Minimum domain rating increase.

default: 0 · min: 0 · max: 100
max_domain_age_months
integeroptionalquery

Maximum domain age in months; 0 disables this filter.

default: 0 · min: 0 · max: 120
page
integeroptionalquery

Page number. Developer Access always returns page 1.

default: 1 · min: 1 · max: 200
limit
integeroptionalquery

Maximum results per page.

default: 25 · min: 1 · max: 50
Response fields8
Field / typeDescription & constraints
category
object | nulloptionalresponse

Filter by category slug.

dataset
objectrequiredresponse

Observation window and dataset coverage.

eligible_population
integerrequiredresponse

Products eligible for this ranking.

filters
objectrequiredresponse

Applied query filters.

items
arrayrequiredresponse

Result records. Fields vary by endpoint and account access.

pagination
objectrequiredresponse

Page number, page size and continuation state.

requested_locale
stringrequiredresponse

Requested response language.

resolved_locale
stringrequiredresponse

Language available for this result.

Request example
GET/research/rankings
curl "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

GET/api/v1/research/search-demand

Find 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 / typeDescription & constraints
locale
stringoptionalquery

Response language: en or zh-CN.

default: "en" · maxLength: 20
q
stringoptionalquery

Search query.

maxLength: 120
market
stringoptionalquery

Receiving-product sector slug, not a country code.

maxLength: 120
type
enumoptionalquery

Keyword classification; defaults to non-brand.

default: "non_brand" · all | non_brand | brand
min_products
enumoptionalquery

Minimum number of observed products.

default: 1 · 1 | 2 | 3 | 5
min_traffic
integeroptionalquery

Minimum observed traffic.

default: 0 · min: 0 · max: 10000000000
min_volume
integeroptionalquery

Minimum search volume.

default: 0 · min: 0 · max: 10000000000
sort
enumoptionalquery

Metric used to order results.

default: "traffic" · traffic | volume | products
page
integeroptionalquery

Page number. Developer Access always returns page 1.

default: 1 · min: 1 · max: 1000
limit
integeroptionalquery

Maximum results per page.

default: 25 · min: 1 · max: 50
keyword_id
integeroptionalquery

Observed keyword ID for a detailed breakdown; omit or use 0 for the list.

min: 0 · max: 9007199254740991
Response fields9
Field / typeDescription & constraints
dataset
objectrequiredresponse

Observation window and dataset coverage.

filters
objectrequiredresponse

Applied query filters.

items
arrayrequiredresponse

Result records. Fields vary by endpoint and account access.

keyword
objectrequiredresponse

Selected keyword breakdown, or null.

markets
arrayrequiredresponse

Product-sector filter options.

pagination
objectrequiredresponse

Page number, page size and continuation state.

requested_locale
stringrequiredresponse

Requested response language.

resolved_locale
stringrequiredresponse

Language available for this result.

summary
objectrequiredresponse

Coverage and observation summary.

Request example
GET/research/search-demand
curl "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

POST/api/v1/alerts/webhooks

Deliver 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

signal.published · JSON
{
  "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
HMAC-SHA256
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_breakout

Traffic breakout
Monthly traffic rose enough in both rate and scale to stand out.

traffic_acceleration

Traffic growth accelerating
Traffic kept growing across consecutive periods, with the latest increase larger than before.

traffic_deceleration

Traffic growth slowing
Traffic may still be growing, but the increase has become smaller across recent periods.

entered_category_top_10

Entered market top 10
The product recently entered the top 10 of its primary market.

entered_category_top_20

Entered market top 20
The product recently entered the top 20 of its primary market.

dropped_out_of_category_top_10

Dropped out of market top 10
The product recently dropped out of the top 10 of its primary market.

market_share_shift

Market traffic share changed
The product gained or lost a meaningful share of traffic in its primary market.

ai_referral_breakout

AI referral traffic breakout
Traffic arriving from AI assistants rose well above its previous level.

ai_traffic_share_shift

AI referral share changed
The share of total traffic coming from AI assistants moved materially up or down.

new_ai_referral_source

New AI referral source
The product began receiving traffic from an AI platform that had not appeared before.

ai_referral_sources_diversified

More AI referral sources
More AI platforms are now sending traffic to the product.

price_increased

Price increased
The comparable price of the same plan or billing item increased in the same region.

price_decreased

Price decreased
The comparable price of the same plan or billing item decreased in the same region.

free_plan_added

Free plan added
The product added a free plan that was not previously available.

free_plan_removed

Free plan removed
A free plan that was previously available has been removed.

pricing_model_changed

Pricing model changed
The product changed its primary way of charging customers.

trial_changed

Trial rules changed
The trial length or payment-card requirement changed.

enterprise_plan_introduced

Enterprise plan added
The product introduced an enterprise plan for the first time.

backlink_acquisition_spike

Backlink growth accelerating
New websites linking to the product appeared much faster during the latest period.

ai_directory_push

AI directory push
The product was recently listed by several verified AI directories.

media_review_burst

Media and review coverage increased
Several new media articles or product reviews appeared in a short period.

google_ads_started

Google Ads started
Google Ads activity appeared after a period with no detected campaigns.

ad_creative_expansion

More ad creatives
The number of ad creatives in use increased materially.

new_feature

New feature launched
An official product source introduced a feature that had not appeared before.

new_model

New model launched
The product officially introduced a new model.

api_added

API support added
The product website now offers an API.

mcp_added

MCP support added
The product website now offers MCP support.

positioning_shift

Product positioning changed
The way the homepage describes the product or its main value changed materially.

product_launch

Product launched
An official source announced that the product had launched.

website_sitemap_expansion

More pages in the sitemap
The number of indexable URLs in the public sitemap increased materially.

website_sitemap_contraction

Fewer pages in the sitemap
The number of indexable URLs in the public sitemap decreased materially.

programmatic_seo_expansion

Structured sitemap URLs expanded
Comparable sitemaps show a net increase in similarly structured URLs. This does not establish indexing or search traffic.

organic_keyword_breakout

Non-brand keyword traffic growth
Estimated traffic for the same non-brand keyword increased in comparable monthly samples.

brand_search_growth

Brand search growth
Search volume increased for the same high-confidence branded terms in both monthly samples.

new_market_pages

New market pages
Comparable sitemaps show new URLs with language, region, or use-case paths; first entry into a market is not established.

chrome_user_growth

Chrome extension user growth
The number of users for the Chrome extension increased materially.

primary_domain_changed

Primary domain changed
The product website moved to a new primary domain.

product_discontinued

Product discontinued
An official source confirmed that the product is no longer offered.

Required scope webhooks:manage

Parameters

Field / typeDescription & constraints
url
stringrequiredbody

See the example and full schema.

maxLength: 2048
locale
enumoptionalbody

Response language: en or zh-CN.

default: "en" · en | zh-CN
signal_types
arrayrequiredbody

Supported signal types for products you follow.

Response fields9
Field / typeDescription & constraints
id
stringrequiredresponse

See the example and full schema.

url
stringrequiredresponse

See the example and full schema.

status
enumrequiredresponse

See the example and full schema.

pending | active | paused | deleted
locale
enumrequiredresponse

Response language: en or zh-CN.

en | zh-CN
signal_types
arrayrequiredresponse

Supported signal types for products you follow.

failure_count
integerrequiredresponse

See the example and full schema.

created_at
stringrequiredresponse

See the example and full schema.

updated_at
stringrequiredresponse

See the example and full schema.

signing_secret
stringoptionalresponse

See the example and full schema.

Request example
POST/alerts/webhooks
curl "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

GET/api/v1/tools/{slug}

Look up a product by its canonical slug. Available fields depend on account access.

Public · no API key

Parameters

Field / typeDescription & constraints
slug
stringrequiredpath

Canonical product or category slug.

Response fields20
Field / typeDescription & constraints
tool_id
integerrequiredresponse

See the example and full schema.

canonical_slug
stringrequiredresponse

See the example and full schema.

localized_slug
stringrequiredresponse

See the example and full schema.

name
stringrequiredresponse

See the example and full schema.

tagline
string | nulloptionalresponse

See the example and full schema.

short_description
string | nulloptionalresponse

See the example and full schema.

long_description
string | nulloptionalresponse

See the example and full schema.

official_url
stringrequiredresponse

One public product website per request.

pricing_model
stringrequiredresponse

See the example and full schema.

listed_at
stringrequiredresponse

See the example and full schema.

verification_status
stringrequiredresponse

See the example and full schema.

staleness_status
stringrequiredresponse

See the example and full schema.

has_free_plan
booleanrequiredresponse

See the example and full schema.

has_free_trial
booleanrequiredresponse

See the example and full schema.

has_api
booleanrequiredresponse

Filter products by API availability.

has_mcp
booleanrequiredresponse

Filter products by MCP availability.

requested_locale
stringrequiredresponse

Requested response language.

resolved_locale
stringrequiredresponse

Language available for this result.

available_locales
arrayrequiredresponse

See the example and full schema.

categories
arrayrequiredresponse

See the example and full schema.

Request example
GET/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

POST/api/mcp

Stateless 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.

Remote MCPHTTPS
{
  "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 / typeDescription & constraints
slug
stringrequiredargument

Canonical product or category slug.

minLength: 1 · maxLength: 200 · pattern: ^[a-z0-9][a-z0-9-]*$
locale
enumoptionalargument

Response language: en or zh-CN.

default: "en" · en | zh-CN
idempotency_key
stringrequiredargument

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
enumrequiredargument

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
JSON
{
  "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
JSON-RPC
{
  "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 / typeDescription & constraints
task_id
stringrequiredargument

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
JSON
{
  "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
JSON-RPC
{
  "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 / typeDescription & constraints
locale
stringoptionalargument

Response language: en or zh-CN.

default: "en" · maxLength: 20
q
stringoptionalargument

Search query.

maxLength: 120
market
stringoptionalargument

Receiving-product sector slug, not a country code.

maxLength: 120
type
enumoptionalargument

Keyword classification; defaults to non-brand.

default: "non_brand" · all | non_brand | brand
min_products
enumoptionalargument

Minimum number of observed products.

default: 1 · 1 | 2 | 3 | 5
min_traffic
integeroptionalargument

Minimum observed traffic.

default: 0 · min: 0 · max: 10000000000
min_volume
integeroptionalargument

Minimum search volume.

default: 0 · min: 0 · max: 10000000000
sort
enumoptionalargument

Metric used to order results.

default: "traffic" · traffic | volume | products
page
integeroptionalargument

Page number. Developer Access always returns page 1.

default: 1 · min: 1 · max: 1000
limit
integeroptionalargument

Maximum results per page.

default: 25 · min: 1 · max: 50
keyword_id
integeroptionalargument

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
JSON
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_ai_demand",
    "arguments": {
      "q": "ai notes",
      "limit": 10
    }
  }
}
Example response · excerpt
JSON-RPC
{
  "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 / typeDescription & constraints
locale
stringoptionalargument

Response language: en or zh-CN.

default: "en" · maxLength: 20
category
stringoptionalargument

Filter by category slug.

maxLength: 120
country
stringoptionalargument

Two-letter country code.

pattern: ^[A-Za-z]{2}$
q
stringoptionalargument

Search query.

maxLength: 80
sort
enumoptionalargument

Metric used to order results.

default: "growth" · growth | gain | traffic | dr_growth | organic | ai | paid
order
enumoptionalargument

Sort direction.

default: "desc" · asc | desc
min_traffic
integeroptionalargument

Minimum observed traffic.

default: 1000 · min: 0 · max: 9007199254740991
min_growth
numberoptionalargument

Minimum growth ratio; 0.1 represents 10%.

default: 0 · min: 0 · max: 100
min_dr
numberoptionalargument

Minimum domain rating.

default: 0 · min: 0 · max: 100
min_dr_gain
numberoptionalargument

Minimum domain rating increase.

default: 0 · min: 0 · max: 100
max_domain_age_months
integeroptionalargument

Maximum domain age in months; 0 disables this filter.

default: 0 · min: 0 · max: 120
page
integeroptionalargument

Page number. Developer Access always returns page 1.

default: 1 · min: 1 · max: 200
limit
integeroptionalargument

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
JSON
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "rank_ai_products",
    "arguments": {
      "sort": "growth",
      "limit": 10
    }
  }
}
Example response · excerpt
JSON-RPC
{
  "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