Page links and broken link checker API API
List page links and find broken ones with bounded status checks. Use this reference to choose an operation and integrate its documented response contract.
Operations
GET /v1/links
GET
/v1/links
Credits: 2-6
Query parameters
| Parameter | Type | required |
|---|---|---|
| url | string | required |
| render | boolean | optional |
| check | boolean | optional |
| type |
string
Allowed values
allinternalexternal
Default
all
|
optional |
| limit |
integer
Default
200
|
optional |
Response fields
| Field | Type |
|---|---|
url |
string |
final_url |
string |
status |
string |
reason |
string | null |
checked_at |
string |
fetch |
object |
fetch.http_status |
integer | null |
fetch.final_url |
string |
fetch.content_type |
string | null |
fetch.bytes |
integer |
fetch.truncated |
boolean |
fetch.redirect_count |
integer |
fetch.duration_ms |
integer |
fetch.rendered |
boolean |
summary |
object |
summary.total |
integer |
summary.internal |
integer |
summary.external |
integer |
summary.nofollow |
integer |
summary.empty_anchor |
integer |
summary.unique_urls |
integer |
summary.external_domains |
integer |
links[] |
object[] |
links[] |
object |
links[].url |
string |
links[].text |
string |
links[].type |
string |
links[].rel[] |
string[] |
links[].nofollow |
boolean |
links[].image_alt |
string | null |
has_more |
boolean |
check |
object |
check.unique_targets |
integer |
check.checked |
integer |
check.not_checked |
integer |
check.ok |
integer |
check.redirect |
integer |
check.broken |
integer |
check.unknown |
integer |
check.unchecked |
integer |
check.skipped |
integer |
check.results[] |
object[] |
check.results[] |
object |
check.results[].url |
string |
check.results[].state |
string |
check.results[].http_status |
integer | null |
check.results[].final_url |
string | null |
check.results[].redirect_count |
integer |
check.results[].reason |
string | null |
Example request
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/links?url=https%3A%2F%2Fexample.com&render=false&check=false&type=all&limit=25"const response = await fetch("https://domscan.net/v1/links?url=https%3A%2F%2Fexample.com&render=false&check=false&type=all&limit=25", {
headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);import os
import requests
response = requests.get(
"https://domscan.net/v1/links?url=https%3A%2F%2Fexample.com&render=false&check=false&type=all&limit=25",
headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/links?url=https%3A%2F%2Fexample.com&render=false&check=false&type=all&limit=25", nil)
if err != nil {
panic(err)
}
req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(resp.Status, string(data))
}require "json"
require "net/http"
uri = URI("https://domscan.net/v1/links?url=https%3A%2F%2Fexample.com&render=false&check=false&type=all&limit=25")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))Example response
{
"url": "https://example.com/shoes/trail-runner",
"final_url": "https://example.com/shoes/trail-runner",
"status": "ok",
"reason": null,
"checked_at": "2026-10-13T12:00:00.000Z",
"fetch": {
"http_status": 200,
"final_url": "https://example.com/shoes/trail-runner",
"content_type": "text/html",
"bytes": 3535,
"truncated": false,
"redirect_count": 0,
"duration_ms": 412,
"rendered": false
},
"summary": {
"total": 7,
"internal": 5,
"external": 2,
"nofollow": 1,
"empty_anchor": 1,
"unique_urls": 7,
"external_domains": 2
},
"links": [
{
"url": "https://example.com/",
"text": "Home",
"type": "internal",
"rel": [],
"nofollow": false,
"image_alt": null
},
{
"url": "https://example.com/shoes",
"text": "Shoes",
"type": "internal",
"rel": [],
"nofollow": false,
"image_alt": null
},
{
"url": "https://example.com/missing-page",
"text": "Old sale",
"type": "internal",
"rel": [],
"nofollow": false,
"image_alt": null
}
],
"has_more": true,
"check": {
"unique_targets": 7,
"checked": 7,
"not_checked": 0,
"ok": 4,
"redirect": 1,
"broken": 1,
"unknown": 1,
"unchecked": 0,
"skipped": 0,
"results": [
{
"url": "https://example.com/",
"http_status": 200,
"final_url": "https://example.com/",
"redirect_count": 0,
"state": "ok",
"reason": null
},
{
"url": "https://example.com/shoes",
"http_status": 200,
"final_url": "https://example.com/shoes",
"redirect_count": 1,
"state": "redirect",
"reason": null
},
{
"url": "https://example.com/missing-page",
"http_status": 404,
"final_url": "https://example.com/missing-page",
"redirect_count": 0,
"state": "broken",
"reason": "http_404"
},
{
"url": "https://partner.example.org/fit-guide",
"http_status": 403,
"final_url": "https://partner.example.org/fit-guide",
"redirect_count": 0,
"state": "unknown",
"reason": "blocked"
}
]
}
}
HTTP status codes
200OK400Bad Request401Unauthorized402Payment Required429Too Many Requests