> 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/es/docs/products/security-rating

# API de API de calificación de seguridad de dominios

Puntúa la postura de seguridad de un dominio de la A a la F. Usa esta referencia para elegir una operación e integrar su contrato de respuesta documentado.

[Ver página del producto](https://domscan.net/es/security-rating-api)

## Operaciones

GET `/v1/security-rating` [Ver referencia de API](https://domscan.net/es/docs/products/security-rating#getSecurityRating)

## GET `/v1/security-rating`

Operación: `getSecurityRating`
Créditos y autenticación: 5
Autenticación obligatoria

GET /v1/security-rating Créditos: 5

#### Parámetros de consulta

| Parámetro | Tipo | obligatorio |
| --- | --- | --- |
| domain | string | obligatorio |

#### Campos de respuesta

| Campo | Tipo |
| --- | --- |
| `domain` | string |
| `status` | string |
| `score` | integer \| null |
| `grade` | string \| null |
| `checks_unknown` | integer |
| `score_confidence` | string |
| `weight_covered` | integer |
| `capped_by_critical_finding` | boolean |
| `categories[]` | object[] |
| `categories[]` | object |
| `categories[].id` | string |
| `categories[].status` | string |
| `categories[].score` | integer \| null |
| `categories[].weight` | integer |
| `categories[].unknown_reason` | string \| null |
| `categories[].findings[]` | object[] |
| `categories[].findings[]` | object |
| `categories[].findings[].code` | string |
| `categories[].findings[].severity` | string |
| `findings[]` | object[] |
| `findings[]` | object |
| `findings[].category` | string |
| `findings[].code` | string |
| `findings[].severity` | string |
| `sources` | object |
| `sources.tls` | object |
| `sources.tls.grade` | string \| null |
| `sources.tls.score` | integer \| null |
| `sources.tls.checked_at` | string |
| `sources.http_headers` | object |
| `sources.http_headers.status` | string |
| `sources.http_headers.grade` | string \| null |
| `sources.http_headers.score` | integer \| null |
| `sources.http_headers.final_url` | string \| null |
| `sources.http_headers.http_status` | integer \| null |
| `sources.dns_security` | object |
| `sources.dns_security.score` | integer \| null |
| `sources.dns_security.grade` | string \| null |
| `sources.dns_security.checks_unknown` | integer |
| `sources.dns_security.blocklists_checked` | integer |
| `sources.dns_security.blocklists_unknown` | integer |
| `sources.security_txt` | object |
| `sources.security_txt.status` | string |
| `sources.security_txt.location` | string \| null |
| `checked_at` | string |
| `duration_ms` | integer |
| `rating_version` | string |
| `caveats[]` | string[] |

#### Solicitud de ejemplo

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

```javascript
const response = await fetch("https://domscan.net/v1/security-rating?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/security-rating?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/security-rating?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/security-rating?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))
```

#### Respuesta de ejemplo

```json
{
  "domain": "github.com",
  "status": "partial",
  "score": 81,
  "grade": "B",
  "checks_unknown": 1,
  "score_confidence": "medium",
  "weight_covered": 85,
  "capped_by_critical_finding": false,
  "categories": [
    {
      "id": "tls",
      "status": "scored",
      "score": 85,
      "weight": 30,
      "unknown_reason": null,
      "findings": []
    },
    {
      "id": "http_headers",
      "status": "scored",
      "score": 85,
      "weight": 20,
      "unknown_reason": null,
      "findings": [
        {
          "code": "header_permissions_policy_missing",
          "severity": "info"
        },
        {
          "code": "header_cross_origin_opener_policy_missing",
          "severity": "info"
        },
        {
          "code": "header_cross_origin_resource_policy_missing",
          "severity": "info"
        }
      ]
    },
    {
      "id": "email_authentication",
      "status": "scored",
      "score": 85,
      "weight": 20,
      "unknown_reason": null,
      "findings": []
    },
    {
      "id": "dns",
      "status": "scored",
      "score": 40,
      "weight": 10,
      "unknown_reason": null,
      "findings": [
        {
          "code": "dnssec_not_enabled",
          "severity": "low"
        }
      ]
    },
    {
      "id": "reputation",
      "status": "unknown",
      "score": null,
      "weight": 15,
      "unknown_reason": "no_evidence",
      "findings": []
    },
    {
      "id": "disclosure",
      "status": "scored",
      "score": 100,
      "weight": 5,
      "unknown_reason": null,
      "findings": []
    }
  ],
  "findings": [
    {
      "category": "dns",
      "code": "dnssec_not_enabled",
      "severity": "low"
    },
    {
      "category": "http_headers",
      "code": "header_permissions_policy_missing",
      "severity": "info"
    },
    {
      "category": "http_headers",
      "code": "header_cross_origin_opener_policy_missing",
      "severity": "info"
    },
    {
      "category": "http_headers",
      "code": "header_cross_origin_resource_policy_missing",
      "severity": "info"
    }
  ],
  "sources": {
    "tls": {
      "grade": "A",
      "score": 85,
      "checked_at": "2026-10-18T04:14:57.278Z"
    },
    "http_headers": {
      "status": "ok",
      "grade": "B",
      "score": 85,
      "final_url": "https://github.com/",
      "http_status": 200
    },
    "dns_security": {
      "score": 70,
      "grade": "B",
      "checks_unknown": 0,
      "blocklists_checked": 3,
      "blocklists_unknown": 1
    },
    "security_txt": {
      "status": "valid",
      "location": "well_known"
    }
  },
  "checked_at": "2026-10-18T04:14:58.507Z",
  "duration_ms": 2114,
  "rating_version": "2026-10-18.1",
  "caveats": [
    "passive_checks_only",
    "not_a_penetration_test",
    "tls_protocols_inferred",
    "unknown_categories_excluded_from_score"
  ]
}
```

#### Códigos de estado HTTP

- `200` OK
- `400` Solicitud incorrecta
- `401` No autorizado
- `402` Pago requerido
- `429` Demasiadas solicitudes

## Recursos de referencia

[OpenAPI 3.0](https://domscan.net/v1/openapi.json)
[Postman](https://domscan.net/v1/postman.json)
[MCP](https://domscan.net/es/mcp-domain-checker)
