> For the complete documentation index see https://domscan.net/llms.txt. Markdown versions of every docs page are available by appending .md to the page URL.

Source: https://domscan.net/it/docs/health

# Salute del dominio

API DomScan: Controllo completo della salute per un dominio incluso DNS, SSL, raggiungibilità del sito web e intestazioni di sicurezza.

Controllo completo della salute per un dominio incluso DNS, SSL, raggiungibilità del sito web e intestazioni di sicurezza.

GET /v1/health Crediti: 3

#### Parametri di query

| Parametro | Tipo | obbligatorio |
| --- | --- | --- |
| domain | string | obbligatorio |
| details | boolean Predefinito `true` | facoltativo |

#### Campi della risposta

| Campo | Tipo |
| --- | --- |
| `domain` | string |
| `health_score` | integer |
| `grade` | string |
| `checks` | object |
| `checks.dns_configured` | boolean |
| `checks.ssl_valid` | boolean |
| `checks.email_deliverable` | boolean |
| `checks.blacklist_status` | string |
| `checks.age_years` | integer \| null |
| `checks.registration_stable` | boolean |
| `checks.dnssec_enabled` | boolean |
| `enriched` | object |
| `enriched.tls` | object |
| `enriched.tls.grade` | string |
| `enriched.tls.protocol` | string \| null |
| `enriched.tls.cipher` | string \| null |
| `enriched.tls.chain_valid` | boolean |
| `enriched.tls.days_to_expiry` | integer |
| `enriched.tls.hostname_match` | boolean \| null |
| `enriched.tls.ocsp_stapling` | boolean |
| `enriched.tls.grade_reasons[]` | string[] |
| `enriched.http_versions` | object |
| `enriched.http_versions.http1_1` | boolean |
| `enriched.http_versions.http2` | boolean |
| `enriched.http_versions.http3` | boolean |
| `enriched.http_versions.alt_svc` | string \| null |
| `enriched.http_versions.http3_advertised` | boolean |
| `enriched.http_versions.alt_svc_protocols[]` | string[] |
| `enriched.http_versions.curl_http3_supported` | boolean |
| `enriched.http_versions.h2_alpn_accepted` | string \| null |
| `enriched.http_versions.h3_alpn_accepted` | string \| null |
| `enriched.hsts` | object |
| `enriched.hsts.reachable` | boolean |
| `enriched.hsts.final_url` | string \| null |
| `enriched.hsts.status_code` | integer \| null |
| `enriched.hsts.header_present` | boolean |
| `enriched.hsts.hsts_header` | string \| null |
| `enriched.hsts.max_age` | integer \| null |
| `enriched.hsts.include_subdomains` | boolean \| null |
| `enriched.hsts.preload_directive` | boolean \| null |
| `enriched.hsts.preload_eligible` | boolean |
| `enriched.hsts.preload_status` | string \| null |
| `enriched.hsts.preloaded_domain` | string \| null |
| `enriched.hsts.preload_bulk` | boolean \| null |
| `enriched.hsts.issues[]` | string[] |
| `enriched.hsts.errors[]` | string[] |
| `enriched.smtp` | object |
| `enriched.smtp.host` | string |
| `enriched.smtp.port` | integer |
| `enriched.smtp.reachable` | boolean |
| `enriched.smtp.tls_mode` | string |
| `enriched.smtp.tls_negotiated` | boolean |
| `enriched.smtp.tls_protocol` | string |
| `enriched.smtp.tls_cipher` | string |
| `enriched.smtp.starttls_offered` | boolean \| null |
| `enriched.smtp.banner` | string |
| `enriched.smtp.error` | string |
| `enriched.smtp.fcrdns` | object |
| `enriched.smtp.fcrdns.addresses[]` | string[] |
| `enriched.smtp.fcrdns.ptr_hostnames[]` | string[] |
| `enriched.smtp.fcrdns.all_forward_confirmed` | boolean |
| `enriched.smtp.fcrdns.confirmed_addresses[]` | string[] |
| `enriched.smtp.fcrdns.unconfirmed_addresses[]` | string[] |
| `warnings[]` | string[] |
| `recommendations[]` | string[] |
| `component_summary` | object |
| `component_summary.score` | integer |
| `component_summary.grade` | string |
| `component_summary.check_count` | integer |
| `component_summary.passed_count` | integer |
| `component_summary.failed_count` | integer |
| `component_summary.warning_count` | integer |
| `component_summary.recommendation_count` | integer |
| `component_summary.confidence` | string |
| `component_summary.dns_ok` | boolean |
| `component_summary.https_ok` | boolean |
| `component_summary.email_ok` | boolean |
| `component_summary.blacklist_status` | string |
| `component_summary.dnssec_enabled` | boolean |
| `component_summary.enriched_section_count` | integer |
| `component_summary.enriched_sections[]` | string[] |
| `details` | object |
| `health_checks[]` | object[] |
| `health_checks[]` | object |
| `health_checks[].category` | string |
| `health_checks[].name` | string |
| `health_checks[].passed` | boolean |
| `health_checks[].score` | integer |
| `health_checks[].weight` | integer |
| `health_checks[].details` | string \| null |
| `checked_at` | string |
| `meta` | object |
| `meta.check_duration_ms` | integer |
| `meta.served_by` | string |

