Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SignalSumo API Reference — v1

Integrate SignalSumo's SEO data directly into your own tools, dashboards, and workflows.

API access is available on the Pro and Agency plans. Manage your keys and see your current plan at signalsumo.com/api-keys.

Table of Contents

Quickstart

Three steps to your first response.

1. Create an API key. On a Pro or Agency plan, generate a key at signalsumo.com/api-keys and copy it — it's shown only once.

2. Verify the connection:

curl -H "Authorization: Bearer ss_live_your_key_here" \
     "https://signalsumo.com/api/v1/usage"

A 200 response with your plan and remaining calls means you're connected.

3. Make your first data call:

curl -X POST \
     -H "Authorization: Bearer ss_live_your_key_here" \
     -H "Content-Type: application/json" \
     -d '{"keyword":"seo audit tool","limit":5}' \
     "https://signalsumo.com/api/v1/keyword-research"

That's it — every endpoint uses the same Authorization: Bearer header and returns the same JSON envelope. Runnable scripts for each endpoint live in examples/curl.

Overview

All endpoints are served under:

https://signalsumo.com/api/v1/

Requests and responses use JSON. Every successful response follows the same envelope:

{
  "success": true,
  "data":    { ... },
  "meta":    { "timestamp": "2026-06-26T10:00:00+00:00" }
}

Errors follow the same shape with success: false and an error object instead of data.

Authentication

Pass your API key in the Authorization header on every request:

Authorization: Bearer ss_live_your_key_here

Alternatively, you may pass it as a query parameter (not recommended for production):

GET /api/v1/usage?api_key=ss_live_your_key_here

Generating a key — Create and manage your API keys at signalsumo.com/api-keys. Each key is shown only once at creation time (format: ss_live_ followed by 40 hex characters) — store it securely. Afterward, only a masked prefix is ever displayed again.

The API also sends permissive CORS headers, so it can be called from browser-based tools. Keep secret keys server-side in production.

Plans & Billing

API access is available on the Pro and Agency plans. Two independent meters govern usage — a call is only served when both allow it.

1. Monthly API calls

Every request (including cache hits and errors that reach an endpoint) counts as one API call.

Plan Monthly API calls Resets
Pro 20 1st of each month
Agency 100 1st of each month

Exceeding this returns HTTP 429 (RATE_LIMITED) with a resets_at field in meta. Check your live limit and usage any time via GET /usage. This is a monthly call-count ceiling, not a per-second/per-minute rate limiter.

2. Per-feature quota & credits

Beyond the call meter, the data endpoints each draw from their own monthly feature quota (the same allowance your logged-in dashboard uses). Behavior when that quota is exhausted:

