Docs
Monitoring Data
Domain Health Score
Composite health score trend for a domain.
GET
/v1/domains/{id}/health-score
monitoring.read
Returns the latest SSL, DNS, and uptime sub-scores plus the composite health-score trend over the requested range.
Authentication
This endpoint requires a valid API key sent as a Bearer token, and the key must carry the scope listed above. See Authentication and Scopes for details.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | guid | Required | The domain's ID. |
| range | string | Optional | Time window: 7d, 30d, or 90d. |
Headers
| Header | Required | Description |
|---|---|---|
| Authorization | Required | Bearer token — Bearer pk_live_... |
Request Example
curl -X GET "https://api.paqet.net/v1/domains/{id}/health-score?range=30d" \
-H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new("Bearer", "pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
var response = await client.GetAsync("https://api.paqet.net/v1/domains/{id}/health-score?range=30d");
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
const response = await fetch("https://api.paqet.net/v1/domains/{id}/health-score?range=30d", {
method: "GET",
headers: {
"Authorization": "Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
});
const data = await response.json();
console.log(data);
interface ApiResponse<T> {
success: boolean;
data?: T;
code?: string;
message?: string;
}
const response = await fetch("https://api.paqet.net/v1/domains/{id}/health-score?range=30d", {
method: "GET",
headers: {
"Authorization": "Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
});
const data: ApiResponse<unknown> = await response.json();
console.log(data);
import requests
headers = {"Authorization": "Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
response = requests.get("https://api.paqet.net/v1/domains/{id}/health-score?range=30d", headers=headers)
print(response.json())
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.paqet.net/v1/domains/{id}/health-score?range=30d", nil)
req.Header.Set("Authorization", "Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, _ := io.ReadAll(resp.Body)
fmt.Println(string(data))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.paqet.net/v1/domains/{id}/health-score?range=30d",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
]
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Response Example
200 OK
{
"success": true,
"data": {
"domainId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"range": "30d",
"latestSslScore": 100,
"latestDnsScore": 100,
"latestUptimeScore": 96,
"trend": [
{ "at": "2026-09-01T00:00:00Z", "compositeScore": 97 }
]
}
}
Error Responses
| Status | Code | Meaning |
|---|---|---|
| 401 | API_KEY_INVALID | The API key is missing, malformed, or doesn't match any active key. |
| 401 | API_KEY_REVOKED | The API key was manually revoked and can never be reactivated. |
| 401 | API_KEY_EXPIRED | The API key's expiration date has passed. |
| 403 | PLAN_EXPIRED | Your Enterprise subscription is no longer active. |
| 403 | ENTERPRISE_REQUIRED | The Public API is only available on the Enterprise plan. |
| 403 | SCOPE_REQUIRED | The API key doesn't have the scope required for this endpoint. |
| 429 | RATE_LIMIT_EXCEEDED | The API key has exceeded its request limit for the current window. |
| 404 | RESOURCE_NOT_FOUND | The requested resource does not exist. |
| 422 | VALIDATION_ERROR | One or more request parameters failed validation. |
| 500 | INTERNAL_ERROR | An unexpected error occurred on Paqet's side. |
Rate Limits
This endpoint counts against your API key's standard request limit. See Rate Limits for current limits, response headers, and retry guidance.
Notes
- Requires the monitoring.read scope. Existing keys don't have it by default - add it to a key from the Developer Portal (Edit Scopes).
- Only returns data for the organization the API key belongs to. IDs from another organization return RESOURCE_NOT_FOUND, never another org's data.
- Monitoring reads count against a separate per-key rate-limit bucket, not the diagnostic-tool bucket - see Rate Limits.
Related APIs
Try this endpoint
Run it live from the Playground using your own API key.