How healthy is the link profile

Embed
Preview of the card
<a href="https://seolyticize.com/docs/ref-get-backlink-health"><img src="https://seolyticize.com/docs/_api/public/orgs/71cb2b7a-a719-4003-b3ea-6321dc1db8ab/spaces/3bf2dbf7-3faa-473c-ba3b-30588f5f8de4/pages/120a2d0f-a71b-4807-bc8a-2d49f3f7f962/social-card.svg?v=3e7ae33eec8b" alt="How healthy is the link profile" width="600" height="315"></a>
POSThttps://seolyticize.com/api/v1/tools/get_backlink_health

Scores the client's link profile 0–100 (a heuristic, said so) from seven factors, each good, warn or critical with its figures and the source they came from (the vendor's synced index, our own link index, the domain graph): referring domains (20: over 100 good, under 20 critical), quality distribution (20: the linking sites' authority, and domain diversity — one site over 10% of the links warns, over 25% is critical), anchor naturalness (15: the anchor bands of get_anchor_distribution), toxic ratio (20: the share of linking sites get_toxic_link_risk calls toxic), velocity (10: a fall in referring domains of over 20% a quarter is critical), follow ratio (5: over 60% followed good, under 40% critical) and geographic relevance (10: the linking sites' TLD and country mix against the client's market; 80% or more from other countries flags a private network). Each factor carries its source's confidence (DataForSEO 1.0, our link index 0.7, Common Crawl 0.5), which scales its weight; a number only when at least four factors have data, and never from presence-only sources alone (NOT ASSESSED); otherwise INSUFFICIENT DATA (X/7). industry (saas, ecommerce, local, publisher, agency) judges the anchors against that industry's natural ranges. Also the profile's toxic signals: 50+ directory links, linking pages with 10,000+ outbound links, more than 50 links from one site, linking pages under 100 words, reciprocal links. Pass moneyTerms to tell exact and partial-match anchors apart. Spam scores sharpen the toxic ratio: fetchSpamScores: true buys them inside this call (one paid DataForSEO request of up to 1,000 linking sites, the price of get_backlink_spam_scores; sites scored in the last 30 days are reused free; quote it with estimate_cost or dryRun first), or pass spamScores you already have. Answers 'how healthy are our backlinks' and 'is our link profile at risk'. Free without fetchSpamScores.

Parameters

Idempotency-Keystringheader
Any unique string, up to 200 characters. A retry with the same key and body is answered from the first answer (Idempotent-Replayed: true) for a day, so it never buys or writes twice; the same key with another body is refused.

Request body

application/json
clientIdstringrequired
moneyTermsstring[]
= []
spamScoresobject
Domain → DataForSEO spam score, from get_backlink_spam_scores.
= {}
fetchSpamScoresboolean
True to buy the vendor's spam score for every linking site inside this call (one paid request of up to 1,000 sites, the price of get_backlink_spam_scores; sites scored in the last 30 days are reused free). Quote it with estimate_cost or dryRun first.
= false
industrystring
= null
maxCostMicrosinteger
Optional spending limit for this call, in micro-USD (1,000,000 = $1). A purchase that would take the call past it is refused before anything is bought. Pass the estimate from estimate_cost, or what the user agreed to spend.
dryRunboolean
True to buy nothing and get the quote instead: what the call would cost at most and what it would buy.
{
  "clientId": "string",
  "moneyTerms": [],
  "spamScores": {},
  "fetchSpamScores": false,
  "industry": null,
  "maxCostMicros": 0,
  "dryRun": true
}

Code samples

cURL
curl -X POST "https://seolyticize.com/api/v1/tools/get_backlink_health" \
  -H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
  -H "Idempotency-Key: <value>" \
  -H "Content-Type: application/json" \
  -d '{"clientId":"string","moneyTerms":[],"spamScores":{},"fetchSpamScores":false,"industry":null,"maxCostMicros":0,"dryRun":true}'
TypeScript
Python
Go
PHP
Ruby
Java

Responses

200 The tool's result under data, and its meta.
Example
{
  "data": {},
  "meta": {
    "requestId": "string",
    "costMicros": 0,
    "cached": true,
    "cachedFrom": "string",
    "dataAsOf": "string",
    "sources": [
      "string"
    ],
    "partial": true,
    "next": [
      {
        "tool": "string",
        "args": {},
        "why": "string"
      }
    ],
    "nextCursor": "string",
    "dryRun": true
  }
}
Schema
datarequired
metaobjectrequired
Beside every answer: what it cost, whether it came from cache, how fresh it is, whether it is complete, and what to call next.
Show child parameters
requestIdstringrequired
costMicrosintegerrequired
Charged by this call, micro-USD (1,000,000 = $1).
cachedbooleanrequired
True when nothing was bought.
cachedFromstring
When the oldest cached answer used was bought.
dataAsOfstring
sourcesstring[]
partialbooleanrequired
True when the data is incomplete: a running crawl, unfinished days, unread pages.
nextobject[]required
Show child parameters
toolstring
argsobject
whystring
nextCursorstring
Pass as cursor for the next page.
dryRunboolean
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
X-Request-Idstring
The id to quote about this request.
400 The body was not JSON or did not match the tool's input schema.
Example
{
  "error": "string",
  "code": "string",
  "next": "string",
  "requestId": "string"
}
Schema
errorstringrequired
A sentence written for the caller. Internal failures are reduced to 'The request could not be completed.' and never carry detail.
codestring
A stable snake_case reason to branch on; GET /api/v1/errors lists them all.
nextstring
The call or step that fixes it, when there is one.
requestIdstring
Quote it when asking about a failure.
Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
401 No key, or a key that is unknown or revoked.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
WWW-Authenticatestring
403 The key's role does not permit the tool, or the key may not reach the named client.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
404 No tool by that name.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
409 A request with this Idempotency-Key is still running.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
422 A well-formed request the product declined, with the reason — a duplicate name, a plan limit, nothing configured to run.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
429 This key has used its window.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Retry-Afterinteger
Seconds to wait before retrying.
500 The request could not be completed.

Same as 400 · POST /api/v1/tools/get_backlink_health

Headers
X-RateLimit-Limitinteger
Requests this key may make per window.
X-RateLimit-Remaininginteger
Requests left in the current window.
X-RateLimit-Resetinteger
Seconds until the current window resets.
Updated