Endpoint When feature quota is exhausted
/keyword-research Returns 429 QUOTA_EXCEEDED. Never spends credits — safe to loop.
/backlinks Falls back to 1 credit per request. A deep query (page > 1 or limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED.
/site-audit Returns 429 QUOTA_EXCEEDED when the monthly crawl count or the rolling page budget is used up.

Cache hits cost no feature quota. Results are cached and shared with your dashboard, so a domain or keyword looked up recently returns instantly, marked "cached": true in meta, drawing no feature quota or credits (it still counts as one API call).

Locations & Languages

/keyword-research accepts a location_code and language_code to localize results. Both are optional — the defaults are the United States (2840) and English (en).

location_code

A numeric market code. Common values:

Code Market Code Market
2840 United States 2276 Germany
2826 United Kingdom 2250 France
2124 Canada 2724 Spain
2036 Australia 2380 Italy
2356 India 2528 Netherlands
2392 Japan 2076 Brazil

Over 90 markets are supported. An unrecognized code falls back to the United States.

language_code

A two-letter language code. Supported values:

Code Language Code Language
en English pt Portuguese
es Spanish nl Dutch
fr French ru Russian
de German ja Japanese
it Italian zh Chinese

⚠️ Only the languages listed above are supported. Any other language_code falls back to English rather than returning an error — so double-check the code if results look unexpectedly English.

Error Codes

HTTP code Meaning
400 BAD_REQUEST Malformed request syntax
401 UNAUTHORIZED Missing or invalid API key
402 PAYMENT_REQUIRED Feature quota exhausted and no credits remaining (backlinks)
403 FORBIDDEN API access not available on your plan (Pro or Agency required)
404 NOT_FOUND Endpoint or resource not found
422 VALIDATION_ERROR Required parameter missing or invalid value
429 RATE_LIMITED / QUOTA_EXCEEDED Monthly call limit or feature quota hit — see resets_at in meta
502 UPSTREAM_ERROR No data returned by the upstream data provider
500 SERVER_ERROR Internal error — safe to retry

Endpoints

GET /api/v1/usage

Returns your API quota usage for the current calendar month.

Example Request

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/usage"

Example Response

{
  "success": true,
  "data": {
    "plan": "agency",
    "api_calls_used": 42,
    "api_calls_limit": 100,
    "unlimited": false,
    "resets_at": "2026-08-01"
  },
  "meta": {
    "timestamp": "2026-06-26T10:00:00+00:00",
    "key_name": "Production App"
  }
}

GET /api/v1/backlinks

Returns a domain's backlink profile: a summary overview, distribution insights, and an enriched list of individual backlinks. Results are cached and shared with your dashboard (Pro: 2 days, Agency: 7 days); a cache hit is marked "cached": true and costs no feature quota.

The same data powers the Backlink Checker in the app — the cache is shared, so a domain you have already looked at there returns instantly here.

💰 A standard request draws your monthly backlink-search quota (then 1 credit if that's exhausted). A deep request — page > 1 or limit > 100 — always costs 1 credit. See Plans & Billing.

Query Parameters

Parameter Type Required Description
domain string Yes Root domain, e.g. example.com (a full URL is also accepted and normalized)
page integer No Page number, default 1
limit integer No Results per page, 1–200, default 100

Example Request

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/backlinks?domain=example.com&limit=2"

Example Response

{
  "success": true,
  "data": {
    "domain": "example.com",
    "total_backlinks": 48210,
    "referring_domains": 1824,
    "page": 1,
    "limit": 2,
    "overview": {
      "domain_rank": 71,
      "total_backlinks": 48210,
      "referring_domains": 1824,
      "referring_domains_nofollow": 640,
      "referring_main_domains": 1610,
      "referring_pages": 39044,
      "referring_ips": 1502,
      "referring_subnets": 1210,
      "dofollow_backlinks": 1184,
      "broken_backlinks": 220,
      "broken_pages": 96,
      "spam_score": 8,
      "first_seen": "2018-05-11 09:20:00",
      "lost_date": null
    },
    "insights": {
      "referring_links_types":          { "anchor": 30140, "image": 9800 },
      "referring_links_attributes":     { "noopener": 12000, "nofollow": 8400 },
      "referring_links_platform_types": { "blogs": 900, "cms": 640, "news": 210 },
      "referring_links_tld":            { "com": 1200, "org": 180 },
      "referring_links_countries":      { "US": 800, "GB": 210 },
      "referring_subnets": 1210,
      "referring_main_domains": 1610
    },
    "backlinks": [
      {
        "domain_from": "blog.example-news.com",
        "url_from": "https://blog.example-news.com/best-seo-tools",
        "url_to": "https://example.com/",
        "anchor": "SignalSumo",
        "dofollow": 1,
        "spam_score": 4,
        "first_seen": "2021-03-10 12:00:00",
        "last_seen": "2026-06-20 04:00:00",
        "semantic_location": "article",
        "platform_type": "blogs",
        "country": "US",
        "is_broken": 0,
        "domain_from_rank": 62,
        "page_from_rank": 41,
        "is_lost": 0,
        "lost_date": null,
        "is_new": 0,
        "item_type": "anchor",
        "page_from_title": "The Best SEO Tools in 2026",
        "page_from_status_code": 200,
        "url_to_status_code": 200,
        "domain_from_ip": "192.0.2.10",
        "tld_from": "com",
        "links_count": 2,
        "is_indirect_link": 0,
        "url_from_https": 1,
        "attributes": ["noopener"],
        "text_pre": "we recommend",
        "text_post": "for site audits",
        "kw_top3": 4,
        "kw_top10": 12,
        "kw_top100": 88
      }
    ]
  },
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00", "cached": false }
}

Backlink Fields

Field Description
domain_from / url_from The linking site and the exact page the link is on
url_to The page on your domain being linked to
anchor Anchor text of the link
dofollow 1 = dofollow, 0 = nofollow
spam_score Spam score of the linking page (0–100)
domain_from_rank / page_from_rank Authority of the linking domain / page, normalized 0–100
is_new / is_lost / is_broken Link lifecycle flags (1/0)
first_seen / last_seen / lost_date When the link was first seen, last seen, and (if applicable) lost
platform_type / country / tld_from Linking site's platform, country, and TLD
item_type Link form: anchor, image, redirect, …
page_from_status_code / url_to_status_code HTTP status of the linking page / the linked page
attributes Link rel attributes, e.g. ["noopener","nofollow"]
kw_top3 / kw_top10 / kw_top100 Keywords the linking page ranks for in the top 3 / 10 / 100

POST /api/v1/keyword-research

Returns a full metric set for a seed keyword — search volume, CPC, competition, difficulty, search intent, a 12-month volume trend, SERP features and more — plus a ranked list of related keywords carrying the same fields. Synchronous — responds immediately.

These are the same metrics the Keyword Research Tool shows, and once you have picked keywords worth pursuing the Rank Tracker monitors their positions daily.

🛡️ This endpoint draws your monthly keyword-search quota and never spends credits: once the quota is used up it returns 429 QUOTA_EXCEEDED, so it's safe to call in a loop. Recent lookups are served from cache (marked "cached": true) at no quota cost.

Request Body (JSON)

Field Type Required Description
keyword string Yes Seed keyword, max 200 chars
location_code integer No Market code, default 2840 (US) — see Locations & Languages
language_code string No Two-letter language code, default en
limit integer No Max related keywords returned, 1–100, default 10

Example Request

curl -X POST \
     -H "Authorization: Bearer ss_live_xxxx" \
     -H "Content-Type: application/json" \
     -d '{"keyword":"seo audit tool","limit":5}' \
     "https://signalsumo.com/api/v1/keyword-research"

Example Response

{
  "success": true,
  "data": {
    "keyword": "seo audit tool",
    "location_code": 2840,
    "language_code": "en",
    "total_count": 80,
    "overview": {
      "search_volume": 2900,
      "cpc": 19.07,
      "competition": 0.11,
      "competition_level": "LOW",
      "difficulty": 77,
      "intent": ["Commercial"],
      "trend": [ { "y": 2026, "m": 5, "v": 2400 }, { "y": 2026, "m": 6, "v": 1600 } ],
      "serp_features": ["organic"],
      "growth": { "m": -33, "q": -16, "y": -64 },
      "bid_low": 4.72,
      "bid_high": 19.10,
      "avg_backlinks": 5087,
      "avg_ref_domains": 970,
      "comp_domain_rank": 486,
      "se_results": 41000000
    },
    "related_keywords": [
      {
        "keyword": "free seo audit tool",
        "search_volume": 1900,
        "cpc": 3.10,
        "competition": 0.68,
        "competition_level": "MEDIUM",
        "difficulty": 54,
        "intent": ["Commercial", "Transactional"],
        "trend": [ { "y": 2026, "m": 6, "v": 1900 } ],
        "serp_features": ["organic", "people_also_ask"],
        "growth": { "m": 4, "q": -2, "y": 11 },
        "bid_low": 1.20,
        "bid_high": 4.90,
        "avg_backlinks": 210,
        "avg_ref_domains": 88,
        "comp_domain_rank": 402,
        "se_results": 12000000,
        "related": ["website audit tool", "seo checker free"],
        "match_bucket": "similar"
      }
    ]
  },
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00" }
}

Keyword Fields

The overview (seed keyword) and every related_keywords row share these fields. Any field may be null when the data is unavailable.

Field Description
search_volume Average monthly searches
cpc Average cost-per-click (USD)
competition Paid competition, 0–1
competition_level LOW / MEDIUM / HIGH
difficulty Organic ranking difficulty, 0–100 (null if not yet computed)
intent Search intent, e.g. ["Commercial"]
trend 12-month volume history — { y, m, v } per month
growth Volume change %: m monthly, q quarterly, y yearly
serp_features SERP feature types present, e.g. ["organic","people_also_ask"]
bid_low / bid_high Top-of-page bid range (USD)
avg_backlinks / avg_ref_domains Average backlinks / referring domains of the pages ranking now
comp_domain_rank Average authority (0–1000) of the pages ranking now
se_results Total competing results for the keyword
related Up to 8 related sub-keywords (related rows only)
match_bucket Relation to the seed: similar, related, or question

POST /api/v1/site-audit

Runs the same crawl as the Website Audit Tool — broken links, redirect chains, missing titles and canonical problems, page by page.

⏱ Site audits are asynchronous. This endpoint returns a job_id immediately. Poll GET /api/v1/jobs/{job_id} for results. Typical crawl time: 1–5 minutes.

Request Body (JSON)

Field Type Required Description
url string Yes Full URL to crawl, e.g. https://example.com
max_pages integer No Max pages to crawl (default 100). Capped by your plan's per-crawl limit and your remaining monthly page budget.
depth integer No Crawl depth, 1–5, default 3

Example Request

curl -X POST \
     -H "Authorization: Bearer ss_live_xxxx" \
     -H "Content-Type: application/json" \
     -d '{"url":"https://example.com","max_pages":50}' \
     "https://signalsumo.com/api/v1/site-audit"

Response (202 Accepted)

{
  "success": true,
  "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
  "status": "queued",
  "poll": "https://signalsumo.com/api/v1/jobs/a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00" }
}

GET /api/v1/jobs/{job_id}

Poll the status of an async job. Poll every 10–15 seconds until status is complete or failed.

Status Values

Status Meaning
queued Job accepted, not yet started
running Crawl in progress — check progress (0–100)
complete Done — data field contains results
failed Crawl failed — error field has the reason

Example Request

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/jobs/a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5"

Response — Running

{
  "success": true,
  "data": {
    "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
    "endpoint": "site-audit",
    "status": "running",
    "progress": 42,
    "created_at": "2026-06-26 10:00:00",
    "updated_at": "2026-06-26 10:01:30",
    "completed_at": null
  },
  "meta": { "timestamp": "2026-06-26T10:01:30+00:00" }
}

Response — Complete

{
  "success": true,
  "data": {
    "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
    "endpoint": "site-audit",
    "status": "complete",
    "progress": 100,
    "created_at": "2026-06-26 10:00:00",
    "updated_at": "2026-06-26 10:03:18",
    "completed_at": "2026-06-26 10:03:18",
    "data": {
      "audit_id": "AUDIT-A1B2C3-4567",
      "domain": "https://example.com",
      "pages_crawled": 47,
      "total_score": 78,
      "geo_score": 71,
      "issues": { "critical": 3, "warning": 12, "total": 15 },
      "report_url": "https://signalsumo.com/report?id=AUDIT-A1B2C3-4567"
    }
  },
  "meta": { "timestamp": "2026-06-26T10:03:18+00:00" }
}

Changelog

See CHANGELOG.md.

Support

Questions? Email hello@signalsumo.com, or open an issue in this repository.

Manage your API keys: signalsumo.com/api-keys · Compare plans: signalsumo.com/pricing

About

Official API reference and examples for the SignalSumo Developer API

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors