{
  "schema": "pubfi.discovery.agent_integration_surface.v1",
  "canonical": {
    "capability_contract_source": "fixtures/discovery/internal_capability_catalog.json",
    "public_directory_source": "fixtures/discovery/public_directory.json",
    "source_freshness_registry_source": "fixtures/discovery/source_freshness_registry.json",
    "routing_eval_source": "fixtures/discovery/routing_golden.json",
    "canonical_note": "CapabilityCard records are canonical; this file and the OpenAPI file are derived agent-integration surfaces."
  },
  "derived_outputs": [
    {
      "rel": "agent_capability_discovery",
      "href": "/discovery/agent-capabilities.json",
      "media_type": "application/json",
      "description": "Public JSON artifact generated from the Discovery capability contract set."
    },
    {
      "rel": "openapi",
      "href": "/openapi/pubfi-capabilities-openapi.json",
      "media_type": "application/vnd.oai.openapi+json;version=3.1",
      "description": "OpenAPI 3.1 dry-run planning and capability discovery surface."
    },
    {
      "rel": "agents_markdown",
      "href": "/agents.md",
      "media_type": "text/markdown",
      "description": "Agent-readable Markdown guide linking PubFi public integration surfaces."
    }
  ],
  "api_surfaces": [
    {
      "surface_id": "pubfi.discovery.http.capabilities",
      "method": "GET",
      "path": "/v1/capabilities",
      "operation_id": "listPubFiCapabilities",
      "input_schema_ref": null,
      "output_schema_ref": "#/components/schemas/AgentCapabilityDiscovery",
      "description": "List capability contracts, input schemas, output envelopes, provenance, freshness, and error modes."
    },
    {
      "surface_id": "pubfi.discovery.http.plan",
      "method": "POST",
      "path": "/v1/plan",
      "operation_id": "planPubFiCapabilityRoute",
      "input_schema_ref": "#/components/schemas/AgentPlanRequest",
      "output_schema_ref": "#/components/schemas/AgentPlan",
      "description": "Dry-run route planning surface; it does not call providers, paid routes, or procurement systems."
    }
  ],
  "normalized_envelope": {
    "schema_ref": "#/$defs/NormalizedCapabilityEnvelope",
    "description": "Normalized envelope reference every capability output must map into before an agent treats data as usable.",
    "required_fields": [
      "request_id",
      "status",
      "reason_codes",
      "source_slug",
      "capability_slug",
      "data",
      "provenance",
      "freshness",
      "errors"
    ],
    "provenance_fields": [
      "source_slug",
      "capability_slug",
      "provider_name",
      "contract_slug",
      "official_locator_refs"
    ],
    "freshness_fields": [
      "captured_at",
      "max_age_seconds",
      "last_verified_at",
      "source_freshness_ref"
    ]
  },
  "$defs": {
    "NormalizedCapabilityEnvelope": {
      "type": "object",
      "required": [
        "request_id",
        "status",
        "reason_codes",
        "source_slug",
        "capability_slug",
        "data",
        "provenance",
        "freshness",
        "errors"
      ],
      "properties": {
        "request_id": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "reason_codes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "source_slug": {
          "type": [
            "string",
            "null"
          ]
        },
        "capability_slug": {
          "type": [
            "string",
            "null"
          ]
        },
        "data": {
          "type": [
            "object",
            "array",
            "null"
          ]
        },
        "provenance": {
          "type": "object"
        },
        "freshness": {
          "type": "object"
        },
        "errors": {
          "type": "array",
          "items": {
            "type": "object"
          }
        }
      },
      "additionalProperties": true
    }
  },
  "error_modes": [
    {
      "mode_id": "pubfi.discovery.error_mode.current",
      "status": "current",
      "reason": "coverage_match",
      "category": "usable",
      "recoverable": false,
      "agent_action": "Proceed only through an approved PubFi gateway/runtime path."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.degraded",
      "status": "degraded",
      "reason": "partial_coverage",
      "category": "degraded",
      "recoverable": true,
      "agent_action": "Return caveats and revalidate freshness before live use."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.blocked_missing_auth",
      "status": "blocked_missing_auth",
      "reason": "auth_missing",
      "category": "blocked",
      "recoverable": true,
      "agent_action": "Ask for configured PubFi auth; do not request upstream secrets."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.paid_requires_approval",
      "status": "paid_requires_approval",
      "reason": "paid_approval_missing",
      "category": "blocked",
      "recoverable": true,
      "agent_action": "Create procurement review evidence instead of executing a paid route."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.insufficient_metadata",
      "status": "insufficient_metadata",
      "reason": "metadata_missing",
      "category": "abstention",
      "recoverable": true,
      "agent_action": "Collect missing contract metadata before routing."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.unproven",
      "status": "unproven",
      "reason": "metadata_missing",
      "category": "abstention",
      "recoverable": true,
      "agent_action": "Treat the candidate as unproven until fixture-backed evidence lands."
    },
    {
      "mode_id": "pubfi.discovery.error_mode.missing",
      "status": "missing",
      "reason": "no_matching_capability",
      "category": "abstention",
      "recoverable": false,
      "agent_action": "Return no route and preserve only privacy-safe demand evidence."
    }
  ],
  "capabilities": [
    {
      "capability_id": "pubfi.discovery.capability.alchemy.alchemy-rpc-infra",
      "source_slug": "alchemy",
      "capability_slug": "alchemy-rpc-infra",
      "title": "Alchemy RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "best_api"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "alchemy api",
        "alchemy",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Alchemy RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.alchemy.alchemy-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.alchemy.alchemy-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=alchemy",
            "last_verified_at": "2026-06-02T10:17:06Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "alchemy",
        "display_name": "Alchemy",
        "provider_name": "Alchemy",
        "homepage_url": "https://www.alchemy.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=alchemy",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=alchemy",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.alchemy.com/",
            "evidence_label": "Alchemy official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://www.alchemy.com/docs",
            "evidence_label": "Alchemy official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.alchemy.com/pricing",
            "evidence_label": "Alchemy official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.alchemy.com/",
            "evidence_label": "Alchemy official status page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=alchemy",
        "last_verified_at": "2026-06-02T10:17:06Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/alchemy.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
      "source_slug": "amberdata",
      "capability_slug": "amberdata-market-data",
      "title": "Amberdata market data coverage",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "use_case"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "amberdata api",
        "amberdata",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Amberdata market data coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.amberdata.amberdata-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "amberdata",
        "display_name": "Amberdata",
        "provider_name": "Amberdata",
        "homepage_url": "https://www.amberdata.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=amberdata",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/amberdata.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.amberdata.amberdata-on-chain-state",
      "source_slug": "amberdata",
      "capability_slug": "amberdata-on-chain-state",
      "title": "Amberdata on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "multichain_coverage",
        "use_case"
      ],
      "categories": [
        "on-chain-state",
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "amberdata api",
        "amberdata",
        "multichain",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Amberdata on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.amberdata.amberdata-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.amberdata.amberdata-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "amberdata",
        "display_name": "Amberdata",
        "provider_name": "Amberdata",
        "homepage_url": "https://www.amberdata.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=amberdata",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=amberdata",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/amberdata.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.ankr.ankr-rpc-infra",
      "source_slug": "ankr",
      "capability_slug": "ankr-rpc-infra",
      "title": "Ankr RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "ankr rpc api",
        "ankr api",
        "ankr",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Ankr RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.ankr.ankr-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.ankr.ankr-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=ankr",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "ankr",
        "display_name": "Ankr",
        "provider_name": "Ankr",
        "homepage_url": "https://www.ankr.com/rpc/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=ankr",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=ankr",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.ankr.com/rpc/",
            "evidence_label": "Ankr RPC official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://www.ankr.com/docs/",
            "evidence_label": "Ankr official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.ankr.com/rpc/pricing/",
            "evidence_label": "Ankr RPC official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://www.ankr.com/rpc/health/",
            "evidence_label": "Ankr RPC official health page"
          },
          {
            "locator_id": "service-plans-docs",
            "locator_type": "docs",
            "url": "https://www.ankr.com/docs/rpc-service/service-plans/",
            "evidence_label": "Ankr official service plans documentation"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=ankr",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/ankr.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.bitquery.bitquery-on-chain-state",
      "source_slug": "bitquery",
      "capability_slug": "bitquery-on-chain-state",
      "title": "Bitquery on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "multichain"
      ],
      "intent_tags": [
        "bitquery api",
        "bitquery",
        "ethereum",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Bitquery on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.bitquery.bitquery-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "multichain"
              ]
            },
            "default": [
              "ethereum",
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.bitquery.bitquery-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=bitquery",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "bitquery",
        "display_name": "Bitquery",
        "provider_name": "Bitquery",
        "homepage_url": "https://bitquery.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=bitquery",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=bitquery",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=bitquery",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/bitquery.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.blast-api.blast-api-rpc-infra",
      "source_slug": "blast-api",
      "capability_slug": "blast-api-rpc-infra",
      "title": "Blast API RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "chain_category"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "blast api",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Blast API RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.blast-api.blast-api-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.blast-api.blast-api-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blast-api",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "blast-api",
        "display_name": "Blast API",
        "provider_name": "Blast API",
        "homepage_url": "https://blastapi.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=blast-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blast-api",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blast-api",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/blast-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.blockdaemon.blockdaemon-rpc-infra",
      "source_slug": "blockdaemon",
      "capability_slug": "blockdaemon-rpc-infra",
      "title": "Blockdaemon RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "use_case"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "blockdaemon api",
        "blockdaemon",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Blockdaemon RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.blockdaemon.blockdaemon-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.blockdaemon.blockdaemon-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blockdaemon",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "blockdaemon",
        "display_name": "Blockdaemon",
        "provider_name": "Blockdaemon",
        "homepage_url": "https://www.blockdaemon.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=blockdaemon",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blockdaemon",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.blockdaemon.com/",
            "evidence_label": "Blockdaemon official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.blockdaemon.com/",
            "evidence_label": "Blockdaemon official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.blockdaemon.com/api/pricing",
            "evidence_label": "Blockdaemon official API pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.blockdaemon.com/",
            "evidence_label": "Blockdaemon official status page"
          },
          {
            "locator_id": "changelog",
            "locator_type": "changelog",
            "url": "https://docs.blockdaemon.com/changelog",
            "evidence_label": "Blockdaemon official changelog"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=blockdaemon",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/blockdaemon.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.chainstack.chainstack-rpc-infra",
      "source_slug": "chainstack",
      "capability_slug": "chainstack-rpc-infra",
      "title": "Chainstack RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "chainstack api",
        "chainstack",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Chainstack RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.chainstack.chainstack-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.chainstack.chainstack-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=chainstack",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "chainstack",
        "display_name": "Chainstack",
        "provider_name": "Chainstack",
        "homepage_url": "https://chainstack.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=chainstack",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=chainstack",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://chainstack.com/",
            "evidence_label": "Chainstack official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.chainstack.com/docs/platform-introduction",
            "evidence_label": "Chainstack official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://chainstack.com/pricing/",
            "evidence_label": "Chainstack official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.chainstack.com/",
            "evidence_label": "Chainstack official status page"
          },
          {
            "locator_id": "changelog",
            "locator_type": "changelog",
            "url": "https://docs.chainstack.com/changelog",
            "evidence_label": "Chainstack official changelog"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=chainstack",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/chainstack.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
      "source_slug": "coingecko-api",
      "capability_slug": "asset-market-data",
      "title": "Asset market data",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "public_no_approval",
      "auth_requirement": "none",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "best_api"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "coingecko api",
        "coingecko",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume",
        "btc spot price",
        "spot price",
        "ticker price",
        "order book"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Asset market data",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.coingecko-api.asset-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
            "last_verified_at": "2026-06-02T10:17:06Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "coingecko-api",
        "display_name": "CoinGecko API",
        "provider_name": "CoinGecko",
        "homepage_url": "https://www.coingecko.com/en/api",
        "public_status": "degraded",
        "public_claim_status": "evaluation_comparison_only",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=coingecko-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.coingecko.com/en/api",
            "evidence_label": "CoinGecko API official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.coingecko.com/",
            "evidence_label": "CoinGecko API official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.coingecko.com/en/api/pricing",
            "evidence_label": "CoinGecko API official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.coingecko.com/",
            "evidence_label": "CoinGecko API official status page"
          },
          {
            "locator_id": "rate-limit-docs",
            "locator_type": "docs",
            "url": "https://docs.coingecko.com/docs/common-errors-rate-limit",
            "evidence_label": "CoinGecko API official rate-limit documentation"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
        "last_verified_at": "2026-06-02T10:17:06Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/coingecko-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
      "source_slug": "coingecko-api",
      "capability_slug": "exchange-liquidity-depth",
      "title": "Exchange liquidity depth",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "best_api"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "coingecko api",
        "coingecko",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume",
        "btc spot price",
        "spot price",
        "ticker price",
        "order book",
        "bid ask liquidity depth",
        "order book liquidity depth",
        "exchange depth",
        "liquidity depth",
        "bid ask"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Exchange liquidity depth",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot",
          "contract_slug": "exchange_depth_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "exchange_slug",
            "bid_depth_usd",
            "ask_depth_usd"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": 120,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
            "last_verified_at": "2026-06-02T10:17:06Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "coingecko-api",
        "display_name": "CoinGecko API",
        "provider_name": "CoinGecko",
        "homepage_url": "https://www.coingecko.com/en/api",
        "public_status": "degraded",
        "public_claim_status": "evaluation_comparison_only",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=coingecko-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.coingecko.com/en/api",
            "evidence_label": "CoinGecko API official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.coingecko.com/",
            "evidence_label": "CoinGecko API official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.coingecko.com/en/api/pricing",
            "evidence_label": "CoinGecko API official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.coingecko.com/",
            "evidence_label": "CoinGecko API official status page"
          },
          {
            "locator_id": "rate-limit-docs",
            "locator_type": "docs",
            "url": "https://docs.coingecko.com/docs/common-errors-rate-limit",
            "evidence_label": "CoinGecko API official rate-limit documentation"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coingecko-api",
        "last_verified_at": "2026-06-02T10:17:06Z",
        "output_contract_max_age_seconds": {
          "exchange_depth_snapshot": 120
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/coingecko-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
      "source_slug": "coinmarketcap-api",
      "capability_slug": "coinmarketcap-api-market-data",
      "title": "CoinMarketCap API market data coverage",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "comparison_support"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "coinmarketcap api",
        "coinmarketcap",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for CoinMarketCap API market data coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coinmarketcap-api",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "coinmarketcap-api",
        "display_name": "CoinMarketCap API",
        "provider_name": "CoinMarketCap",
        "homepage_url": "https://coinmarketcap.com/api/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=coinmarketcap-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coinmarketcap-api",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=coinmarketcap-api",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/coinmarketcap-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.covalent.covalent-on-chain-state",
      "source_slug": "covalent",
      "capability_slug": "covalent-on-chain-state",
      "title": "Covalent on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "covalent api",
        "covalent",
        "ethereum",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Covalent on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.covalent.covalent-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.covalent.covalent-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=covalent",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "covalent",
        "display_name": "Covalent",
        "provider_name": "Covalent",
        "homepage_url": "https://www.covalenthq.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=covalent",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=covalent",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=covalent",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/covalent.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
      "source_slug": "cryptocompare",
      "capability_slug": "cryptocompare-market-data",
      "title": "CryptoCompare market data coverage",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "alternative"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "cryptocompare api",
        "cryptocompare",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for CryptoCompare market data coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=cryptocompare",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "cryptocompare",
        "display_name": "CryptoCompare",
        "provider_name": "CryptoCompare",
        "homepage_url": "https://www.cryptocompare.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=cryptocompare",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=cryptocompare",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=cryptocompare",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/cryptocompare.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
      "source_slug": "defillama",
      "capability_slug": "pool-yield-context",
      "title": "Pool yield context",
      "capability_kind": "market_data",
      "capability_status": "insufficient_metadata",
      "procurement_state": "public_no_approval",
      "auth_requirement": "none",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "best_api"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "defillama api",
        "defillama",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume",
        "protocol tvl",
        "chain tvl",
        "defi protocol",
        "total value locked"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Pool yield context",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.defillama.pool-yield-context"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot",
          "contract_slug": "pool_yield_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "pool_slug",
            "apy",
            "chain_slug"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "defillama",
        "display_name": "DeFiLlama",
        "provider_name": "DefiLlama",
        "homepage_url": "https://defillama.com/",
        "public_status": "current",
        "public_claim_status": "evaluation_comparison_only",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=defillama",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "pool_yield_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/defillama.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
      "source_slug": "defillama",
      "capability_slug": "protocol-tvl",
      "title": "Protocol and market data",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "public_no_approval",
      "auth_requirement": "none",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "best_api"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "defillama api",
        "defillama",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume",
        "protocol tvl",
        "chain tvl",
        "defi protocol",
        "total value locked"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Protocol and market data",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.defillama.protocol-tvl"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "defillama",
        "display_name": "DeFiLlama",
        "provider_name": "DefiLlama",
        "homepage_url": "https://defillama.com/",
        "public_status": "current",
        "public_claim_status": "evaluation_comparison_only",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=defillama",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=defillama",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/defillama.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.dotlake-api.dotlake-api-governance-metrics",
      "source_slug": "dotlake-api",
      "capability_slug": "dotlake-api-governance-metrics",
      "title": "DotLake API governance metrics coverage",
      "capability_kind": "governance",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "governance_provider",
        "polkadot_coverage",
        "best_api"
      ],
      "categories": [
        "governance",
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot",
        "kusama",
        "substrate"
      ],
      "intent_tags": [
        "dotlake api",
        "dotlake governance api",
        "polkadot governance metrics",
        "polkadot governance api",
        "opengov referendum metrics",
        "referendum results",
        "governance participation",
        "treasury metrics",
        "vote metrics"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for DotLake API governance metrics coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.dotlake-api.dotlake-api-governance-metrics"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot",
                "kusama",
                "substrate"
              ]
            },
            "default": [
              "polkadot",
              "kusama",
              "substrate"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.dotlake-api.dotlake-api-governance-metrics.governance_metric_timeseries",
          "contract_slug": "governance_metric_timeseries",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "relay_chain",
            "metric_name",
            "period",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
            "last_verified_at": "2026-06-04T08:01:26Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "dotlake-api",
        "display_name": "DotLake API",
        "provider_name": "Parity Data",
        "homepage_url": "https://api.data.parity.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=dotlake-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
        "official_locator_refs": [
          {
            "locator_id": "api-entry",
            "locator_type": "homepage",
            "url": "https://api.data.parity.io/",
            "evidence_label": "DotLake official API entry point"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://api.data.parity.io/docs",
            "evidence_label": "DotLake official Swagger documentation"
          },
          {
            "locator_id": "openapi",
            "locator_type": "openapi_schema",
            "url": "https://api.data.parity.io/openapi.json",
            "evidence_label": "DotLake official OpenAPI schema"
          },
          {
            "locator_id": "forum-announcement",
            "locator_type": "docs",
            "url": "https://forum.polkadot.network/t/dotlake-api-publicly-available/16919",
            "evidence_label": "DotLake public availability announcement"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
        "last_verified_at": "2026-06-04T08:01:26Z",
        "output_contract_max_age_seconds": {
          "governance_metric_timeseries": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/dotlake-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.dotlake-api.dotlake-api-on-chain-metrics",
      "source_slug": "dotlake-api",
      "capability_slug": "dotlake-api-on-chain-metrics",
      "title": "DotLake API on-chain ecosystem metrics coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "polkadot_coverage",
        "best_api"
      ],
      "categories": [
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot",
        "kusama",
        "substrate"
      ],
      "intent_tags": [
        "dotlake api",
        "dotlake",
        "parity data api",
        "polkadot data api",
        "polkadot indexed data api",
        "polkadot metrics api",
        "substrate metrics",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "daily metrics",
        "staking metrics",
        "treasury metrics",
        "xcm metrics"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for DotLake API on-chain ecosystem metrics coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.dotlake-api.dotlake-api-on-chain-metrics"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot",
                "kusama",
                "substrate"
              ]
            },
            "default": [
              "polkadot",
              "kusama",
              "substrate"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.dotlake-api.dotlake-api-on-chain-metrics.chain_metric_timeseries",
          "contract_slug": "chain_metric_timeseries",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "relay_chain",
            "chain",
            "metric_name",
            "date_or_period",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
            "last_verified_at": "2026-06-04T08:01:26Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "dotlake-api",
        "display_name": "DotLake API",
        "provider_name": "Parity Data",
        "homepage_url": "https://api.data.parity.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=dotlake-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
        "official_locator_refs": [
          {
            "locator_id": "api-entry",
            "locator_type": "homepage",
            "url": "https://api.data.parity.io/",
            "evidence_label": "DotLake official API entry point"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://api.data.parity.io/docs",
            "evidence_label": "DotLake official Swagger documentation"
          },
          {
            "locator_id": "openapi",
            "locator_type": "openapi_schema",
            "url": "https://api.data.parity.io/openapi.json",
            "evidence_label": "DotLake official OpenAPI schema"
          },
          {
            "locator_id": "forum-announcement",
            "locator_type": "docs",
            "url": "https://forum.polkadot.network/t/dotlake-api-publicly-available/16919",
            "evidence_label": "DotLake public availability announcement"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dotlake-api",
        "last_verified_at": "2026-06-04T08:01:26Z",
        "output_contract_max_age_seconds": {
          "chain_metric_timeseries": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/dotlake-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
      "source_slug": "dune-api",
      "capability_slug": "dune-api-market-data",
      "title": "Dune API market data coverage",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "ethereum_coverage",
        "comparison_support"
      ],
      "categories": [
        "market-data",
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "multichain"
      ],
      "intent_tags": [
        "dune api",
        "dune",
        "ethereum",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Dune API market data coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.dune-api.dune-api-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "multichain"
              ]
            },
            "default": [
              "ethereum",
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "dune-api",
        "display_name": "Dune API",
        "provider_name": "Dune",
        "homepage_url": "https://dune.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=dune-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/dune-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.dune-api.dune-api-on-chain-state",
      "source_slug": "dune-api",
      "capability_slug": "dune-api-on-chain-state",
      "title": "Dune API on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "ethereum_coverage",
        "comparison_support"
      ],
      "categories": [
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "multichain"
      ],
      "intent_tags": [
        "dune api",
        "dune",
        "ethereum",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Dune API on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.dune-api.dune-api-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "multichain"
              ]
            },
            "default": [
              "ethereum",
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.dune-api.dune-api-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "dune-api",
        "display_name": "Dune API",
        "provider_name": "Dune",
        "homepage_url": "https://dune.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=dune-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=dune-api",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/dune-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.getblock.getblock-rpc-infra",
      "source_slug": "getblock",
      "capability_slug": "getblock-rpc-infra",
      "title": "GetBlock RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "getblock api",
        "getblock",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for GetBlock RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.getblock.getblock-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.getblock.getblock-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=getblock",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "getblock",
        "display_name": "GetBlock",
        "provider_name": "GetBlock",
        "homepage_url": "https://getblock.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=getblock",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=getblock",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://getblock.io/",
            "evidence_label": "GetBlock official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.getblock.io/",
            "evidence_label": "GetBlock official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://getblock.io/pricing/",
            "evidence_label": "GetBlock official pricing page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=getblock",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/getblock.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.helius.helius-nft",
      "source_slug": "helius",
      "capability_slug": "helius-nft",
      "title": "Helius NFT coverage",
      "capability_kind": "nft",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "nft_provider",
        "solana_coverage",
        "best_api"
      ],
      "categories": [
        "nft",
        "on-chain-state",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "helius solana api",
        "helius api",
        "helius",
        "solana",
        "nft",
        "nft metadata",
        "collection data"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Helius NFT coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.helius.helius-nft"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.helius.helius-nft.nft_metadata_record",
          "contract_slug": "nft_metadata_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "collection_slug",
            "token_id",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "helius",
        "display_name": "Helius",
        "provider_name": "Helius",
        "homepage_url": "https://www.helius.dev/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=helius",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "nft_metadata_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/helius.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.helius.helius-on-chain-state",
      "source_slug": "helius",
      "capability_slug": "helius-on-chain-state",
      "title": "Helius on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "solana_coverage",
        "best_api"
      ],
      "categories": [
        "on-chain-state",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "helius solana api",
        "helius api",
        "helius",
        "solana",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Helius on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.helius.helius-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.helius.helius-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "helius",
        "display_name": "Helius",
        "provider_name": "Helius",
        "homepage_url": "https://www.helius.dev/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=helius",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=helius",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/helius.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
      "source_slug": "hellomoon",
      "capability_slug": "hellomoon-market-data",
      "title": "Hello Moon market data coverage",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "market_data_provider",
        "solana_coverage",
        "chain_category"
      ],
      "categories": [
        "market-data",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "hellomoon api",
        "hello moon api",
        "hello moon",
        "solana",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Hello Moon market data coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.hellomoon.hellomoon-market-data"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "hellomoon",
        "display_name": "Hello Moon",
        "provider_name": "Hello Moon",
        "homepage_url": "https://www.hellomoon.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=hellomoon",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/hellomoon.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-nft",
      "source_slug": "hellomoon",
      "capability_slug": "hellomoon-nft",
      "title": "Hello Moon NFT coverage",
      "capability_kind": "nft",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "nft_provider",
        "solana_coverage",
        "chain_category"
      ],
      "categories": [
        "nft",
        "market-data",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "hellomoon api",
        "hello moon api",
        "hello moon",
        "solana",
        "nft",
        "nft metadata",
        "collection data"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Hello Moon NFT coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.hellomoon.hellomoon-nft"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.hellomoon.hellomoon-nft.nft_metadata_record",
          "contract_slug": "nft_metadata_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "collection_slug",
            "token_id",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "hellomoon",
        "display_name": "Hello Moon",
        "provider_name": "Hello Moon",
        "homepage_url": "https://www.hellomoon.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=hellomoon",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=hellomoon",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "nft_metadata_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/hellomoon.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.infura.infura-rpc-infra",
      "source_slug": "infura",
      "capability_slug": "infura-rpc-infra",
      "title": "Infura RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "best_api"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "infura api",
        "infura",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Infura RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.infura.infura-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.infura.infura-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=infura",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "infura",
        "display_name": "Infura",
        "provider_name": "Infura",
        "homepage_url": "https://www.infura.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=infura",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=infura",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.infura.io/",
            "evidence_label": "Infura official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://docs.metamask.io/services/",
            "evidence_label": "Infura official documentation in MetaMask Developer docs"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.infura.io/pricing",
            "evidence_label": "Infura official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.infura.io/",
            "evidence_label": "Infura official status page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=infura",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/infura.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
      "source_slug": "kaiko",
      "capability_slug": "institutional-market-feed",
      "title": "Institutional market data feed",
      "capability_kind": "market_data",
      "capability_status": "current",
      "procurement_state": "paid_requires_approval",
      "auth_requirement": "paid_account",
      "source_roles": [
        "market_data_provider",
        "multichain_coverage",
        "use_case"
      ],
      "categories": [
        "market-data",
        "multichain"
      ],
      "coverage_targets": [
        "multichain"
      ],
      "intent_tags": [
        "kaiko api",
        "kaiko",
        "multichain",
        "market-data",
        "market data",
        "price",
        "market cap",
        "volume",
        "institutional market data",
        "trade feed",
        "exchange flow",
        "order book history"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Institutional market data feed",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.kaiko.institutional-market-feed"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "multichain"
              ]
            },
            "default": [
              "multichain"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot",
          "contract_slug": "market_data_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "asset_slug",
            "metric_slug",
            "value",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=kaiko",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "kaiko",
        "display_name": "Kaiko",
        "provider_name": "Kaiko",
        "homepage_url": "https://www.kaiko.com/",
        "public_status": "current",
        "public_claim_status": "integration_requested",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=kaiko",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=kaiko",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=kaiko",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "market_data_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/kaiko.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.moralis.moralis-nft",
      "source_slug": "moralis",
      "capability_slug": "moralis-nft",
      "title": "Moralis NFT coverage",
      "capability_kind": "nft",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "nft_provider",
        "ethereum_coverage",
        "best_api"
      ],
      "categories": [
        "nft",
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "solana"
      ],
      "intent_tags": [
        "moralis api",
        "moralis",
        "ethereum",
        "nft",
        "nft metadata",
        "collection data"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Moralis NFT coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.moralis.moralis-nft"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "solana"
              ]
            },
            "default": [
              "ethereum",
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.moralis.moralis-nft.nft_metadata_record",
          "contract_slug": "nft_metadata_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "collection_slug",
            "token_id",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "moralis",
        "display_name": "Moralis",
        "provider_name": "Moralis",
        "homepage_url": "https://moralis.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=moralis",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "nft_metadata_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/moralis.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.moralis.moralis-on-chain-state",
      "source_slug": "moralis",
      "capability_slug": "moralis-on-chain-state",
      "title": "Moralis on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "ethereum_coverage",
        "best_api"
      ],
      "categories": [
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "solana"
      ],
      "intent_tags": [
        "moralis api",
        "moralis",
        "ethereum",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Moralis on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.moralis.moralis-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "solana"
              ]
            },
            "default": [
              "ethereum",
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.moralis.moralis-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "moralis",
        "display_name": "Moralis",
        "provider_name": "Moralis",
        "homepage_url": "https://moralis.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=moralis",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=moralis",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/moralis.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.nownodes.nownodes-rpc-infra",
      "source_slug": "nownodes",
      "capability_slug": "nownodes-rpc-infra",
      "title": "NOWNodes RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "alternative"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "nownodes api",
        "nownodes",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for NOWNodes RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.nownodes.nownodes-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.nownodes.nownodes-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=nownodes",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "nownodes",
        "display_name": "NOWNodes",
        "provider_name": "NOWNodes",
        "homepage_url": "https://nownodes.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=nownodes",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=nownodes",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=nownodes",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/nownodes.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.onfinality.onfinality-on-chain-state",
      "source_slug": "onfinality",
      "capability_slug": "onfinality-on-chain-state",
      "title": "OnFinality on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "polkadot_coverage",
        "chain_category"
      ],
      "categories": [
        "on-chain-state",
        "rpc-infra",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "onfinality api",
        "onfinality",
        "polkadot",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for OnFinality on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.onfinality.onfinality-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.onfinality.onfinality-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
            "last_verified_at": "2026-06-02T10:17:06Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "onfinality",
        "display_name": "OnFinality",
        "provider_name": "OnFinality",
        "homepage_url": "https://onfinality.io/",
        "public_status": "degraded",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=onfinality",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://onfinality.io/",
            "evidence_label": "OnFinality official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://documentation.onfinality.io/support/",
            "evidence_label": "OnFinality official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://onfinality.io/en/pricing",
            "evidence_label": "OnFinality official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.onfinality.io/",
            "evidence_label": "OnFinality official status page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
        "last_verified_at": "2026-06-02T10:17:06Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/onfinality.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.onfinality.onfinality-rpc-infra",
      "source_slug": "onfinality",
      "capability_slug": "onfinality-rpc-infra",
      "title": "OnFinality RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "polkadot_coverage",
        "chain_category"
      ],
      "categories": [
        "rpc-infra",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "onfinality api",
        "onfinality",
        "polkadot",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for OnFinality RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.onfinality.onfinality-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.onfinality.onfinality-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
            "last_verified_at": "2026-06-02T10:17:06Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "onfinality",
        "display_name": "OnFinality",
        "provider_name": "OnFinality",
        "homepage_url": "https://onfinality.io/",
        "public_status": "degraded",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=onfinality",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://onfinality.io/",
            "evidence_label": "OnFinality official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://documentation.onfinality.io/support/",
            "evidence_label": "OnFinality official documentation"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://onfinality.io/en/pricing",
            "evidence_label": "OnFinality official pricing page"
          },
          {
            "locator_id": "status",
            "locator_type": "status",
            "url": "https://status.onfinality.io/",
            "evidence_label": "OnFinality official status page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=onfinality",
        "last_verified_at": "2026-06-02T10:17:06Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/onfinality.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.pokt-network.pokt-network-rpc-infra",
      "source_slug": "pokt-network",
      "capability_slug": "pokt-network-rpc-infra",
      "title": "Pokt Network RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "use_case"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "pokt rpc api",
        "pokt network api",
        "pokt network",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Pokt Network RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.pokt-network.pokt-network-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.pokt-network.pokt-network-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=pokt-network",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "pokt-network",
        "display_name": "Pokt Network",
        "provider_name": "Pokt Network",
        "homepage_url": "https://www.pokt.network/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=pokt-network",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=pokt-network",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=pokt-network",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/pokt-network.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.polkassembly.polkassembly-governance",
      "source_slug": "polkassembly",
      "capability_slug": "polkassembly-governance",
      "title": "Polkassembly governance coverage",
      "capability_kind": "governance",
      "capability_status": "current",
      "procurement_state": "public_no_approval",
      "auth_requirement": "none",
      "source_roles": [
        "governance_provider",
        "polkadot_coverage",
        "best_api"
      ],
      "categories": [
        "governance",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "polkadot governance api",
        "polkassembly api",
        "polkassembly",
        "polkadot",
        "governance",
        "proposal",
        "referendum",
        "vote"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Polkassembly governance coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.polkassembly.polkassembly-governance"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.polkassembly.polkassembly-governance.governance_record",
          "contract_slug": "governance_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "proposal_id",
            "status",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=polkassembly",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "polkassembly",
        "display_name": "Polkassembly",
        "provider_name": "Polkassembly",
        "homepage_url": "https://polkassembly.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=polkassembly",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=polkassembly",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=polkassembly",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "governance_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/polkassembly.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.quicknode.quicknode-rpc-infra",
      "source_slug": "quicknode",
      "capability_slug": "quicknode-rpc-infra",
      "title": "QuickNode RPC infrastructure coverage",
      "capability_kind": "rpc_infra",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "rpc_infra_provider",
        "ethereum_coverage",
        "comparison_support"
      ],
      "categories": [
        "rpc-infra",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum",
        "solana"
      ],
      "intent_tags": [
        "quicknode api",
        "quicknode",
        "ethereum",
        "rpc-infra",
        "rpc infrastructure",
        "rpc",
        "node",
        "endpoint",
        "archive node"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for QuickNode RPC infrastructure coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.quicknode.quicknode-rpc-infra"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum",
                "solana"
              ]
            },
            "default": [
              "ethereum",
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.quicknode.quicknode-rpc-infra.rpc_endpoint_status",
          "contract_slug": "rpc_endpoint_status",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "endpoint_class",
            "latency_ms",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=quicknode",
            "last_verified_at": "2026-06-01T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "quicknode",
        "display_name": "QuickNode",
        "provider_name": "QuickNode",
        "homepage_url": "https://www.quicknode.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=quicknode",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=quicknode",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://www.quicknode.com/",
            "evidence_label": "QuickNode official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://www.quicknode.com/docs/welcome",
            "evidence_label": "QuickNode official documentation"
          },
          {
            "locator_id": "api-reference",
            "locator_type": "api_reference",
            "url": "https://www.quicknode.com/docs",
            "evidence_label": "QuickNode official API reference"
          },
          {
            "locator_id": "pricing",
            "locator_type": "pricing",
            "url": "https://www.quicknode.com/pricing",
            "evidence_label": "QuickNode official pricing page"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=quicknode",
        "last_verified_at": "2026-06-01T00:00:00Z",
        "output_contract_max_age_seconds": {
          "rpc_endpoint_status": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/quicknode.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.shyft.shyft-nft",
      "source_slug": "shyft",
      "capability_slug": "shyft-nft",
      "title": "Shyft NFT coverage",
      "capability_kind": "nft",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "nft_provider",
        "solana_coverage",
        "alternative"
      ],
      "categories": [
        "nft",
        "on-chain-state",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "shyft solana api",
        "shyft api",
        "shyft",
        "solana",
        "nft",
        "nft metadata",
        "collection data"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Shyft NFT coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.shyft.shyft-nft"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.shyft.shyft-nft.nft_metadata_record",
          "contract_slug": "nft_metadata_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "collection_slug",
            "token_id",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "shyft",
        "display_name": "Shyft",
        "provider_name": "Shyft",
        "homepage_url": "https://shyft.to/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=shyft",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "nft_metadata_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/shyft.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.shyft.shyft-on-chain-state",
      "source_slug": "shyft",
      "capability_slug": "shyft-on-chain-state",
      "title": "Shyft on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "solana_coverage",
        "alternative"
      ],
      "categories": [
        "on-chain-state",
        "solana"
      ],
      "coverage_targets": [
        "solana"
      ],
      "intent_tags": [
        "shyft solana api",
        "shyft api",
        "shyft",
        "solana",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Shyft on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.shyft.shyft-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "solana"
              ]
            },
            "default": [
              "solana"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.shyft.shyft-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "shyft",
        "display_name": "Shyft",
        "provider_name": "Shyft",
        "homepage_url": "https://shyft.to/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=shyft",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=shyft",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/shyft.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.subquery.subquery-on-chain-state",
      "source_slug": "subquery",
      "capability_slug": "subquery-on-chain-state",
      "title": "SubQuery Network on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "polkadot_coverage",
        "comparison_support"
      ],
      "categories": [
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "subquery network api",
        "subquery network",
        "subquery",
        "polkadot",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for SubQuery Network on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.subquery.subquery-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.subquery.subquery-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subquery",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "subquery",
        "display_name": "SubQuery Network",
        "provider_name": "SubQuery",
        "homepage_url": "https://subquery.network/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=subquery",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subquery",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subquery",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/subquery.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.subscan.subscan-governance",
      "source_slug": "subscan",
      "capability_slug": "subscan-governance",
      "title": "Subscan API governance coverage",
      "capability_kind": "governance",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "governance_provider",
        "polkadot_coverage",
        "best_api"
      ],
      "categories": [
        "governance",
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "subscan api",
        "subscan",
        "polkadot",
        "governance",
        "proposal",
        "referendum",
        "vote"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Subscan API governance coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.subscan.subscan-governance"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.subscan.subscan-governance.governance_record",
          "contract_slug": "governance_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "proposal_id",
            "status",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
            "last_verified_at": "2026-06-02T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "subscan",
        "display_name": "Subscan API",
        "provider_name": "Subscan",
        "homepage_url": "https://subscan.io/",
        "public_status": "degraded",
        "public_claim_status": "gateway_available",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=subscan",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://subscan.io/",
            "evidence_label": "Subscan official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://support.subscan.io/",
            "evidence_label": "Subscan official support documentation"
          },
          {
            "locator_id": "api-plan-docs",
            "locator_type": "docs",
            "url": "https://support.subscan.io/doc-360177",
            "evidence_label": "Subscan official API plan and rate-limit support article"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
        "last_verified_at": "2026-06-02T00:00:00Z",
        "output_contract_max_age_seconds": {
          "governance_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/subscan.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.subscan.subscan-on-chain-state",
      "source_slug": "subscan",
      "capability_slug": "subscan-on-chain-state",
      "title": "Subscan API on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "polkadot_coverage",
        "best_api"
      ],
      "categories": [
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "subscan api",
        "subscan",
        "polkadot",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Subscan API on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.subscan.subscan-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.subscan.subscan-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
            "last_verified_at": "2026-06-02T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "subscan",
        "display_name": "Subscan API",
        "provider_name": "Subscan",
        "homepage_url": "https://subscan.io/",
        "public_status": "degraded",
        "public_claim_status": "gateway_available",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=subscan",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
        "official_locator_refs": [
          {
            "locator_id": "homepage",
            "locator_type": "homepage",
            "url": "https://subscan.io/",
            "evidence_label": "Subscan official homepage"
          },
          {
            "locator_id": "docs",
            "locator_type": "docs",
            "url": "https://support.subscan.io/",
            "evidence_label": "Subscan official support documentation"
          },
          {
            "locator_id": "api-plan-docs",
            "locator_type": "docs",
            "url": "https://support.subscan.io/doc-360177",
            "evidence_label": "Subscan official API plan and rate-limit support article"
          }
        ]
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subscan",
        "last_verified_at": "2026-06-02T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/subscan.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.subsquid.subsquid-on-chain-state",
      "source_slug": "subsquid",
      "capability_slug": "subsquid-on-chain-state",
      "title": "SubSquid on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "polkadot_coverage",
        "comparison_support"
      ],
      "categories": [
        "on-chain-state",
        "polkadot"
      ],
      "coverage_targets": [
        "polkadot"
      ],
      "intent_tags": [
        "subsquid indexing api",
        "subsquid api",
        "subsquid",
        "polkadot",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for SubSquid on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.subsquid.subsquid-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "polkadot"
              ]
            },
            "default": [
              "polkadot"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.subsquid.subsquid-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subsquid",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "subsquid",
        "display_name": "SubSquid",
        "provider_name": "Subsquid",
        "homepage_url": "https://www.subsquid.io/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=subsquid",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subsquid",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=subsquid",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/subsquid.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.the-graph.the-graph-on-chain-state",
      "source_slug": "the-graph",
      "capability_slug": "the-graph-on-chain-state",
      "title": "The Graph on-chain state coverage",
      "capability_kind": "on_chain_state",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "on_chain_state_provider",
        "ethereum_coverage",
        "comparison_support"
      ],
      "categories": [
        "on-chain-state",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "the graph api",
        "the graph",
        "ethereum",
        "on-chain-state",
        "on-chain state",
        "on chain data",
        "onchain data",
        "account data",
        "transaction data",
        "indexing"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for The Graph on-chain state coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.the-graph.the-graph-on-chain-state"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.the-graph.the-graph-on-chain-state.chain_state_record",
          "contract_slug": "chain_state_record",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "address_or_entity",
            "record_type",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=the-graph",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "the-graph",
        "display_name": "The Graph",
        "provider_name": "The Graph",
        "homepage_url": "https://thegraph.com/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=the-graph",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=the-graph",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=the-graph",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "chain_state_record": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/the-graph.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    },
    {
      "capability_id": "pubfi.discovery.capability.zerion-api.zerion-api-wallet-portfolio",
      "source_slug": "zerion-api",
      "capability_slug": "zerion-api-wallet-portfolio",
      "title": "Zerion API wallet portfolio coverage",
      "capability_kind": "wallet_portfolio",
      "capability_status": "current",
      "procurement_state": "free_requires_auth",
      "auth_requirement": "api_key",
      "source_roles": [
        "wallet_portfolio_provider",
        "ethereum_coverage",
        "use_case"
      ],
      "categories": [
        "wallet-portfolio",
        "ethereum"
      ],
      "coverage_targets": [
        "ethereum"
      ],
      "intent_tags": [
        "zerion api",
        "zerion",
        "ethereum",
        "wallet-portfolio",
        "wallet portfolio",
        "wallet",
        "portfolio",
        "balance",
        "positions"
      ],
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "title": "Dry-run planning input for Zerion API wallet portfolio coverage",
        "type": "object",
        "required": [
          "intent",
          "dry_run"
        ],
        "properties": {
          "intent": {
            "type": "string",
            "minLength": 1,
            "description": "Redacted agent data objective to route against PubFi capability contracts."
          },
          "auth": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "api_key",
                "paid_account"
              ]
            },
            "default": []
          },
          "preferred_capability_id": {
            "const": "pubfi.discovery.capability.zerion-api.zerion-api-wallet-portfolio"
          },
          "coverage_targets": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "ethereum"
              ]
            },
            "default": [
              "ethereum"
            ]
          },
          "dry_run": {
            "type": "boolean",
            "const": true,
            "default": true
          }
        },
        "additionalProperties": false
      },
      "output_envelopes": [
        {
          "envelope_id": "pubfi.discovery.envelope.zerion-api.zerion-api-wallet-portfolio.wallet_portfolio_snapshot",
          "contract_slug": "wallet_portfolio_snapshot",
          "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
          "data_fields": [
            "chain_slug",
            "wallet_address",
            "position_count",
            "captured_at"
          ],
          "provenance_fields": [
            "request_id",
            "source_slug",
            "capability_slug",
            "contract_slug",
            "provider_name",
            "captured_at",
            "source_freshness_ref",
            "official_locator_refs"
          ],
          "freshness": {
            "max_age_seconds": null,
            "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=zerion-api",
            "last_verified_at": "2026-05-29T00:00:00Z",
            "stale_behavior": "Return a dry-run plan, blocked alternative, degraded route, or abstention instead of inferring live freshness."
          }
        }
      ],
      "provenance": {
        "source_slug": "zerion-api",
        "display_name": "Zerion API",
        "provider_name": "Zerion",
        "homepage_url": "https://zerion.io/api/",
        "public_status": "current",
        "public_claim_status": "public_source_profile",
        "public_directory_ref": "fixtures/discovery/public_directory.json#source_slug=zerion-api",
        "source_freshness_registry_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=zerion-api",
        "official_locator_refs": []
      },
      "freshness": {
        "source_freshness_ref": "fixtures/discovery/source_freshness_registry.json#source_slug=zerion-api",
        "last_verified_at": "2026-05-29T00:00:00Z",
        "output_contract_max_age_seconds": {
          "wallet_portfolio_snapshot": null
        },
        "freshness_contract": "Use max_age_seconds when present; otherwise revalidate source freshness and provenance before treating data as current."
      },
      "error_mode_refs": [
        "pubfi.discovery.error_mode.current",
        "pubfi.discovery.error_mode.degraded",
        "pubfi.discovery.error_mode.blocked_missing_auth",
        "pubfi.discovery.error_mode.paid_requires_approval",
        "pubfi.discovery.error_mode.insufficient_metadata",
        "pubfi.discovery.error_mode.unproven",
        "pubfi.discovery.error_mode.missing"
      ],
      "links": [
        {
          "rel": "discovery_markdown",
          "href": "/discovery/api/zerion-api.md",
          "media_type": "text/markdown",
          "description": "Public Discovery Markdown mirror when the source is exportable."
        },
        {
          "rel": "openapi",
          "href": "/openapi/pubfi-capabilities-openapi.json",
          "media_type": "application/vnd.oai.openapi+json;version=3.1",
          "description": "OpenAPI schema for capability discovery and dry-run planning."
        }
      ]
    }
  ],
  "dry_run_plan_examples": [
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "direct-btc-price",
      "dry_run": true,
      "intent": "Need BTC spot price, market cap, and 24h volume",
      "status": "current",
      "reasons": [
        "coverage_match",
        "auth_missing",
        "paid_approval_missing",
        "metadata_missing"
      ],
      "selected": {
        "source_slug": "coingecko-api",
        "capability_slug": "asset-market-data",
        "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
        "status": "current",
        "reason": "coverage_match",
        "output_envelope_refs": [
          "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
        ],
        "provenance_ref": "public_directory#source_slug=coingecko-api",
        "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
        "error_mode_ref": "pubfi.discovery.error_mode.current"
      },
      "candidates": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Read public provenance at /discovery/api/coingecko-api and re-check source freshness before live use.",
        "Use the selected capability only through an approved PubFi gateway/runtime path; this plan does not call providers."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "direct-eth-market-cap",
      "dry_run": true,
      "intent": "Find ETH market cap and ticker price",
      "status": "current",
      "reasons": [
        "coverage_match",
        "auth_missing",
        "paid_approval_missing",
        "metadata_missing"
      ],
      "selected": {
        "source_slug": "coingecko-api",
        "capability_slug": "asset-market-data",
        "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
        "status": "current",
        "reason": "coverage_match",
        "output_envelope_refs": [
          "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
        ],
        "provenance_ref": "public_directory#source_slug=coingecko-api",
        "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
        "error_mode_ref": "pubfi.discovery.error_mode.current"
      },
      "candidates": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Read public provenance at /discovery/api/coingecko-api and re-check source freshness before live use.",
        "Use the selected capability only through an approved PubFi gateway/runtime path; this plan does not call providers."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "direct-ethereum-protocol-tvl",
      "dry_run": true,
      "intent": "Get Ethereum DeFi protocol TVL for a protocol",
      "status": "current",
      "reasons": [
        "coverage_match",
        "auth_missing",
        "metadata_missing"
      ],
      "selected": {
        "source_slug": "defillama",
        "capability_slug": "protocol-tvl",
        "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
        "status": "current",
        "reason": "coverage_match",
        "output_envelope_refs": [
          "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
        ],
        "provenance_ref": "public_directory#source_slug=defillama",
        "freshness_ref": "unregistered#source_slug=defillama",
        "error_mode_ref": "pubfi.discovery.error_mode.current"
      },
      "candidates": [
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "alchemy",
          "capability_slug": "alchemy-rpc-infra",
          "capability_id": "pubfi.discovery.capability.alchemy.alchemy-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.alchemy.alchemy-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=alchemy",
          "freshness_ref": "source_freshness_registry#source_slug=alchemy",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "ankr",
          "capability_slug": "ankr-rpc-infra",
          "capability_id": "pubfi.discovery.capability.ankr.ankr-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.ankr.ankr-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=ankr",
          "freshness_ref": "source_freshness_registry#source_slug=ankr",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "bitquery",
          "capability_slug": "bitquery-on-chain-state",
          "capability_id": "pubfi.discovery.capability.bitquery.bitquery-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.bitquery.bitquery-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=bitquery",
          "freshness_ref": "unregistered#source_slug=bitquery",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "blast-api",
          "capability_slug": "blast-api-rpc-infra",
          "capability_id": "pubfi.discovery.capability.blast-api.blast-api-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.blast-api.blast-api-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=blast-api",
          "freshness_ref": "unregistered#source_slug=blast-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "blockdaemon",
          "capability_slug": "blockdaemon-rpc-infra",
          "capability_id": "pubfi.discovery.capability.blockdaemon.blockdaemon-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.blockdaemon.blockdaemon-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=blockdaemon",
          "freshness_ref": "source_freshness_registry#source_slug=blockdaemon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "chainstack",
          "capability_slug": "chainstack-rpc-infra",
          "capability_id": "pubfi.discovery.capability.chainstack.chainstack-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.chainstack.chainstack-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=chainstack",
          "freshness_ref": "source_freshness_registry#source_slug=chainstack",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "covalent",
          "capability_slug": "covalent-on-chain-state",
          "capability_id": "pubfi.discovery.capability.covalent.covalent-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.covalent.covalent-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=covalent",
          "freshness_ref": "unregistered#source_slug=covalent",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-on-chain-state",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "getblock",
          "capability_slug": "getblock-rpc-infra",
          "capability_id": "pubfi.discovery.capability.getblock.getblock-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.getblock.getblock-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=getblock",
          "freshness_ref": "source_freshness_registry#source_slug=getblock",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "infura",
          "capability_slug": "infura-rpc-infra",
          "capability_id": "pubfi.discovery.capability.infura.infura-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.infura.infura-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=infura",
          "freshness_ref": "source_freshness_registry#source_slug=infura",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "moralis",
          "capability_slug": "moralis-nft",
          "capability_id": "pubfi.discovery.capability.moralis.moralis-nft",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.moralis.moralis-nft.nft_metadata_record"
          ],
          "provenance_ref": "public_directory#source_slug=moralis",
          "freshness_ref": "unregistered#source_slug=moralis",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "moralis",
          "capability_slug": "moralis-on-chain-state",
          "capability_id": "pubfi.discovery.capability.moralis.moralis-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.moralis.moralis-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=moralis",
          "freshness_ref": "unregistered#source_slug=moralis",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "nownodes",
          "capability_slug": "nownodes-rpc-infra",
          "capability_id": "pubfi.discovery.capability.nownodes.nownodes-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.nownodes.nownodes-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=nownodes",
          "freshness_ref": "unregistered#source_slug=nownodes",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "pokt-network",
          "capability_slug": "pokt-network-rpc-infra",
          "capability_id": "pubfi.discovery.capability.pokt-network.pokt-network-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.pokt-network.pokt-network-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=pokt-network",
          "freshness_ref": "unregistered#source_slug=pokt-network",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "quicknode",
          "capability_slug": "quicknode-rpc-infra",
          "capability_id": "pubfi.discovery.capability.quicknode.quicknode-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.quicknode.quicknode-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=quicknode",
          "freshness_ref": "source_freshness_registry#source_slug=quicknode",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "the-graph",
          "capability_slug": "the-graph-on-chain-state",
          "capability_id": "pubfi.discovery.capability.the-graph.the-graph-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.the-graph.the-graph-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=the-graph",
          "freshness_ref": "unregistered#source_slug=the-graph",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "zerion-api",
          "capability_slug": "zerion-api-wallet-portfolio",
          "capability_id": "pubfi.discovery.capability.zerion-api.zerion-api-wallet-portfolio",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.zerion-api.zerion-api-wallet-portfolio.wallet_portfolio_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=zerion-api",
          "freshness_ref": "unregistered#source_slug=zerion-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "alchemy",
          "capability_slug": "alchemy-rpc-infra",
          "capability_id": "pubfi.discovery.capability.alchemy.alchemy-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.alchemy.alchemy-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=alchemy",
          "freshness_ref": "source_freshness_registry#source_slug=alchemy",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "ankr",
          "capability_slug": "ankr-rpc-infra",
          "capability_id": "pubfi.discovery.capability.ankr.ankr-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.ankr.ankr-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=ankr",
          "freshness_ref": "source_freshness_registry#source_slug=ankr",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "bitquery",
          "capability_slug": "bitquery-on-chain-state",
          "capability_id": "pubfi.discovery.capability.bitquery.bitquery-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.bitquery.bitquery-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=bitquery",
          "freshness_ref": "unregistered#source_slug=bitquery",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "blast-api",
          "capability_slug": "blast-api-rpc-infra",
          "capability_id": "pubfi.discovery.capability.blast-api.blast-api-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.blast-api.blast-api-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=blast-api",
          "freshness_ref": "unregistered#source_slug=blast-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "blockdaemon",
          "capability_slug": "blockdaemon-rpc-infra",
          "capability_id": "pubfi.discovery.capability.blockdaemon.blockdaemon-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.blockdaemon.blockdaemon-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=blockdaemon",
          "freshness_ref": "source_freshness_registry#source_slug=blockdaemon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "chainstack",
          "capability_slug": "chainstack-rpc-infra",
          "capability_id": "pubfi.discovery.capability.chainstack.chainstack-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.chainstack.chainstack-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=chainstack",
          "freshness_ref": "source_freshness_registry#source_slug=chainstack",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "covalent",
          "capability_slug": "covalent-on-chain-state",
          "capability_id": "pubfi.discovery.capability.covalent.covalent-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.covalent.covalent-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=covalent",
          "freshness_ref": "unregistered#source_slug=covalent",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-on-chain-state",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "getblock",
          "capability_slug": "getblock-rpc-infra",
          "capability_id": "pubfi.discovery.capability.getblock.getblock-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.getblock.getblock-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=getblock",
          "freshness_ref": "source_freshness_registry#source_slug=getblock",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "infura",
          "capability_slug": "infura-rpc-infra",
          "capability_id": "pubfi.discovery.capability.infura.infura-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.infura.infura-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=infura",
          "freshness_ref": "source_freshness_registry#source_slug=infura",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "moralis",
          "capability_slug": "moralis-nft",
          "capability_id": "pubfi.discovery.capability.moralis.moralis-nft",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.moralis.moralis-nft.nft_metadata_record"
          ],
          "provenance_ref": "public_directory#source_slug=moralis",
          "freshness_ref": "unregistered#source_slug=moralis",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "moralis",
          "capability_slug": "moralis-on-chain-state",
          "capability_id": "pubfi.discovery.capability.moralis.moralis-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.moralis.moralis-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=moralis",
          "freshness_ref": "unregistered#source_slug=moralis",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "nownodes",
          "capability_slug": "nownodes-rpc-infra",
          "capability_id": "pubfi.discovery.capability.nownodes.nownodes-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.nownodes.nownodes-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=nownodes",
          "freshness_ref": "unregistered#source_slug=nownodes",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "pokt-network",
          "capability_slug": "pokt-network-rpc-infra",
          "capability_id": "pubfi.discovery.capability.pokt-network.pokt-network-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.pokt-network.pokt-network-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=pokt-network",
          "freshness_ref": "unregistered#source_slug=pokt-network",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "quicknode",
          "capability_slug": "quicknode-rpc-infra",
          "capability_id": "pubfi.discovery.capability.quicknode.quicknode-rpc-infra",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.quicknode.quicknode-rpc-infra.rpc_endpoint_status"
          ],
          "provenance_ref": "public_directory#source_slug=quicknode",
          "freshness_ref": "source_freshness_registry#source_slug=quicknode",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "the-graph",
          "capability_slug": "the-graph-on-chain-state",
          "capability_id": "pubfi.discovery.capability.the-graph.the-graph-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.the-graph.the-graph-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=the-graph",
          "freshness_ref": "unregistered#source_slug=the-graph",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "zerion-api",
          "capability_slug": "zerion-api-wallet-portfolio",
          "capability_id": "pubfi.discovery.capability.zerion-api.zerion-api-wallet-portfolio",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.zerion-api.zerion-api-wallet-portfolio.wallet_portfolio_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=zerion-api",
          "freshness_ref": "unregistered#source_slug=zerion-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Read public provenance at /discovery/api/defillama and re-check source freshness before live use.",
        "Use the selected capability only through an approved PubFi gateway/runtime path; this plan does not call providers."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "paid-api-requires-approval",
      "dry_run": true,
      "intent": "Route institutional crypto market data and trade feed coverage",
      "status": "paid_requires_approval",
      "reasons": [
        "paid_approval_missing",
        "coverage_match",
        "auth_missing",
        "metadata_missing"
      ],
      "selected": null,
      "candidates": [
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-on-chain-state",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-nft",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-nft",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-nft.nft_metadata_record"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-on-chain-state",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-on-chain-state",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-on-chain-state.chain_state_record"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-nft",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-nft",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-nft.nft_metadata_record"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Treat this as an abstention or blocked dry-run result; do not call an upstream provider."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "missing-auth-blocks-free-api",
      "dry_run": true,
      "intent": "Need BTC order book bid ask liquidity depth across exchanges",
      "status": "blocked_missing_auth",
      "reasons": [
        "auth_missing",
        "coverage_match",
        "paid_approval_missing",
        "metadata_missing"
      ],
      "selected": null,
      "candidates": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Treat this as an abstention or blocked dry-run result; do not call an upstream provider."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "configured-auth-allows-free-api",
      "dry_run": true,
      "intent": "Need BTC order book bid ask liquidity depth across exchanges",
      "status": "current",
      "reasons": [
        "coverage_match",
        "paid_approval_missing",
        "metadata_missing"
      ],
      "selected": {
        "source_slug": "coingecko-api",
        "capability_slug": "exchange-liquidity-depth",
        "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
        "status": "current",
        "reason": "coverage_match",
        "output_envelope_refs": [
          "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
        ],
        "provenance_ref": "public_directory#source_slug=coingecko-api",
        "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
        "error_mode_ref": "pubfi.discovery.error_mode.current"
      },
      "candidates": [
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Read public provenance at /discovery/api/coingecko-api and re-check source freshness before live use.",
        "Use the selected capability only through an approved PubFi gateway/runtime path; this plan does not call providers."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "insufficient-metadata-abstain",
      "dry_run": true,
      "intent": "Compare stablecoin pools and lending markets by APY",
      "status": "insufficient_metadata",
      "reasons": [
        "metadata_missing",
        "coverage_match",
        "paid_approval_missing",
        "auth_missing"
      ],
      "selected": null,
      "candidates": [
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "current",
          "reason": "coverage_match",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.current"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "insufficient_metadata",
          "reason": "metadata_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.insufficient_metadata"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "paid_requires_approval",
          "reason": "paid_approval_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.paid_requires_approval"
        },
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "blocked_missing_auth",
          "reason": "auth_missing",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.blocked_missing_auth"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Ask for an approved PubFi credential path before retrying; do not request upstream secrets.",
        "Collect more contract metadata or emit a demand/procurement preview before retrying.",
        "Create or update procurement review evidence instead of executing a paid route.",
        "Preserve the selected source and capability ids in downstream usage facts.",
        "Treat this as an abstention or blocked dry-run result; do not call an upstream provider."
      ]
    },
    {
      "schema": "pubfi.discovery.agent_dry_run_plan.v1",
      "request_id": "not-applicable-source-abstain",
      "dry_run": true,
      "intent": "Need stock price for NASDAQ equities",
      "status": "missing",
      "reasons": [
        "not_applicable"
      ],
      "selected": null,
      "candidates": [
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        }
      ],
      "blocked_alternatives": [
        {
          "source_slug": "amberdata",
          "capability_slug": "amberdata-market-data",
          "capability_id": "pubfi.discovery.capability.amberdata.amberdata-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.amberdata.amberdata-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=amberdata",
          "freshness_ref": "unregistered#source_slug=amberdata",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "asset-market-data",
          "capability_id": "pubfi.discovery.capability.coingecko-api.asset-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.asset-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coingecko-api",
          "capability_slug": "exchange-liquidity-depth",
          "capability_id": "pubfi.discovery.capability.coingecko-api.exchange-liquidity-depth",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coingecko-api.exchange-liquidity-depth.exchange_depth_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coingecko-api",
          "freshness_ref": "source_freshness_registry#source_slug=coingecko-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "coinmarketcap-api",
          "capability_slug": "coinmarketcap-api-market-data",
          "capability_id": "pubfi.discovery.capability.coinmarketcap-api.coinmarketcap-api-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.coinmarketcap-api.coinmarketcap-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=coinmarketcap-api",
          "freshness_ref": "unregistered#source_slug=coinmarketcap-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "cryptocompare",
          "capability_slug": "cryptocompare-market-data",
          "capability_id": "pubfi.discovery.capability.cryptocompare.cryptocompare-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.cryptocompare.cryptocompare-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=cryptocompare",
          "freshness_ref": "unregistered#source_slug=cryptocompare",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "pool-yield-context",
          "capability_id": "pubfi.discovery.capability.defillama.pool-yield-context",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.pool-yield-context.pool_yield_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "defillama",
          "capability_slug": "protocol-tvl",
          "capability_id": "pubfi.discovery.capability.defillama.protocol-tvl",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.defillama.protocol-tvl.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=defillama",
          "freshness_ref": "unregistered#source_slug=defillama",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "dune-api",
          "capability_slug": "dune-api-market-data",
          "capability_id": "pubfi.discovery.capability.dune-api.dune-api-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.dune-api.dune-api-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=dune-api",
          "freshness_ref": "unregistered#source_slug=dune-api",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "hellomoon",
          "capability_slug": "hellomoon-market-data",
          "capability_id": "pubfi.discovery.capability.hellomoon.hellomoon-market-data",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.hellomoon.hellomoon-market-data.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=hellomoon",
          "freshness_ref": "unregistered#source_slug=hellomoon",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        },
        {
          "source_slug": "kaiko",
          "capability_slug": "institutional-market-feed",
          "capability_id": "pubfi.discovery.capability.kaiko.institutional-market-feed",
          "status": "missing",
          "reason": "not_applicable",
          "output_envelope_refs": [
            "pubfi.discovery.envelope.kaiko.institutional-market-feed.market_data_snapshot"
          ],
          "provenance_ref": "public_directory#source_slug=kaiko",
          "freshness_ref": "unregistered#source_slug=kaiko",
          "error_mode_ref": "pubfi.discovery.error_mode.missing"
        }
      ],
      "normalized_envelope_ref": "#/$defs/NormalizedCapabilityEnvelope",
      "next_actions": [
        "Abstain because the request is outside the current crypto data capability set.",
        "Treat this as an abstention or blocked dry-run result; do not call an upstream provider."
      ]
    }
  ]
}
