{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/cryptoetf-today/json-schema/cryptoetf-today-funds-dto-schema.json",
  "title": "FundsDto",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/cryptoetf-today-v1-openapi.json#/components/schemas/FundsDto",
  "type": "object",
  "properties": {
    "assets": {
      "description": "One entry per asset in the response.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/AssetNetAssetsDto"
      }
    },
    "funds": {
      "description": "Every fund that has started trading.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/FundDto"
      }
    },
    "updatedAt": {
      "type": "string",
      "description": "Response generation time (UTC, ISO 8601)."
    }
  },
  "required": [
    "assets",
    "funds",
    "updatedAt"
  ],
  "$defs": {
    "AssetNetAssetsDto": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string",
          "description": "Asset ticker symbol."
        },
        "asset": {
          "type": "string",
          "description": "Internal asset id."
        },
        "totalNetAssetsUsdM": {
          "type": [
            "number",
            "null"
          ],
          "description": "Sum of the funds’ net assets in millions of USD, rounded to 0.1."
        },
        "date": {
          "type": [
            "string",
            "null"
          ],
          "description": "Day the total belongs to (YYYY-MM-DD)."
        },
        "coinsHeld": {
          "type": [
            "number",
            "null"
          ],
          "description": "Coins held by all US spot ETFs of the asset on `coinsDate`: reported by issuers, estimated where they do not publish coins."
        },
        "coinsDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "Day `coinsHeld` belongs to (YYYY-MM-DD)."
        },
        "supplySharePct": {
          "type": [
            "number",
            "null"
          ],
          "description": "`coinsHeld` as a share of the asset’s circulating supply, percent."
        }
      },
      "required": [
        "symbol",
        "asset",
        "totalNetAssetsUsdM",
        "date",
        "coinsHeld",
        "coinsDate",
        "supplySharePct"
      ]
    },
    "FundDto": {
      "type": "object",
      "properties": {
        "ticker": {
          "type": "string",
          "description": "Fund ticker."
        },
        "name": {
          "type": "string",
          "description": "Fund name."
        },
        "issuer": {
          "type": "string",
          "description": "Issuer of the fund."
        },
        "symbol": {
          "type": "string",
          "description": "Ticker symbol of the asset the fund holds."
        },
        "asset": {
          "type": "string",
          "description": "Internal asset id; works as the {asset} path parameter."
        },
        "exchange": {
          "type": "string",
          "description": "Listing exchange."
        },
        "listedAt": {
          "type": "string",
          "description": "First trading day on the exchange (YYYY-MM-DD)."
        },
        "delistedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "Last trading day of a fund that has closed (YYYY-MM-DD); null while the fund trades."
        },
        "sponsorFeePct": {
          "type": [
            "number",
            "null"
          ],
          "description": "Sponsor fee, percent per year; null if not stated."
        },
        "netAssetsUsdM": {
          "type": [
            "number",
            "null"
          ],
          "description": "Current net assets (AUM) in millions of USD, rounded to 0.1; null if unknown."
        },
        "coinsHeld": {
          "type": [
            "number",
            "null"
          ],
          "description": "Coins held by the fund, as the issuer last reported them (see `coinsHeldDate`); null when the issuer does not publish holdings in coins."
        },
        "coinsHeldDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "Day `coinsHeld` belongs to (YYYY-MM-DD). Can be a day or two older than `netAssetsDate`."
        },
        "netAssetsDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "Day the net assets belong to (YYYY-MM-DD); null if unknown."
        },
        "netAssetsBasis": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "reported",
            "repriced",
            "estimated"
          ],
          "description": "reported = the figure the issuer published for that day; repriced = the latest published figure moved to that day by the change in NAV of the other funds; estimated = coins held times the coin price, for issuers that publish no daily holdings."
        },
        "effectiveFeePct": {
          "type": [
            "number",
            "null"
          ],
          "description": "Fee charged today, percent per year: the sponsor fee, or the lower rate of a fee waiver in effect."
        },
        "feeWaiver": {
          "nullable": true,
          "description": "A fee waiver in effect today; null when there is none.",
          "allOf": [
            {
              "$ref": "#/$defs/FundFeeWaiverDto"
            }
          ]
        },
        "feeRevenueUsdMPerYear": {
          "type": [
            "number",
            "null"
          ],
          "description": "Current net assets times `effectiveFeePct`: the yearly sponsor fee revenue at today’s assets, millions of USD."
        },
        "supplySharePct": {
          "type": [
            "number",
            "null"
          ],
          "description": "Coins held by the fund (reported, or estimated where the issuer does not publish coins) as a share of the asset’s circulating supply, percent."
        },
        "staking": {
          "nullable": true,
          "description": "Staking of the fund; null when not available.",
          "allOf": [
            {
              "$ref": "#/$defs/FundStakingDto"
            }
          ]
        }
      },
      "required": [
        "ticker",
        "name",
        "issuer",
        "symbol",
        "asset",
        "exchange",
        "listedAt",
        "delistedAt",
        "sponsorFeePct",
        "netAssetsUsdM",
        "coinsHeld",
        "coinsHeldDate",
        "netAssetsDate",
        "netAssetsBasis",
        "effectiveFeePct",
        "feeWaiver",
        "feeRevenueUsdMPerYear",
        "supplySharePct",
        "staking"
      ]
    },
    "FundFeeWaiverDto": {
      "type": "object",
      "properties": {
        "feePct": {
          "type": "number",
          "description": "Fee charged under the waiver, percent per year."
        },
        "aumCapUsdM": {
          "type": [
            "number",
            "null"
          ],
          "description": "The waiver covers the first this many millions of USD of assets; null = all assets."
        },
        "until": {
          "type": [
            "string",
            "null"
          ],
          "description": "Last day of the waiver (YYYY-MM-DD)."
        }
      },
      "required": [
        "feePct",
        "aumCapUsdM",
        "until"
      ]
    },
    "FundStakingDto": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "active",
            "allowed_not_started",
            "pending_amendment",
            "no",
            "not_stakeable",
            "unknown"
          ],
          "description": "active = the fund stakes; allowed_not_started = its documents allow staking but it has not started; pending_amendment = a filing to allow staking is pending; no = it does not stake; not_stakeable = the asset cannot be staked (bitcoin, litecoin, dogecoin, zcash, XRP); unknown = not confirmed in filings."
        },
        "sharePct": {
          "type": [
            "number",
            "null"
          ],
          "description": "Share of the fund’s coins staked as the issuer last disclosed it, percent."
        },
        "sharePctDate": {
          "type": [
            "string",
            "null"
          ],
          "description": "Day `sharePct` belongs to (YYYY-MM-DD)."
        },
        "yieldNetPct": {
          "type": [
            "number",
            "null"
          ],
          "description": "Net staking yield, percent per year. See `yieldBasis` for where it comes from."
        },
        "yieldBasis": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "disclosed",
            "computed",
            "distributions"
          ],
          "description": "disclosed = published by the issuer; computed = growth of coins per share from daily issuer snapshots; distributions = the last cash payout annualised."
        },
        "rewards": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "accrue_to_nav",
            "cash_distribution",
            "mixed",
            "to_sponsor"
          ],
          "description": "How rewards reach shareholders: kept in the fund, paid out in cash, partly both, or kept by the sponsor."
        },
        "providers": {
          "description": "Staking providers named in filings or on the issuer’s page.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "filingUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "The filing the staking status is taken from."
        }
      },
      "required": [
        "status",
        "sharePct",
        "sharePctDate",
        "yieldNetPct",
        "yieldBasis",
        "rewards",
        "providers",
        "filingUrl"
      ]
    }
  }
}