Backlinks API documentation

REST API for backlinks, referring domains, anchors and Domain Rating. Format: JSON, UTF-8, CORS enabled.

Quick start

Base URL: https://backlinks.uk.app/api/v1. Registe-se, create an API key in your account and send your first request:

curl -H "X-API-Key: YOUR_KEY" "https://backlinks.uk.app/api/v1/overview?q=github.com"

Data: an index of 181M domains and 2.7B links, refreshed roughly monthly. Domains are normalised automatically: case and the www. prefix don't matter.

Authentication

Every request except /v1/health must include the API key in a header:

X-API-Key: bl_live_…

Also accepted: Authorization: Bearer …. Passing the key in URL parameters is not allowed: it would end up in logs and browser history.

Keep the key on your server. If you embed it in page JavaScript, any visitor can copy it. Route frontend requests through your backend.

Credits & limits

Each call costs 1–3 credits depending on the endpoint, regardless of how many rows it returns (up to 1,000). Your plan's credits for the current month are used first, then the prepaid balance. If a request fails on our side, the credits are returned. Plans & packs

HeaderMeaning
X-Credits-Costcredits this request cost
X-Credits-Remainingcredits left (plan + balance)
X-CacheHIT — served from cache (faster), MISS — fresh query to the index
X-RateLimit-Limit / -Remainingthe key's per-minute limit and what's left
X-Planfree | pro | business

Your remaining credits are also in the _credits field of every response and in /v1/account (free).

Response format and errors

Every response has an ok field. Lists include rows, total, page and per. On error: ok = false, error — a message, code — a machine-readable code.

{ "ok": true, "domain": "github.com", "summary": { "dr": 83, "backlinks": 826422352, "ref_domains": 1233241, … },
  "_credits": { "cost": 1, "plan_remaining": 1999, "balance": 0, "available": 1999, "cached": false } }

{ "ok": false, "code": "insufficient_credits", "error": "Not enough credits: this call costs 2, you have 1. …" }
HTTPcodeWhen
400invalid_param, invalid_requestinvalid or missing parameter
401missing_api_key, invalid_api_keyno key, or the key is revoked
402insufficient_creditsnot enough credits — top up or upgrade your plan
403account_blockedthe key owner's account is blocked
404not_foundunknown endpoint
429rate_limitedper-minute request limit exceeded
502 / 503upstream_error, service_unavailabletemporary problem with the data source — retry later; no credits are charged

Endpoints

All endpoints are GET /api/v1/{name}. Pagination: page (from 1) and per (10–1000). Sorting: sort + order=asc|desc.

GET/api/v1/accountgrátis

Your plan, plan credits and balance, the credit reset date and the per-minute limit.

Domain reports
GET/api/v1/overview 1 cr.

Perfil completo de um domínio: DR, backlinks, domínios de referência, principais âncoras e páginas, distribuição por DR e TLD.

q *domain (several, comma separated, for compare/intersect)
GET/api/v1/domain 1 cr.

Compact metrics for one domain: DR, backlinks, referring domains, dofollow. Best for programmatic lookups.

q *domain (several, comma separated, for compare/intersect)
GET/api/v1/refdomains 2 cr.

Domínios de referência com número de links, dofollow, DR do doador e datas da primeira e última deteção.

q *domain (several, comma separated, for compare/intersect)
sortsort field
orderasc | desc
pagepage, from 1
perrows per page, 10–1000
follow1 — dofollow, 0 — nofollow
min_drminimum donor DR
max_drmaximum donor DR
min_linksminimum links from the referring domain
tldreferring domain TLD, e.g. org
domainonly this referring domain
fromfrom date (YYYY-MM-DD)
toto date (YYYY-MM-DD)
GET/api/v1/anchors 2 cr.

Anchor distribution with link and referring-domain counts, share and dofollow.

q *domain (several, comma separated, for compare/intersect)
sortsort field
orderasc | desc
pagepage, from 1
perrows per page, 10–1000
anchorfilter by anchor
follow1 — dofollow, 0 — nofollow
min_linksminimum links
min_refdomainsminimum referring domains
GET/api/v1/anchor_cloud 2 cr.

Top anchors with share — the fast option for a word cloud.

q *domain (several, comma separated, for compare/intersect)
perrows per page, 10–1000
GET/api/v1/toppages 2 cr.

The most-linked pages of a domain with backlink and referring-domain counts.

q *domain (several, comma separated, for compare/intersect)
sortsort field
orderasc | desc
pagepage, from 1
perrows per page, 10–1000
urlfilter by URL
follow1 — dofollow, 0 — nofollow
min_backlinksminimum backlinks
min_refdomainsminimum referring domains
GET/api/v1/dr_distribution 1 cr.

Referring domains per DR bucket (0–14 … 70–100).

q *domain (several, comma separated, for compare/intersect)
GET/api/v1/tld_breakdown 1 cr.

Referring domains grouped by TLD.

q *domain (several, comma separated, for compare/intersect)
Multiple domains
GET · POST/api/v1/bulk_dr 1 cr.

DR, backlinks and referring domains for up to 2,000 domains in one call. GET ?domains=a.com,b.com or POST with one domain per line in the body. Alias: authority.

domains *domains separated by commas, spaces or new lines
GET/api/v1/compare 1 cr.

Compare up to 20 domains: DR, backlinks, referring domains, dofollow.

q *up to 20 domains, comma separated
GET/api/v1/intersect 2 cr.

Domains linking to at least two of 2–10 targets (link intersect), ranked by overlap.

q *2–10 domains, comma separated
Search & global data
GET/api/v1/keyword 3 cr.

Which sites receive links with a given anchor, ranked by relevance.

q *anchor phrase
follow1 — dofollow, 0 — nofollow
pagepage, from 1
perrows per page, 10–1000
GET/api/v1/top 1 cr.

Global ranking of domains in the link graph.

metric *pr_val | in_degree | harmonic_val | out_degree
pagepage, from 1
perrows per page, 10–1000
orderasc | desc
GET/api/v1/suggest grátis

Domain autocomplete.

q *beginning of a domain
GET/api/v1/stats grátis

Overall index size.

* — required parameter

Code examples

# curl — top referring domains by links
curl -H "X-API-Key: $KEY" "https://backlinks.uk.app/api/v1/refdomains?q=github.com&sort=links&per=20"

# curl — DR for a list of domains (POST, up to 2000)
curl -H "X-API-Key: $KEY" --data-binary $'github.com\nmoz.com\nnytimes.com' "https://backlinks.uk.app/api/v1/bulk_dr"
# Python
import os, requests
r = requests.get("https://backlinks.uk.app/api/v1/backlinks",
                 params={"q": "github.com", "per": 100, "follow": 1},
                 headers={"X-API-Key": os.environ["KEY"]}, timeout=30)
r.raise_for_status()
data = r.json()
for row in data["rows"]:
    print(row)
print("credits left:", data["_credits"]["available"])
// Node.js 18+ (on the server — not in the browser)
const res = await fetch("https://backlinks.uk.app/api/v1/overview?q=github.com", { headers: { "X-API-Key": process.env.KEY } });
const d = await res.json();
if (!d.ok) throw new Error(d.error);
console.log(d.summary.dr, d.summary.ref_domains);
// PHP
$ch = curl_init('https://backlinks.uk.app/api/v1/anchors?q=github.com&per=50');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('KEY')]]);
$d = json_decode(curl_exec($ch), true);
foreach ($d['rows'] as $a) echo $a['anchor'], PHP_EOL;

Try it

You can create a key in your account. The request goes straight from your browser. The key is not stored anywhere and is gone after a page reload. Requests from the console spend credits like any other.