Page weight and resource API API
Measure page bytes, requests, third parties and load timings. Use this reference to choose an operation and integrate its documented response contract.
Operations
GET /v1/page-weight
GET
/v1/page-weight
Credits: 6
Query parameters
| Parameter | Type | required |
|---|---|---|
| url | string | required |
Response fields
| Field | Type |
|---|---|
url |
string |
final_url |
string |
status |
string |
reason |
string | null |
checked_at |
string |
http_status |
integer | null |
redirect_count |
integer |
duration_ms |
integer |
resource_limit_reached |
boolean |
summary |
object |
summary.requests |
integer |
summary.blocked_requests |
integer |
summary.total_bytes |
integer |
summary.third_party_requests |
integer |
summary.third_party_bytes |
integer |
summary.transfer_bytes |
integer |
by_type[] |
object[] |
by_type[] |
object |
by_type[].type |
string |
by_type[].requests |
integer |
by_type[].bytes |
integer |
largest[] |
object[] |
largest[] |
object |
largest[].url |
string |
largest[].type |
string |
largest[].bytes |
integer |
largest[].mime_type |
string | null |
third_parties[] |
object[] |
third_parties[] |
object |
third_parties[].domain |
string |
third_parties[].requests |
integer |
third_parties[].bytes |
integer |
render_blocking[] |
object[] |
render_blocking[] |
object |
render_blocking[].url |
string |
render_blocking[].type |
string |
timing |
object |
timing.ttfb_ms |
number | null |
timing.first_contentful_paint_ms |
number | null |
timing.dom_content_loaded_ms |
number | null |
timing.load_ms |
number | null |
findings[] |
string[] |
Example request
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/page-weight?url=https%3A%2F%2Fexample.com"const response = await fetch("https://domscan.net/v1/page-weight?url=https%3A%2F%2Fexample.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/page-weight?url=https%3A%2F%2Fexample.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/page-weight?url=https%3A%2F%2Fexample.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/page-weight?url=https%3A%2F%2Fexample.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
{
"url": "https://example.com/",
"final_url": "https://example.com/",
"status": "ok",
"reason": null,
"checked_at": "2026-10-13T12:00:00.000Z",
"http_status": 200,
"redirect_count": 0,
"duration_ms": 4210,
"resource_limit_reached": false,
"summary": {
"requests": 86,
"blocked_requests": 4,
"total_bytes": 3412887,
"third_party_requests": 22,
"third_party_bytes": 1210554,
"transfer_bytes": 3425100
},
"by_type": [
{
"type": "image",
"requests": 31,
"bytes": 1840221
},
{
"type": "script",
"requests": 28,
"bytes": 1120334
}
],
"largest": [
{
"url": "https://example.com/hero.jpg",
"type": "image",
"bytes": 612004,
"mime_type": "image/jpeg"
}
],
"third_parties": [
{
"domain": "googletagmanager.com",
"requests": 3,
"bytes": 310442
}
],
"render_blocking": [
{
"url": "https://example.com/styles.css",
"type": "stylesheet"
}
],
"timing": {
"ttfb_ms": 180,
"first_contentful_paint_ms": 1240,
"dom_content_loaded_ms": 1610,
"load_ms": 3890
},
"findings": [
"page_weight_over_3mb",
"images_over_200kb",
"render_blocking_resources"
]
}
HTTP status codes
200OK400Bad Request401Unauthorized402Payment Required429Too Many Requests