Backlink Data API Documentation
The VebAPI Backlink Data API allows developers, SEO platforms, agencies, marketers, and website owners to retrieve backlink data for a domain, subdomain, or exact webpage URL.
Use this API to analyse live backlinks, recently discovered backlinks, lost backlinks, referring domains, dofollow links, redirect links, anchor text, backlink quality metrics, and other useful SEO data.
API Endpoint
GET https://vebapi.com/api/backlinks/live
The endpoint accepts query parameters and returns backlink information in JSON format.
Authentication
Every request must include your VebAPI API key in the X-API-KEY request header.
X-API-KEY: YOUR_API_KEY
Replace YOUR_API_KEY with the API key available in your VebAPI account.
Required Headers
| Header | Required | Description |
|---|---|---|
X-API-KEY |
Yes | Your VebAPI API authentication key. |
Content-Type |
Recommended | Use application/json. |
Request Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
target |
string | None | Yes | The domain, subdomain, or exact URL for which backlink data should be returned. Examples: vebapi.com, blog.vebapi.com, or https://vebapi.com/backlink-api. The API returns HTTP status code 422 when this parameter is missing. |
limit |
integer | 100 | No | The maximum number of backlink records to return. The accepted range is 1 to 1000. This parameter can be used together with offset for pagination. |
offset |
integer | 0 | No | The number of backlink records to skip before returning results. Use this parameter with limit to paginate through large backlink result sets. |
backlinks_status_type |
string | live | No | Controls which backlink status should be returned. Supported values are: live, new, lost, and all. |
include_subdomains |
boolean | true | No | When set to true, the response includes backlinks pointing to subdomains of the requested target. For example, a request for vebapi.com may also include links pointing to blog.vebapi.com. |
exclude_internal_backlinks |
boolean | false | No | When set to true, links originating from the target domain or its subdomains are excluded. This keeps only external backlinks in the response. |
include_indirect_links |
boolean | true | No | When set to true, the API includes backlinks that reach the target through redirects or canonical URLs. These links may appear with link_type: redirect. |
Backlink Status Types
| Value | Description |
|---|---|
live |
Returns backlinks that are currently active and were found during the latest available crawl. |
new |
Returns backlinks that were first discovered recently. |
lost |
Returns backlinks that previously existed but are no longer found or accessible. |
all |
Returns backlinks across all available statuses. |
Billing and Credit Usage
Backlink API usage is billed according to the requested limit.
The API charges 10 credits for every 100 requested backlink results. Credit usage is rounded up to the next group of 100.
| Requested Limit | Credits Charged |
|---|---|
| 1 to 100 | 10 credits |
| 101 to 200 | 20 credits |
| 201 to 300 | 30 credits |
| 301 to 400 | 40 credits |
| 901 to 1000 | 100 credits |
For example, a request with limit=250 is billed as three groups of 100 and therefore costs 30 credits.
Credit charges are based on the requested limit, even when fewer backlink records are available for the target.
Basic cURL Request
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Request With All Parameters
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=100&offset=0&backlinks_status_type=live&include_subdomains=true&exclude_internal_backlinks=true&include_indirect_links=true" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Example JSON Response
{
"engine": "Vebapi v8",
"node": "master",
"provider": "vebapi.com",
"request": {
"target": "vebapi.com",
"mode": "as_is",
"backlinks_status_type": "live",
"limit": 100,
"offset": 0,
"include_subdomains": true,
"exclude_internal_backlinks": true,
"include_indirect_links": true
},
"counts": {
"backlinks": {
"total": 203,
"returned": 100,
"doFollow": 90,
"fromHomePage": 0,
"toHomePage": 78,
"text": 97,
"image": 0,
"redirect": 3,
"new": 23,
"lost": 0,
"broken": 0
},
"domains": {
"total": 15,
"doFollow": 7,
"fromHomePage": 0,
"toHomePage": 11
}
},
"backlinks": [
{
"url_from": "https://www.producthunt.com/r/A7HDPGWNVC7ZQ5?utm_campaign=producthunt-api&utm_medium=api-v2&utm_source=Application%3A+PH+Deck+%28ID%3A+112811%29",
"url_to": "https://vebapi.com/",
"domain_from": "www.producthunt.com",
"domain_to": "vebapi.com",
"title": "",
"anchor": "",
"alt": "",
"nofollow": false,
"image": false,
"image_source": "",
"link_type": "redirect",
"inlink_rank": 23,
"domain_inlink_rank": 89,
"spam_score": 0,
"country": "US",
"tld_from": "com",
"is_new": false,
"is_lost": false,
"is_broken": false,
"links_count": 1,
"first_seen": "2025-09-17",
"last_visited": "2025-10-18"
}
]
}
Top-Level Response Fields
| Field | Type | Description |
|---|---|---|
engine |
string | The VebAPI engine version that processed the request. |
node |
string | The processing node that handled the API request. |
provider |
string | The API data provider. |
request |
object | Contains the normalised request parameters used to process the request. |
counts |
object | Contains aggregated backlink and referring-domain counts. |
backlinks |
array | An array containing the individual backlink records. |
Request Object Fields
| Field | Type | Description |
|---|---|---|
target |
string | The domain, subdomain, or URL being analysed. |
mode |
string | The target matching mode used by the backlink engine. A value of as_is means the supplied target was processed in its provided form. |
backlinks_status_type |
string | The requested backlink status filter. |
limit |
integer | The maximum number of backlink records requested. |
offset |
integer | The number of records skipped before returning results. |
include_subdomains |
boolean | Indicates whether backlinks pointing to target subdomains were included. |
exclude_internal_backlinks |
boolean | Indicates whether backlinks from the target's own domain and subdomains were excluded. |
include_indirect_links |
boolean | Indicates whether redirect and canonical-based indirect links were included. |
Backlink Count Fields
The counts.backlinks object contains aggregated information about the backlinks matching the request.
| Field | Type | Description |
|---|---|---|
total |
integer | The total number of backlinks found for the target that match the selected filters. |
returned |
integer | The number of backlink records included in the current response. |
doFollow |
integer | The number of backlinks that do not contain a nofollow directive. |
fromHomePage |
integer | The number of backlinks originating from a referring website's homepage. |
toHomePage |
integer | The number of backlinks pointing to the target website's homepage. |
text |
integer | The number of text-based backlinks. |
image |
integer | The number of image-based backlinks. |
redirect |
integer | The number of indirect backlinks reaching the target through redirects. |
new |
integer | The number of backlinks marked as recently discovered. |
lost |
integer | The number of backlinks that are no longer found. |
broken |
integer | The number of backlinks marked as broken or inaccessible. |
Referring Domain Count Fields
The counts.domains object contains aggregated data about referring domains.
| Field | Type | Description |
|---|---|---|
total |
integer | The total number of unique referring domains. |
doFollow |
integer | The number of unique referring domains providing at least one dofollow backlink. |
fromHomePage |
integer | The number of referring domains linking from their homepage. |
toHomePage |
integer | The number of referring domains linking to the target website's homepage. |
Backlink Record Fields
Each object inside the backlinks array represents an individual backlink.
| Field | Type | Description |
|---|---|---|
url_from |
string | The full URL of the webpage containing or originating the backlink. |
url_to |
string | The destination URL on the target website. |
domain_from |
string | The referring domain from which the backlink originates. |
domain_to |
string | The destination domain receiving the backlink. |
title |
string | The title of the referring webpage, when available. |
anchor |
string | The visible anchor text used in the backlink. |
alt |
string | The alternative text associated with an image backlink, when available. |
nofollow |
boolean | Returns true when the backlink is marked as nofollow. Returns false for a dofollow link. |
image |
boolean | Indicates whether the backlink is attached to an image. |
image_source |
string | The image source URL when the backlink is an image link. |
link_type |
string | The backlink type. Depending on the link, values may include text, image, or redirect. |
inlink_rank |
integer | A page-level link authority or strength metric for the referring webpage. |
domain_inlink_rank |
integer | A domain-level link authority or strength metric for the referring domain. |
spam_score |
integer | An estimated spam-risk score for the referring page or domain. Lower values generally indicate lower detected spam risk. |
country |
string | The detected two-letter country code associated with the referring website or server. |
tld_from |
string | The top-level domain of the referring domain, such as com, org, or co.uk. |
is_new |
boolean | Indicates whether the backlink has been classified as newly discovered. |
is_lost |
boolean | Indicates whether the backlink has been classified as lost. |
is_broken |
boolean | Indicates whether the backlink or its destination is considered broken. |
links_count |
integer | The number of matching links found from the referring page to the target. |
first_seen |
string | The date on which the backlink was first discovered. The date is returned in YYYY-MM-DD format. |
last_visited |
string | The most recent date on which the backlink source was visited or checked. The date is returned in YYYY-MM-DD format. |
Pagination
Use the limit and offset parameters to retrieve backlinks across multiple requests.
First Page
GET https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=100&offset=0
Second Page
GET https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=100&offset=100
Third Page
GET https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=100&offset=200
Continue increasing the offset until the returned backlink array is empty or until the requested records cover the value shown in counts.backlinks.total.
Retrieve New Backlinks
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&backlinks_status_type=new&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Retrieve Lost Backlinks
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&backlinks_status_type=lost&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Retrieve All Backlink Statuses
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&backlinks_status_type=all&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Retrieve Backlinks for an Exact URL
curl -X GET "https://vebapi.com/api/backlinks/live?target=https%3A%2F%2Fvebapi.com%2Fbacklink-api&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
When sending an exact URL as the target, URL-encode the value before adding it to the query string.
Retrieve External Backlinks Only
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&exclude_internal_backlinks=true&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Exclude Subdomain Backlinks
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&include_subdomains=false&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Exclude Redirect and Indirect Links
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&include_indirect_links=false&limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
JavaScript Example
const params = new URLSearchParams({
target: "vebapi.com",
limit: "100",
offset: "0",
backlinks_status_type: "live",
include_subdomains: "true",
exclude_internal_backlinks: "true",
include_indirect_links: "true"
});
const response = await fetch(
`https://vebapi.com/api/backlinks/live?${params.toString()}`,
{
method: "GET",
headers: {
"X-API-KEY": "YOUR_API_KEY",
"Content-Type": "application/json"
}
}
);
if (!response.ok) {
const errorData = await response.json();
throw new Error(
errorData.message || `Request failed with status ${response.status}`
);
}
const data = await response.json();
console.log("Total backlinks:", data.counts.backlinks.total);
console.log("Returned backlinks:", data.counts.backlinks.returned);
console.log("Backlinks:", data.backlinks);
PHP Example
<?php
$apiKey = 'YOUR_API_KEY';
$query = http_build_query([
'target' => 'vebapi.com',
'limit' => 100,
'offset' => 0,
'backlinks_status_type' => 'live',
'include_subdomains' => 'true',
'exclude_internal_backlinks' => 'true',
'include_indirect_links' => 'true'
]);
$url = 'https://vebapi.com/api/backlinks/live?' . $query;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'X-API-KEY: ' . $apiKey,
'Content-Type: application/json'
]
]);
$response = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if (curl_errno($curl)) {
throw new RuntimeException(curl_error($curl));
}
curl_close($curl);
$data = json_decode($response, true);
if ($statusCode < 200 || $statusCode >= 300) {
$message = $data['message'] ?? 'The API request failed.';
throw new RuntimeException($message);
}
echo 'Total backlinks: ' . $data['counts']['backlinks']['total'];
echo PHP_EOL;
echo 'Returned backlinks: ' . $data['counts']['backlinks']['returned'];
Laravel Example
use Illuminate\Support\Facades\Http;
$response = Http::withHeaders([
'X-API-KEY' => 'YOUR_API_KEY',
'Content-Type' => 'application/json',
])->get('https://vebapi.com/api/backlinks/live', [
'target' => 'vebapi.com',
'limit' => 100,
'offset' => 0,
'backlinks_status_type' => 'live',
'include_subdomains' => true,
'exclude_internal_backlinks' => true,
'include_indirect_links' => true,
]);
if ($response->failed()) {
throw new RuntimeException(
$response->json('message', 'The backlink API request failed.')
);
}
$data = $response->json();
$totalBacklinks = $data['counts']['backlinks']['total'];
$returnedBacklinks = $data['counts']['backlinks']['returned'];
$backlinks = $data['backlinks'];
Python Example
import requests
url = "https://vebapi.com/api/backlinks/live"
headers = {
"X-API-KEY": "YOUR_API_KEY",
"Content-Type": "application/json"
}
params = {
"target": "vebapi.com",
"limit": 100,
"offset": 0,
"backlinks_status_type": "live",
"include_subdomains": "true",
"exclude_internal_backlinks": "true",
"include_indirect_links": "true"
}
response = requests.get(
url,
headers=headers,
params=params,
timeout=60
)
response.raise_for_status()
data = response.json()
print("Total backlinks:", data["counts"]["backlinks"]["total"])
print("Returned backlinks:", data["counts"]["backlinks"]["returned"])
for backlink in data["backlinks"]:
print(backlink["url_from"], "->", backlink["url_to"])
Node.js Example
const params = new URLSearchParams({
target: "vebapi.com",
limit: "100",
offset: "0",
backlinks_status_type: "live",
include_subdomains: "true",
exclude_internal_backlinks: "true",
include_indirect_links: "true"
});
async function getBacklinks() {
const response = await fetch(
`https://vebapi.com/api/backlinks/live?${params}`,
{
headers: {
"X-API-KEY": "YOUR_API_KEY",
"Content-Type": "application/json"
}
}
);
const data = await response.json();
if (!response.ok) {
throw new Error(
data.message || `Request failed with status ${response.status}`
);
}
return data;
}
getBacklinks()
.then((data) => {
console.log(data.counts);
console.log(data.backlinks);
})
.catch((error) => {
console.error(error.message);
});
Error Responses
The API uses standard HTTP response codes to indicate whether a request was successful.
| Status Code | Meaning | Possible Cause |
|---|---|---|
200 |
Success | The request was processed successfully. |
401 |
Unauthorised | The API key is missing, invalid, expired, or inactive. |
403 |
Forbidden | The account or API key does not have permission to use the endpoint. |
422 |
Validation Error | A required parameter is missing or one of the provided parameter values is invalid. |
429 |
Too Many Requests | The request rate or account usage limit has been exceeded. |
500 |
Internal Server Error | An unexpected error occurred while processing the request. |
503 |
Service Unavailable | The backlink service is temporarily unavailable. |
Missing Target Error
When the required target parameter is missing, the API returns HTTP status code 422.
Example Invalid Request
curl -X GET "https://vebapi.com/api/backlinks/live?limit=100" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Example Error Response
{
"message": "The target field is required.",
"errors": {
"target": [
"The target field is required."
]
}
}
Invalid Limit Error
The limit parameter must be an integer between 1 and 1000.
Example Invalid Request
curl -X GET "https://vebapi.com/api/backlinks/live?target=vebapi.com&limit=1500" \
-H "X-API-KEY: YOUR_API_KEY" \
-H "Content-Type: application/json"
Example Error Response
{
"message": "The limit must not be greater than 1000.",
"errors": {
"limit": [
"The limit must not be greater than 1000."
]
}
}
Important Notes
- Backlink data depends on the most recently available crawl and indexing information.
- A backlink may be marked as live even when the referring page has changed after its most recent recorded visit.
- The
first_seenvalue indicates when the backlink was first discovered by the backlink engine, not necessarily when it was originally created. - The
last_visitedvalue indicates the latest recorded visit to the backlink source. - Empty values such as
title,anchor,alt, orimage_sourcemean that the information was unavailable or not applicable. - Redirect links may not contain conventional anchor text because they reach the target through an HTTP redirect or another indirect path.
- Boolean query parameters should be sent as
trueorfalse. - Exact URLs should be URL-encoded before being included in the request query string.
- The number of records returned may be lower than the requested limit when fewer matching backlinks are available.
Common Use Cases
- Build a backlink checker tool.
- Monitor newly discovered backlinks.
- Identify recently lost backlinks.
- Analyse referring domains.
- Measure dofollow and nofollow backlink distribution.
- Extract backlink anchor text.
- Find image and redirect backlinks.
- Monitor backlink growth over time.
- Build SEO reporting dashboards.
- Compare competitor backlink profiles.
- Detect potentially low-quality or spam-related links.
- Integrate backlink intelligence into an SEO SaaS platform.
Recommended Integration Practices
- Store your API key securely and never expose it in public client-side code.
- Send API requests from your backend server whenever possible.
- Use pagination for targets with large backlink profiles.
- Cache backlink responses when real-time rechecking is unnecessary.
- Handle HTTP status codes and API validation errors in your application.
- Set an appropriate HTTP timeout for backlink requests.
- Avoid retrying failed requests immediately without a delay, particularly after receiving HTTP status code
429or503. - Monitor credit usage when requesting high limits or processing many domains.
Frequently Asked Questions
Can I retrieve backlinks for a specific webpage?
Yes. Pass the complete webpage URL in the target parameter. The URL should be URL-encoded when included in the query string.
Can I retrieve backlinks for subdomains?
Yes. You can provide a subdomain such as blog.vebapi.com as the target. You can also use include_subdomains=true when analysing a root domain.
How do I retrieve only external backlinks?
Set exclude_internal_backlinks=true. This removes links originating from the target domain and its subdomains.
How do I retrieve lost backlinks?
Set backlinks_status_type=lost.
How do I retrieve newly discovered backlinks?
Set backlinks_status_type=new.
How can I detect dofollow backlinks?
A backlink is considered dofollow when its nofollow field is false.
How can I detect image backlinks?
Check whether the image field is true. The related image URL may be available in image_source.
How can I detect redirect backlinks?
Redirect backlinks normally contain link_type: redirect. Make sure include_indirect_links is set to true.
Why is the returned count lower than the requested limit?
The target may have fewer backlinks matching the selected filters than the requested limit. The actual number returned is available in counts.backlinks.returned.
Does the API return every backlink in a single request?
The maximum request limit is 1000. Use limit and offset pagination when the target has more matching backlinks.
How many credits does a request use?
The API charges 10 credits for every 100 requested backlink results, rounded up to the next group of 100. For example, limit=250 costs 30 credits.