#### Richiesta di esempio

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/health?domain=example.com&details=true"
```

```javascript
const response = await fetch("https://domscan.net/v1/health?domain=example.com&details=true", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/health?domain=example.com&details=true",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/health?domain=example.com&details=true", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/health?domain=example.com&details=true")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

#### Risposta di esempio

```json
{
  "domain": "cloudflare.com",
  "health_score": 94,
  "grade": "A",
  "checks": {
    "dns_configured": true,
    "ssl_valid": true,
    "email_deliverable": true,
    "blacklist_status": "clean",
    "age_years": 15,
    "registration_stable": true,
    "dnssec_enabled": true
  },
  "enriched": {
    "tls": {
      "grade": "A+",
      "protocol": "TLSv1.3",
      "cipher": "TLS_AES_256_GCM_SHA384",
      "chain_valid": true,
      "days_to_expiry": 72,
      "hostname_match": true,
      "ocsp_stapling": true,
      "grade_reasons": [
        "TLS 1.3 enabled",
        "Valid certificate chain"
      ]
    },
    "http_versions": {
      "http1_1": true,
      "http2": true,
      "http3": true,
      "alt_svc": "h3=\":443\"; ma=86400",
      "http3_advertised": true,
      "alt_svc_protocols": [
        "h3"
      ],
      "curl_http3_supported": true,
      "h2_alpn_accepted": "h2",
      "h3_alpn_accepted": "h3"
    },
    "hsts": {
      "reachable": true,
      "final_url": "https://cloudflare.com/",
      "status_code": 200,
      "header_present": true,
      "hsts_header": "max-age=31536000; includeSubDomains",
      "max_age": 31536000,
      "include_subdomains": true,
      "preload_directive": false,
      "preload_eligible": true,
      "preload_status": "preloaded",
      "preloaded_domain": "cloudflare.com",
      "preload_bulk": false,
      "issues": [
        "missing preload directive"
      ],
      "errors": []
    }
  },
  "warnings": [],
  "recommendations": [
    "Publish the HSTS preload directive if you want preload-list eligibility."
  ],
  "checked_at": "2026-04-18T21:00:00Z",
  "details": {
    "dns": {
      "has_a_record": true,
      "has_aaaa_record": true,
      "has_nameservers": true,
      "has_mx_record": true,
      "nameservers": [
        "ns3.cloudflare.com",
        "ns5.cloudflare.com"
      ],
      "mx_records": [
        "route1.mx.cloudflare.net"
      ],
      "a_records": [
        "104.16.132.229",
        "104.16.133.229"
      ],
      "aaaa_records": [
        "2606:4700::6810:84e5",
        "2606:4700::6810:85e5"
      ]
    },
    "ssl": {
      "https_works": true,
      "certificate_valid": true,
      "days_until_expiry": 72,
      "issuer": "Google Trust Services"
    },
    "email": {
      "has_mx": true,
      "has_spf": true,
      "has_dmarc": true,
      "has_dkim_selector": true,
      "spf_record": "v=spf1 include:_spf.google.com ~all",
      "dmarc_policy": "reject",
      "mx_hosts": [
        "route1.mx.cloudflare.net"
      ]
    },
    "security": {
      "dnssec_enabled": true,
      "has_caa_record": true,
      "caa_issuers": [
        "digicert.com",
        "letsencrypt.org"
      ],
      "http_to_https_redirect": true,
      "has_security_txt": true,
      "security_txt_fields": [
        "Contact",
        "Expires",
        "Preferred-Languages"
      ],
      "security_headers": {
        "has_hsts": true,
        "hsts_max_age": 31536000,
        "has_csp": true,
        "has_x_frame_options": true,
        "has_x_content_type_options": true,
        "has_referrer_policy": true,
        "has_permissions_policy": true,
        "score": 92
      }
    },
    "age": {
      "registration_date": "2010-07-06T00:00:00Z",
      "expiration_date": "2030-07-06T00:00:00Z",
      "last_updated": "2025-07-06T00:00:00Z",
      "age_days": 5766,
      "age_years": 15,
      "days_until_expiry": 1540,
      "registrar": "Cloudflare Registrar"
    },
    "blacklist": {
      "clean": true,
      "status": "clean",
      "listed_on": [],
      "checked_lists": [
        "spamhaus",
        "surbl"
      ],
      "domain_listed_on": [],
      "ip_listed_on": [],
      "check_type": "mixed"
    }
  },
  "health_checks": [
    {
      "category": "dns",
      "name": "Authoritative DNS records present",
      "passed": true,
      "score": 100,
      "weight": 15
    }
  ],
  "meta": {
    "check_duration_ms": 248,
    "served_by": "pop=MAD country=ES"
  }
}
```

#### Codici di stato HTTP

- `200` OK
- `401` Non autorizzato
- `402` Pagamento richiesto
- `429` Troppe richieste

GET /v1/health/quick Crediti: 1

#### Parametri di query

| Parametro | Tipo | obbligatorio |
| --- | --- | --- |
| domain | string | obbligatorio |

#### Campi della risposta

| Campo | Tipo |
| --- | --- |
| `domain` | string |
| `dns_ok` | boolean \| null |
| `https_ok` | boolean \| null |
| `dns_complete` | boolean |
| `checked_at` | string |
| `confidence` | object |
| `confidence.checks_run[]` | string[] |
| `confidence.passed_count` | integer |
| `confidence.failed_count` | integer |
| `confidence.unknown_count` | integer |
| `confidence.confidence` | string |
| `confidence.dns_ok` | boolean \| null |
| `confidence.https_ok` | boolean \| null |
| `meta` | object |
| `meta.check_duration_ms` | integer |

#### Richiesta di esempio

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/health/quick?domain=example.com"
```

```javascript
const response = await fetch("https://domscan.net/v1/health/quick?domain=example.com", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
```

```python
import os
import requests

response = requests.get(
    "https://domscan.net/v1/health/quick?domain=example.com",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
```

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/health/quick?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))
}
```

```ruby
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/health/quick?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))
```

#### Risposta di esempio

```json
{
  "domain": "example.com",
  "dns_ok": true,
  "https_ok": true,
  "checked_at": "2026-04-18T21:00:00Z",
  "meta": {
    "check_duration_ms": 89
  }
}
```

#### Codici di stato HTTP

- `200` OK
- `400` Richiesta non valida
- `401` Non autorizzato
- `402` Pagamento richiesto
- `429` Troppe richieste
- `500` Errore del server
