> 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/fr/docs/reputation

# Réputation du Domaine

Obtenez un score de réputation (0-100) pour n'importe quel domaine à partir de plusieurs signaux de sécurité et de confiance.

Obtenez un score de réputation (0-100) pour n'importe quel domaine à partir de plusieurs signaux de sécurité et de confiance. L'API vérifie la configuration de sécurité DNS, les certificats SSL, les listes noires (Spamhaus, SURBL), le renseignement sur les menaces (URLhaus), l'authentification des e-mails et la présence web pour calculer un score pondéré avec des recommandations exploitables.

GET /v1/reputation Crédits: 3

#### Paramètres de requête

| Paramètre | Type | requis |
| --- | --- | --- |
| domain | string | requis |

#### Champs de réponse

| Champ | Type |
| --- | --- |
| `domain` | string |
| `reputation_score` | integer |
| `grade` | string |
| `risk_level` | string |
| `reputation_score_confidence` | string |
| `grade_capped_by_parking` | boolean |
| `factors` | object |
| `factors.age` | object |
| `factors.dns_security` | object |
| `factors.ssl_certificate` | object |
| `factors.hosting` | object |
| `factors.web_presence` | object |
| `factors.blacklists` | object |
| `factors.email_config` | object |
| `recommendations[]` | object[] |
| `recommendations[]` | object |
| `recommendations[].priority` | string |
| `recommendations[].category` | string |
| `recommendations[].action` | string |
| `recommendations[].impact` | string |
| `evidence_summary` | object |
| `evidence_summary.checks_performed` | integer |
| `evidence_summary.cache_status` | string |
| `evidence_summary.confidence` | string |
| `evidence_summary.risk_level` | string |
| `evidence_summary.factor_count` | integer |
| `evidence_summary.scored_factor_count` | integer |
| `evidence_summary.passing_factor_count` | integer |
| `evidence_summary.warning_factor_count` | integer |
| `evidence_summary.failing_factor_count` | integer |
| `evidence_summary.lowest_scoring_factors[]` | object[] |
| `evidence_summary.lowest_scoring_factors[]` | object |
| `evidence_summary.lowest_scoring_factors[].name` | string |
| `evidence_summary.lowest_scoring_factors[].score` | number \| null |
| `evidence_summary.lowest_scoring_factors[].weight` | number \| null |
| `evidence_summary.blacklist_listed_count` | integer |
| `evidence_summary.recommendation_count` | integer |
| `evidence_summary.high_priority_recommendation_count` | integer |
| `evidence_summary.grade_capped_by_parking` | boolean |
| `meta` | object |
| `meta.query_time_ms` | integer |
| `meta.checks_performed` | integer |
| `meta.cached` | boolean |
| `meta.served_by` | string |

#### Exemple de requête

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

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

#### Exemple de réponse

```json
{
  "domain": "example.com",
  "reputation_score": 69,
  "grade": "C",
  "risk_level": "medium",
  "reputation_score_confidence": "high",
  "grade_capped_by_parking": true,
  "factors": {
    "age": {
      "score": 84,
      "weight": 0.1,
      "details": {
        "age_days": 5840
      }
    },
    "dns_security": {
      "score": 80,
      "weight": 0.2,
      "details": {
        "dnssec": false,
        "spf": true,
        "dmarc": true,
        "dmarc_policy": "reject"
      }
    },
    "ssl_certificate": {
      "score": 92,
      "weight": 0.2,
      "details": {
        "valid": true,
        "error": null,
        "grade": "A",
        "chain_valid": true,
        "min_tls_version": "TLSv1.3"
      }
    },
    "hosting": {
      "score": 35,
      "weight": 0.1,
      "details": {
        "has_a_records": true,
        "a_record_count": 2,
        "parked": true
      }
    },
    "web_presence": {
      "score": 20,
      "weight": 0.15,
      "details": {
        "has_website": true,
        "redirects_to_https": true,
        "response_time_ms": 87,
        "parked": true,
        "for_sale": false,
        "parking_provider": "Example Parking"
      }
    },
    "blacklists": {
      "score": 100,
      "weight": 0.1,
      "details": {
        "listed": false,
        "threat_level": "none",
        "domain_sources": [],
        "ip_sources": []
      }
    },
    "email_config": {
      "score": 100,
      "weight": 0.15,
      "details": {
        "has_mx": true,
        "has_spf": true,
        "has_dmarc": true,
        "mx_count": 2
      }
    }
  },
  "recommendations": [
    {
      "priority": "high",
      "category": "web_presence",
      "action": "Move the domain off parking if it is intended for customer traffic.",
      "impact": "+10 points"
    }
  ],
  "meta": {
    "query_time_ms": 187,
    "checks_performed": 7,
    "cached": false,
    "served_by": "pop=MAD country=ES"
  }
}
```

