{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/disban-io/json-schema/disban-io-verdict-schema.json",
  "title": "Verdict",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/disban-io-openapi.json#/components/schemas/Verdict",
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "category": {
      "type": "string",
      "enum": [
        "disposable",
        "free",
        "alias",
        "testing",
        "parked",
        "unknown"
      ]
    },
    "reason": {
      "type": "string"
    },
    "status": {
      "type": "integer",
      "const": 200
    },
    "email": {
      "type": [
        "string",
        "null"
      ],
      "description": "Request-only echo; never persisted in history."
    },
    "normalized_email": {
      "type": [
        "string",
        "null"
      ],
      "description": "Domain normalized; local-part case preserved. Null for domain-only requests and history."
    },
    "domain_authority": {
      "type": [
        "number",
        "null"
      ]
    },
    "domain_age_in_days": {
      "type": [
        "integer",
        "null"
      ]
    },
    "mx": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Fresh explicit non-null MX present. False for Null MX or confirmed absence; null when unverified. False does not exclude implicit SMTP routing."
    },
    "mx_records": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "object",
        "properties": {
          "hostname": {
            "type": "string"
          },
          "priority": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "hostname",
          "priority"
        ]
      }
    },
    "mx_providers": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "grade": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "slug",
          "type",
          "grade"
        ]
      }
    },
    "spf": {
      "type": [
        "string",
        "null"
      ]
    },
    "dmarc": {
      "type": [
        "string",
        "null"
      ]
    },
    "public_domain": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "relay_domain": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "free_subdomain": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "alias": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "role_account": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "spam": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "did_you_mean": {
      "type": [
        "string",
        "null"
      ]
    },
    "disposable": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Null for unresolved classification; never treat null as clean."
    },
    "cached": {
      "type": "boolean"
    },
    "historical_disposable": {
      "type": "boolean",
      "description": "Records existing list or reviewed seed history, independently of current classification. Can be true for currently confirmed disposable services; it is not a low-confidence flag and is not proof of current operation."
    },
    "mail_routing": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "routable",
            "invalid",
            "unknown"
          ]
        },
        "reason": {
          "type": "string"
        },
        "observed_at": {
          "type": "string",
          "format": "date-time"
        },
        "expires_at": {
          "type": "string",
          "format": "date-time"
        },
        "review_required": {
          "type": "boolean"
        }
      },
      "required": [
        "status",
        "reason"
      ]
    },
    "matched_on": {
      "type": "string"
    },
    "latency_ms": {
      "type": "number"
    }
  },
  "required": [
    "domain",
    "category",
    "reason"
  ]
}