Risk Graph

Limited-release Decisioning endpoints for look-through, checks, breach preview, incident exposure, and public decision verification.

The Risk Graph API is in limited release and enabled per arrangement. Look-through, check, breach, and incident-exposure endpoints require a growth or enterprise key. Decision verification is public by design when the graph feature is enabled.

Signed decisions bind a verdict to a content-addressed snapshot ID, methodology version, and EIP-191 signature. Counterparties can verify the envelope without receiving the customer's API key.

GET /v1/graph/look-through

Resolve vaults to underlying curator, protocol, chain, asset, wrapper, and oracle exposures.

Query Parameters

ParameterTypeDefaultDescription
vaultsstringrequiredComma-separated {chainId}:{lowercaseAddress} keys, max 50

Example

curl "https://api.philidor.io/v1/graph/look-through?vaults=1:0x1111111111111111111111111111111111111111" \
  -H "Authorization: Bearer pk_live_your_key_here"

Response

{
  "data": {
    "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "builtAt": "2026-07-01T00:00:00Z",
    "validTime": "2026-07-01T00:00:00Z",
    "results": {
      "1:0x1111111111111111111111111111111111111111": {
        "vaultKey": "1:0x1111111111111111111111111111111111111111",
        "curator": "gauntlet",
        "protocol": "morpho",
        "chain": "ethereum",
        "assets": [],
        "cycles": []
      }
    }
  }
}

POST /v1/graph/check

Evaluate a portfolio against exposure limits. issue=true persists a signed decision when server-side signing is configured.

Body

FieldTypeDescription
portfolioRefstringCustomer portfolio reference
positionsarrayVault keys and USD amounts
limitsobjectOptional max-share limits by curator, protocol, chain, asset, or oracle
issuebooleanWhether to issue a signed decision
lossobjectOptional org-modeled loss payload to attest

Example

curl -X POST https://api.philidor.io/v1/graph/check \
  -H "Authorization: Bearer pk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "portfolioRef": "portfolio-1",
    "positions": [
      { "vaultKey": "1:0x1111111111111111111111111111111111111111", "amountUsd": 1000000 }
    ],
    "limits": { "maxSharePerProtocol": 0.5 },
    "issue": true
  }'

Response

{
  "data": {
    "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "builtAt": "2026-07-01T00:00:00Z",
    "verdict": "approve",
    "totalUsd": "1000000",
    "unresolvedVaults": [],
    "findings": [],
    "exposures": {},
    "decision": {
      "decisionId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "signerAddress": "0x...",
      "inserted": true
    }
  }
}

GET /v1/graph/breach

Return the latest breach preview from borrower health books. Bounds on liquidatable debt are not loss estimates and cannot back sizing decisions.

Example

curl https://api.philidor.io/v1/graph/breach \
  -H "Authorization: Bearer pk_live_your_key_here"

Response

{
  "data": {
    "observedAt": "2026-07-01T00:00:00Z",
    "protocolId": "morpho",
    "maturity": "preview",
    "shockPcts": [10, 20],
    "chains": [],
    "topMarkets": []
  }
}

GET /v1/graph/incident-exposure

Return per-vault exposure to dependency issuers with incident history.

Query Parameters

ParameterTypeDefaultDescription
vaultsstringrequiredComma-separated vault keys

Example

curl "https://api.philidor.io/v1/graph/incident-exposure?vaults=1:0x1111111111111111111111111111111111111111" \
  -H "Authorization: Bearer pk_live_your_key_here"

Response

{
  "data": {
    "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "mapVersion": "v1",
    "generatedAt": "2026-07-01T00:00:00Z",
    "validTime": "2026-07-01T00:00:00Z",
    "results": {}
  }
}

GET /v1/graph/incident-exposure/summary

Return issuer-level incident-exposure aggregates for the latest graph materialization.

Example

curl https://api.philidor.io/v1/graph/incident-exposure/summary \
  -H "Authorization: Bearer pk_live_your_key_here"

Response

{
  "data": {
    "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "mapVersion": "v1",
    "generatedAt": "2026-07-01T00:00:00Z",
    "validTime": "2026-07-01T00:00:00Z",
    "vaultCount": 10,
    "issuerCount": 3,
    "totalIncidentExposureUsd": "1000000",
    "issuers": []
  }
}

GET /v1/graph/decision/{id}/verify

Verify a signed decision. This route is public by design so counterparties can verify the artifact without a Philidor API key. It still returns 404 when the graph feature is disabled.

Path Parameters

ParameterTypeDescription
idstringDecision envelope hash, 64 hex characters

Example

curl https://api.philidor.io/v1/graph/decision/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/verify

Response

{
  "data": {
    "found": true,
    "envelopeIntact": true,
    "signatureValid": true,
    "signerRecognized": true,
    "signerActiveAtIssuance": true,
    "decision": {
      "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "portfolioRef": "portfolio-1",
      "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
      "verdict": "approve",
      "methodologyScope": "graph_check",
      "methodologyVersion": "v1",
      "signerAddress": "0x...",
      "keyId": "key-1",
      "createdAt": "2026-07-01T00:00:00Z"
    }
  }
}

GET /v1/graph/snapshot/{id}

Return a public frozen snapshot manifest by snapshot ID. This route does not require a key when the graph feature is enabled.

Path Parameters

ParameterTypeDescription
idstringSnapshot hash, 64 hex characters

Example

curl https://api.philidor.io/v1/graph/snapshot/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Response

{
  "data": {
    "snapshotId": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
    "builtAt": "2026-07-01T00:00:00Z",
    "validTime": "2026-07-01T00:00:00Z",
    "publications": [],
    "cursors": {}
  }
}

Graph routes fail closed with 503 and Retry-After: 600 when required materialization is missing.

On this page

Raw