#### Codes de statut HTTP

- `200` OK
- `400` Requête incorrecte
- `401` Non autorisé
- `402` Paiement requis
- `429` Trop de requêtes

POST /v1/reputation/bulk

#### Corps de la requête

| Champ | Type | Description |
| --- | --- | --- |
| domains requis | string[] | Tableau de noms de domaines complets à vérifier |

Utilisez POST /v1/reputation/bulk pour noter plusieurs domaines en une seule requête. Envoyez un corps JSON avec un tableau domains. Prend en charge jusqu'à 3 domaines par requête car chaque analyse déclenche plusieurs contrôles de sécurité.

#### Exemple de requête

```bash
curl -H "X-API-Key: your-api-key" -X POST "https://domscan.net/v1/reputation/bulk"   -H "Content-Type: application/json"   -d '{
    "domains": ["stripe.com", "cloudflare.com", "example.com"]
  }'
```

#### Exemple de réponse

```json
{
  "results": [
    {
      "domain": "stripe.com",
      "reputation_score": 92,
      "grade": "A+",
      "risk_level": "low",
      "factors": {
        "dns_security": { "score": 100, "weight": 0.2 },
        "ssl_certificate": { "score": 100, "weight": 0.2 }
      },
      "recommendations": [],
      "meta": {
        "query_time_ms": 1250,
        "checks_performed": 7,
        "cached": false
      }
    },
    {
      "domain": "not a domain",
      "error": {
        "code": "INVALID_DOMAIN",
        "message": "Invalid domain format"
      }
    }
  ],
  "summary": {
    "total": 2,
    "successful": 1,
    "failed": 1,
    "cached": 0,
    "query_time_ms": 1310
  },
  "meta": {
    "served_by": "pop=MAD country=ES"
  }
}
```

#### Champs de réponse

| Champ | Type |
| --- | --- |
| `results[]` | object[] |
| `results[]` | object |
| `results[].domain` | string |
| `results[].reputation_score` | integer |
| `results[].grade` | string |
| `results[].risk_level` | string |
| `results[].reputation_score_confidence` | string |
| `results[].grade_capped_by_parking` | boolean |
| `results[].factors` | object |
| `results[].evidence_summary` | object |
| `results[].evidence_summary.checks_performed` | integer |
| `results[].evidence_summary.cache_status` | string |
| `results[].evidence_summary.confidence` | string |
| `results[].evidence_summary.risk_level` | string |
| `results[].evidence_summary.factor_count` | integer |
| `results[].evidence_summary.scored_factor_count` | integer |
| `results[].evidence_summary.passing_factor_count` | integer |
| `results[].evidence_summary.warning_factor_count` | integer |
| `results[].evidence_summary.failing_factor_count` | integer |
| `results[].evidence_summary.lowest_scoring_factors[]` | object[] |
| `results[].evidence_summary.lowest_scoring_factors[]` | object |
| `results[].evidence_summary.lowest_scoring_factors[].name` | string |
| `results[].evidence_summary.lowest_scoring_factors[].score` | number \| null |
| `results[].evidence_summary.lowest_scoring_factors[].weight` | number \| null |
| `results[].evidence_summary.blacklist_listed_count` | integer |
| `results[].evidence_summary.recommendation_count` | integer |
| `results[].evidence_summary.high_priority_recommendation_count` | integer |
| `results[].evidence_summary.grade_capped_by_parking` | boolean |
| `results[].recommendations[]` | object[] |
| `results[].recommendations[]` | object |
| `results[].meta` | object |
| `results[].error` | object |
| `results[].error.code` | string |
| `results[].error.message` | string |
| `summary` | object |
| `summary.total` | integer |
| `summary.successful` | integer |
| `summary.failed` | integer |
| `summary.cached` | integer |
| `summary.query_time_ms` | integer |
| `meta` | object |
| `meta.served_by` | string |
