API reference

Redirect Chain API

Trace the full redirect chain for a URL. Use this reference to choose an operation and integrate its documented response contract.

Operations

GET /v1/redirects View API reference

GET /v1/redirects

Operation: getRedirects Credits and authentication: 2 Authentication required
GET /v1/redirects Credits: 2

Query parameters

Parameter Type required
url string optional
domain string optional

Response fields

Field Type
original_url string
final_url string
redirect_count integer
hops[] object[]
hops[] object
hops[].url string
hops[].status_code integer
hops[].location string
hops[].server string
hops[].content_type string
https_upgrade boolean
domain_changed boolean
final_status integer
final_title string
risk_summary object
risk_summary.risk_level string
risk_summary.risk_flags[] string[]
risk_summary.hop_count integer
risk_summary.redirect_count integer
risk_summary.https_upgrade boolean
risk_summary.https_downgrade boolean
risk_summary.domain_changed boolean
risk_summary.final_status integer
risk_summary.error_present boolean
risk_summary.tracking_parameter_hops integer
total_time_ms integer
checked_at string
error string
meta object
meta.served_by string

Example request

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/redirects?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com"
const response = await fetch("https://domscan.net/v1/redirects?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com", {
  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/redirects?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com",
    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/redirects?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com", 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/redirects?url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttps%2Fexample.com&domain=example.com")
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

{
  "original_url": "http://example.com",
  "final_url": "https://www.example.com/",
  "redirect_count": 2,
  "hops": [
    {
      "url": "http://example.com",
      "status_code": 301,
      "location": "https://example.com/",
      "server": "nginx",
      "content_type": "text/html"
    },
    {
      "url": "https://example.com/",
      "status_code": 301,
      "location": "https://www.example.com/",
      "server": "nginx",
      "content_type": "text/html"
    },
    {
      "url": "https://www.example.com/",
      "status_code": 200,
      "server": "nginx",
      "content_type": "text/html; charset=UTF-8"
    }
  ],
  "https_upgrade": true,
  "domain_changed": true,
  "final_status": 200,
  "final_title": "Example Co | Home",
  "risk_summary": {
    "risk_level": "medium",
    "risk_flags": [
      "domain_changed"
    ],
    "hop_count": 3,
    "redirect_count": 2,
    "https_upgrade": true,
    "https_downgrade": false,
    "domain_changed": true,
    "final_status": 200,
    "error_present": false,
    "tracking_parameter_hops": 0
  },
  "total_time_ms": 684,
  "checked_at": "2026-10-09T10:15:30.000Z"
}

HTTP status codes

  • 200 OK
  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 429 Too Many Requests

Reference resources