Properties
| Name | Type | Description |
|---|---|---|
| data | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/philidor-io/json-schema/philidor-io-graph-breach-response-schema.json",
"title": "GraphBreachResponse",
"x-generated": "2026-10-30",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/philidor-io-openapi.json#/components/schemas/GraphBreachResponse",
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"schemaVersion": {
"type": "number",
"enum": [
2
],
"description": "Authoritative breach document schema. Version 2 requires Morpho, Aave, and Spark blocks."
},
"observedAt": {
"type": "string",
"description": "Deprecated legacy alias of protocols[id=morpho].observedAt; use protocols[] exclusively.",
"deprecated": true
},
"protocolId": {
"type": "string",
"description": "Deprecated legacy alias identifying protocols[id=morpho]; use protocols[] exclusively.",
"deprecated": true
},
"source": {
"type": "string",
"enum": [
"protocol_api"
],
"description": "Deprecated legacy alias of protocols[id=morpho].source; use protocols[] exclusively.",
"deprecated": true
},
"maturity": {
"type": "string",
"enum": [
"preview"
],
"description": "Deprecated legacy alias of protocols[id=morpho].maturity; use protocols[] exclusively.",
"deprecated": true
},
"paramsAsOf": {
"type": "string",
"description": "Deprecated legacy alias of protocols[id=morpho].paramsAsOf; use protocols[] exclusively.",
"deprecated": true
},
"shockPcts": {
"type": "array",
"items": {
"type": "number"
},
"description": "Deprecated legacy alias of protocols[id=morpho].shockPcts; use protocols[] exclusively.",
"deprecated": true
},
"coverage": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"full",
"truncated",
"interval_sampled",
"unavailable"
]
},
"lowerBound": {
"type": "boolean",
"description": "Present only for point-in-time snapshots where omitted accounts can only add debt/loss. Omitted for all interval-sampled data."
},
"methodology": {
"type": "string",
"enum": [
"largest-position-api-window",
"top-holder-sample"
]
},
"reason": {
"type": "string"
},
"accountsDiscovered": {
"type": "number"
},
"accountsSampled": {
"type": "number"
},
"accountsFetched": {
"type": "number"
}
},
"required": [
"status",
"methodology",
"reason"
],
"description": "Deprecated legacy alias of protocols[id=morpho].coverage; use protocols[] exclusively.",
"deprecated": true
},
"chains": {
"type": "array",
"items": {
"type": "object",
"properties": {
"chainId": {
"type": "number"
},
"marketsCovered": {
"type": "number"
},
"totalBorrowUsd": {
"type": "string"
},
"underwaterDebtUsd": {
"type": "string"
},
"positionsTotal": {
"type": "number"
},
"positionsFetched": {
"type": "number"
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"liquidatableLoUsd": {
"type": "string"
},
"liquidatableHiUsd": {
"type": "string"
},
"projectedBadDebtUsd": {
"type": "string",
"description": "Central estimate of supplier shortfall (bad debt) at this shock — the part of the liquidatable debt that becomes actual loss. Not a bound."
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from projectedBadDebtUsd because collateral valuation was incomplete. This is an abstention bucket, not projected loss."
}
},
"required": [
"shockPct",
"liquidatableLoUsd",
"liquidatableHiUsd"
]
}
}
},
"required": [
"chainId",
"marketsCovered",
"totalBorrowUsd",
"underwaterDebtUsd",
"shocks"
]
},
"description": "Deprecated legacy alias of protocols[id=morpho].chains; use protocols[] exclusively.",
"deprecated": true
},
"topMarkets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"marketKey": {
"type": "string"
},
"chainId": {
"type": "number"
},
"lltv": {
"type": "string"
},
"totalBorrowUsd": {
"type": "string"
},
"totalCollateralUsd": {
"type": "string"
},
"positionCount": {
"type": "number"
},
"coverage": {
"type": "string",
"enum": [
"full",
"truncated",
"interval_sampled"
]
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"liquidatableLoUsd": {
"type": "string"
},
"liquidatableHiUsd": {
"type": "string"
},
"projectedBadDebtUsd": {
"type": "string",
"description": "Central estimate of supplier shortfall (bad debt) at this shock — the part of the liquidatable debt that becomes actual loss. Not a bound."
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from projectedBadDebtUsd because collateral valuation was incomplete. This is an abstention bucket, not projected loss."
}
},
"required": [
"shockPct",
"liquidatableLoUsd",
"liquidatableHiUsd"
]
}
},
"collateral": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"symbol": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
}
},
"required": [
"address",
"symbol",
"category"
]
},
"loan": {
"type": [
"object",
"null"
],
"properties": {
"address": {
"type": "string"
},
"symbol": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
}
},
"required": [
"address",
"symbol",
"category"
]
},
"oracle": {
"type": "object",
"properties": {
"address": {
"type": [
"string",
"null"
]
}
},
"required": [
"address"
]
},
"liquidationIncentive": {
"type": [
"string",
"null"
]
},
"worstHealthFactor": {
"type": [
"string",
"null"
]
},
"marketHealthFactor": {
"type": [
"string",
"null"
]
},
"liquidationHistory": {
"type": "object",
"properties": {
"lastAt": {
"type": [
"string",
"null"
]
},
"count90d": {
"type": "number"
},
"badDebtUsd90d": {
"type": "string"
}
},
"required": [
"lastAt",
"count90d",
"badDebtUsd90d"
]
},
"whyNotLiquidated": {
"type": "string",
"enum": [
"healthy",
"unpriceable-collateral",
"actively-liquidated",
"collateral-exhausted",
"liquidator-incentive-below-cost",
"oracle-dependency"
]
}
},
"required": [
"marketKey",
"chainId",
"lltv",
"totalBorrowUsd",
"totalCollateralUsd",
"positionCount",
"coverage",
"shocks"
]
},
"description": "Deprecated legacy alias of protocols[id=morpho].topMarkets; use protocols[] exclusively.",
"deprecated": true
},
"topVaultExposures": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vaultId": {
"type": "string"
},
"vaultName": {
"type": "string"
},
"chainId": {
"type": "number"
},
"marketKey": {
"type": "string"
},
"vaultSupplyUsd": {
"type": "string"
},
"marketUnderwaterUsd": {
"type": "string"
},
"marketTotalBorrowUsd": {
"type": "string"
}
},
"required": [
"vaultId",
"vaultName",
"chainId",
"marketKey",
"vaultSupplyUsd",
"marketUnderwaterUsd",
"marketTotalBorrowUsd"
]
},
"description": "Deprecated legacy alias of protocols[id=morpho].topVaultExposures; use protocols[] exclusively. vaultSupplyUsd is an exposure ceiling, not a loss estimate.",
"deprecated": true
},
"vaultBadDebt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vaultId": {
"type": "string"
},
"vaultName": {
"type": "string"
},
"chainId": {
"type": "number"
},
"suppliedUsd": {
"type": "string"
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"projectedBadDebtUsd": {
"type": "string"
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from the vault projection because borrower collateral valuation was incomplete."
}
},
"required": [
"shockPct",
"projectedBadDebtUsd"
]
}
}
},
"required": [
"vaultId",
"vaultName",
"chainId",
"suppliedUsd",
"shocks"
]
},
"description": "Deprecated legacy alias of protocols[id=morpho].vaultBadDebt; use protocols[] exclusively. This is a central estimate, not a bound.",
"deprecated": true
},
"protocols": {
"type": "array",
"items": {
"type": "object",
"properties": {
"observedAt": {
"type": "string"
},
"protocolId": {
"type": "string",
"enum": [
"morpho",
"aave",
"spark"
]
},
"source": {
"type": "string",
"enum": [
"protocol_api",
"onchain_rpc",
"unavailable"
]
},
"maturity": {
"type": "string",
"enum": [
"preview"
]
},
"paramsAsOf": {
"type": "string",
"description": "Point-in-time liquidation-parameter lineage. May coexist with an interval-sampled position sweep because it pins a separate durable input."
},
"sweepStartedAt": {
"type": "string",
"description": "Start of an interval-sampled position/account sweep."
},
"sweepCompletedAt": {
"type": "string",
"description": "Completion of an interval-sampled position/account sweep."
},
"shockPcts": {
"type": "array",
"items": {
"type": "number"
}
},
"coverage": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"full",
"truncated",
"interval_sampled",
"unavailable"
]
},
"lowerBound": {
"type": "boolean",
"description": "Present only for point-in-time snapshots where omitted accounts can only add debt/loss. Omitted for all interval-sampled data."
},
"methodology": {
"type": "string",
"enum": [
"largest-position-api-window",
"top-holder-sample"
]
},
"reason": {
"type": "string"
},
"accountsDiscovered": {
"type": "number"
},
"accountsSampled": {
"type": "number"
},
"accountsFetched": {
"type": "number"
}
},
"required": [
"status",
"methodology",
"reason"
]
},
"chains": {
"type": "array",
"items": {
"type": "object",
"properties": {
"chainId": {
"type": "number"
},
"marketsCovered": {
"type": "number"
},
"totalBorrowUsd": {
"type": "string"
},
"underwaterDebtUsd": {
"type": "string"
},
"positionsTotal": {
"type": "number"
},
"positionsFetched": {
"type": "number"
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"liquidatableLoUsd": {
"type": "string"
},
"liquidatableHiUsd": {
"type": "string"
},
"projectedBadDebtUsd": {
"type": "string",
"description": "Central estimate of supplier shortfall (bad debt) at this shock — the part of the liquidatable debt that becomes actual loss. Not a bound."
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from projectedBadDebtUsd because collateral valuation was incomplete. This is an abstention bucket, not projected loss."
}
},
"required": [
"shockPct",
"liquidatableLoUsd",
"liquidatableHiUsd"
]
}
}
},
"required": [
"chainId",
"marketsCovered",
"totalBorrowUsd",
"underwaterDebtUsd",
"shocks"
]
}
},
"topMarkets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"marketKey": {
"type": "string"
},
"chainId": {
"type": "number"
},
"lltv": {
"type": "string"
},
"totalBorrowUsd": {
"type": "string"
},
"totalCollateralUsd": {
"type": "string"
},
"positionCount": {
"type": "number"
},
"coverage": {
"type": "string",
"enum": [
"full",
"truncated",
"interval_sampled"
]
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"liquidatableLoUsd": {
"type": "string"
},
"liquidatableHiUsd": {
"type": "string"
},
"projectedBadDebtUsd": {
"type": "string",
"description": "Central estimate of supplier shortfall (bad debt) at this shock — the part of the liquidatable debt that becomes actual loss. Not a bound."
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from projectedBadDebtUsd because collateral valuation was incomplete. This is an abstention bucket, not projected loss."
}
},
"required": [
"shockPct",
"liquidatableLoUsd",
"liquidatableHiUsd"
]
}
},
"collateral": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"symbol": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
}
},
"required": [
"address",
"symbol",
"category"
]
},
"loan": {
"type": [
"object",
"null"
],
"properties": {
"address": {
"type": "string"
},
"symbol": {
"type": [
"string",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
}
},
"required": [
"address",
"symbol",
"category"
]
},
"oracle": {
"type": "object",
"properties": {
"address": {
"type": [
"string",
"null"
]
}
},
"required": [
"address"
]
},
"liquidationIncentive": {
"type": [
"string",
"null"
]
},
"worstHealthFactor": {
"type": [
"string",
"null"
]
},
"marketHealthFactor": {
"type": [
"string",
"null"
]
},
"liquidationHistory": {
"type": "object",
"properties": {
"lastAt": {
"type": [
"string",
"null"
]
},
"count90d": {
"type": "number"
},
"badDebtUsd90d": {
"type": "string"
}
},
"required": [
"lastAt",
"count90d",
"badDebtUsd90d"
]
},
"whyNotLiquidated": {
"type": "string",
"enum": [
"healthy",
"unpriceable-collateral",
"actively-liquidated",
"collateral-exhausted",
"liquidator-incentive-below-cost",
"oracle-dependency"
]
}
},
"required": [
"marketKey",
"chainId",
"lltv",
"totalBorrowUsd",
"totalCollateralUsd",
"positionCount",
"coverage",
"shocks"
]
}
},
"topVaultExposures": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vaultId": {
"type": "string"
},
"vaultName": {
"type": "string"
},
"chainId": {
"type": "number"
},
"marketKey": {
"type": "string"
},
"vaultSupplyUsd": {
"type": "string"
},
"marketUnderwaterUsd": {
"type": "string"
},
"marketTotalBorrowUsd": {
"type": "string"
}
},
"required": [
"vaultId",
"vaultName",
"chainId",
"marketKey",
"vaultSupplyUsd",
"marketUnderwaterUsd",
"marketTotalBorrowUsd"
]
}
},
"vaultBadDebt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"vaultId": {
"type": "string"
},
"vaultName": {
"type": "string"
},
"chainId": {
"type": "number"
},
"suppliedUsd": {
"type": "string"
},
"shocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"shockPct": {
"type": "number"
},
"projectedBadDebtUsd": {
"type": "string"
},
"unpricedDebtUsd": {
"type": "string",
"description": "Debt excluded from the vault projection because borrower collateral valuation was incomplete."
}
},
"required": [
"shockPct",
"projectedBadDebtUsd"
]
}
}
},
"required": [
"vaultId",
"vaultName",
"chainId",
"suppliedUsd",
"shocks"
]
}
}
},
"required": [
"observedAt",
"protocolId",
"source",
"maturity",
"shockPcts",
"coverage",
"chains",
"topMarkets",
"topVaultExposures",
"vaultBadDebt"
]
},
"description": "Complete authoritative protocol set. Do not add legacy root totals: they duplicate protocols[id=morpho]. Morpho, Aave, and Spark are explicitly interval-sampled and make no point-in-time lower-bound claim."
}
},
"required": [
"observedAt",
"protocolId",
"maturity",
"shockPcts",
"chains",
"topMarkets"
]
}
},
"required": [
"data"
]
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/philidor-io-graph-breach-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.