{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/checkmails-eu/json-schema/checkmails-eu-result-schema.json",
  "title": "Result",
  "x-generated": "2026-11-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/checkmails-eu-openapi.yml#/components/schemas/Result",
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "format": "email"
    },
    "valid": {
      "type": "boolean",
      "description": "true ssi verdict == 'valid' (champ conservé pour compatibilité, lire verdict pour 3 états)"
    },
    "verdict": {
      "type": "string",
      "enum": [
        "valid",
        "invalid",
        "indeterminate"
      ],
      "description": "Verdict canonique à 3 états. 'indeterminate' signifie qu'aucune réponse définitive n'a pu être obtenue (4xx persistant, 421, greylist, proxy indisponible, DNS qui ne répond pas — reason dns_indisponible…). Ne PAS envoyer en froid sur 'indeterminate'."
    },
    "blocked": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    },
    "mx_host": {
      "type": "string"
    },
    "smtp_code": {
      "type": "integer"
    },
    "flags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "risk_score": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "suggestion": {
      "type": "string",
      "format": "email",
      "description": "Adresse que la personne voulait probablement taper (faute de frappe sur un fournisseur connu : gmial.com, hotmail.ma, gmail.fr…, ou structure réparée : virgule pour un point, point final). Absent s'il n'y a rien à proposer, et jamais présent sur une adresse 'valid'. Jamais appliquée par l'API : c'est au formulaire de la proposer. Renvoyé par POST /api/v1/verify uniquement. Quand la faute est sûre et que le domaine tapé ne peut pas recevoir de courrier (inexistant, sans MX, MX de parking, squat connu, gmail.*), le domaine n'est pas sondé : verdict 'invalid', reason 'faute_de_frappe_probable', flag 'typo_suspected', aucun crédit débité."
    }
  },
  "required": [
    "email",
    "valid",
    "reason"
  ]
}