{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/atlasyield-club/json-schema/atlasyield-club-vault-metrics-schema.json",
  "title": "VaultMetrics",
  "description": "Tier 1 live metrics for one vault. Separate from the Atlas Score, never folded into the composite.",
  "x-generated": "2026-11-02",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/atlasyield-club-openapi.json#/components/schemas/VaultMetrics",
  "type": "object",
  "properties": {
    "vaultId": {
      "type": "string",
      "description": "Stable identifier: protocol:chainId:address."
    },
    "chainId": {
      "type": "integer"
    },
    "yieldQuality": {
      "type": [
        "number",
        "null"
      ],
      "description": "0-100. How much of the headline APY comes from the vault's own economics rather than transient incentives. Null when the APY split is unavailable."
    },
    "yieldQualityReason": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why that value was assigned, or why it is null."
    },
    "exitSafety": {
      "type": [
        "number",
        "null"
      ],
      "description": "0-100. How safely a position can be exited at size. Null when the underlying liquidity data is unavailable."
    },
    "exitSafetyReason": {
      "type": [
        "string",
        "null"
      ],
      "description": "Why that value was assigned, or why it is null."
    },
    "scorerRunDate": {
      "type": "string",
      "format": "date",
      "description": "The day (UTC) these metrics were computed."
    }
  }
}