Site Health Pages (deprecated)
curl --request GET \
--url https://server.promptwatch.com/api/v2/site-health \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/site-health"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/site-health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.promptwatch.com/api/v2/site-health",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.promptwatch.com/api/v2/site-health"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/site-health")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/site-health")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pages": [
{
"url": "https://example.com/no-title",
"issue": "missingTitle",
"crawledAt": "2026-05-18T12:00:00.000Z"
}
],
"total": 8,
"page": 1,
"size": 20,
"totalPages": 1
}{
"error": "Bad Request",
"code": "DATE_RANGE_TOO_LARGE",
"message": "Date range cannot exceed 92 days"
}{
"error": "Unauthorized",
"message": "Missing or invalid X-API-Key header."
}{
"code": "SITE_HEALTH_WEBSITE_NOT_CONFIGURED",
"message": "Project website is not configured"
}{
"code": "SITE_HEALTH_WEBSITE_NOT_CONFIGURED",
"message": "Project website is not configured"
}Site Health
Site Health Pages (deprecated)
deprecated
Deprecated. Pages with the legacy SEO issue types (missing title, missing description, H1 problems, thin content). Use GET /api/v2/site-audit/issues for the current site audit checks.
GET
/
site-health
Site Health Pages (deprecated)
curl --request GET \
--url https://server.promptwatch.com/api/v2/site-health \
--header 'X-API-Key: <api-key>'import requests
url = "https://server.promptwatch.com/api/v2/site-health"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://server.promptwatch.com/api/v2/site-health', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://server.promptwatch.com/api/v2/site-health",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://server.promptwatch.com/api/v2/site-health"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://server.promptwatch.com/api/v2/site-health")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://server.promptwatch.com/api/v2/site-health")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pages": [
{
"url": "https://example.com/no-title",
"issue": "missingTitle",
"crawledAt": "2026-05-18T12:00:00.000Z"
}
],
"total": 8,
"page": 1,
"size": 20,
"totalPages": 1
}{
"error": "Bad Request",
"code": "DATE_RANGE_TOO_LARGE",
"message": "Date range cannot exceed 92 days"
}{
"error": "Unauthorized",
"message": "Missing or invalid X-API-Key header."
}{
"code": "SITE_HEALTH_WEBSITE_NOT_CONFIGURED",
"message": "Project website is not configured"
}{
"code": "SITE_HEALTH_WEBSITE_NOT_CONFIGURED",
"message": "Project website is not configured"
}Authorizations
API key for authentication. Get yours from the Promptwatch dashboard under Settings > API Keys.
Query Parameters
Page number (1-based)
Required range:
x >= 1Page size
Required range:
1 <= x <= 100Filter by SEO issue type. Repeat for multiple: issueTypes=missingTitle&issueTypes=noH1. Omit for all.
Available options:
missingTitle, missingDescription, noH1, multipleH1, thinContent Response
Default Response
Pages matching the requested issue types, one entry per page and issue
Show child attributes
Show child attributes
Total page and issue entries matching the requested issue types
Page number (1-based)
Page size
Total pages for this page size